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

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 r30787 Created 7 years, 1 month 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 955acd0eb592dca854a758a89f80aada66e079a7..68cdfa76a53dbe3d35f419bcd1d1f43a452ab34e 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)) {
@@ -179,7 +173,7 @@ class TypeTestEmitter extends CodeEmitterHelper {
getFunctionTypeChecksOn(callType);
generateFunctionTypeTests(
call, callType, functionTypeChecks,
- emitFunctionTypeSignature, emitIsFunctionTypeTest);
+ emitFunctionTypeSignature);
}
}
@@ -253,36 +247,19 @@ class TypeTestEmitter extends CodeEmitterHelper {
Element method,
FunctionType methodType,
Map<FunctionType, bool> functionTypeChecks,
- FunctionTypeSignatureEmitter emitFunctionTypeSignature,
- FunctionTypeTestEmitter emitIsFunctionTypeTest) {
- bool hasDynamicFunctionTypeCheck = false;
- int neededPredicates = 0;
+ FunctionTypeSignatureEmitter emitFunctionTypeSignature) {
functionTypeChecks.forEach((FunctionType functionType, bool knownSubtype) {
if (!knownSubtype) {
Johnni Winther 2013/12/03 10:33:16 Remove `if (!knownSubtype) {` and the loop below w
ahe 2013/12/05 14:24:23 Done.
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;
- }
+
+ // TODO(ahe): This method should only consist of the following line.
+ emitFunctionTypeSignature(method, methodType);
+
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);
}
});
}

Powered by Google App Engine
This is Rietveld 408576698