Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart

Issue 50313007: Implement dynamic function checks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r30897. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
index 0d521bb0abbcb526c371a0b2283cdb008b700e67..d92cacfeabcd901591f6b892df4c09a474b850a1 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
@@ -53,11 +53,6 @@ class TypeTestEmitter extends CodeEmitterHelper {
builder.addProperty(namer.operatorIs(other), js('true'));
}
- void generateIsFunctionTypeTest(FunctionType type) {
- String operator = namer.operatorIsType(type);
- builder.addProperty(operator, new jsAst.LiteralBool(true));
- }
-
void generateFunctionTypeSignature(Element method, FunctionType type) {
assert(method.isImplementation);
jsAst.Expression thisAccess = new jsAst.This();
@@ -94,7 +89,7 @@ class TypeTestEmitter extends CodeEmitterHelper {
}
generateIsTestsOn(classElement, generateIsTest,
- generateIsFunctionTypeTest, generateFunctionTypeSignature,
+ generateFunctionTypeSignature,
generateSubstitution);
}
@@ -107,7 +102,6 @@ class TypeTestEmitter extends CodeEmitterHelper {
*/
void generateIsTestsOn(ClassElement cls,
void emitIsTest(Element element),
- FunctionTypeTestEmitter emitIsFunctionTypeTest,
FunctionTypeSignatureEmitter emitFunctionTypeSignature,
SubstitutionEmitter emitSubstitution) {
if (checkedClasses.contains(cls)) {
@@ -176,7 +170,7 @@ class TypeTestEmitter extends CodeEmitterHelper {
getFunctionTypeChecksOn(callType);
generateFunctionTypeTests(
call, callType, functionTypeChecks,
- emitFunctionTypeSignature, emitIsFunctionTypeTest);
+ emitFunctionTypeSignature);
}
}
@@ -250,38 +244,14 @@ class TypeTestEmitter extends CodeEmitterHelper {
Element method,
FunctionType methodType,
Map<FunctionType, bool> functionTypeChecks,
- FunctionTypeSignatureEmitter emitFunctionTypeSignature,
- FunctionTypeTestEmitter emitIsFunctionTypeTest) {
- bool hasDynamicFunctionTypeCheck = false;
- int neededPredicates = 0;
- functionTypeChecks.forEach((FunctionType functionType, bool knownSubtype) {
- if (!knownSubtype) {
- registerDynamicFunctionTypeCheck(functionType);
- hasDynamicFunctionTypeCheck = true;
- } else if (!backend.rti.isSimpleFunctionType(functionType)) {
- // Simple function types are always checked using predicates and should
- // not provoke generation of signatures.
- neededPredicates++;
- }
- });
- bool alwaysUseSignature = false;
- if (hasDynamicFunctionTypeCheck ||
- neededPredicates > MAX_FUNCTION_TYPE_PREDICATES) {
- emitFunctionTypeSignature(method, methodType);
- alwaysUseSignature = true;
- }
+ FunctionTypeSignatureEmitter emitFunctionTypeSignature) {
+
+ // TODO(ahe): We should be able to remove this forEach loop.
functionTypeChecks.forEach((FunctionType functionType, bool knownSubtype) {
- if (knownSubtype) {
- if (backend.rti.isSimpleFunctionType(functionType)) {
- // Simple function types are always checked using predicates.
- emitIsFunctionTypeTest(functionType);
- } else if (alwaysUseSignature) {
- registerDynamicFunctionTypeCheck(functionType);
- } else {
- emitIsFunctionTypeTest(functionType);
- }
- }
+ registerDynamicFunctionTypeCheck(functionType);
});
+
+ emitFunctionTypeSignature(method, methodType);
}
void registerDynamicFunctionTypeCheck(FunctionType functionType) {

Powered by Google App Engine
This is Rietveld 408576698