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

Unified Diff: pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart

Issue 1413213004: Move remaining helpers to BackendHelpers (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months 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: pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index 520768557a5dc79dd0a3c9cfc3080eb8c6c5ccd6..2eabee093631d2fcf74a6d1e7a3a4329a1800287 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -13,6 +13,8 @@ class InterceptorStubGenerator {
Emitter get emitter => backend.emitter.emitter;
+ BackendHelpers get helpers => backend.helpers;
+
jsAst.Expression generateGetInterceptorMethod(Set<ClassElement> classes) {
jsAst.Expression interceptorFor(ClassElement cls) {
return backend.emitter.interceptorPrototypeAccess(cls);
@@ -25,20 +27,20 @@ class InterceptorStubGenerator {
jsAst.Statement buildInterceptorCheck(ClassElement cls) {
jsAst.Expression condition;
assert(backend.isInterceptorClass(cls));
- if (cls == backend.jsBoolClass) {
+ if (cls == helpers.jsBoolClass) {
condition = js('(typeof receiver) == "boolean"');
- } else if (cls == backend.jsIntClass ||
- cls == backend.jsDoubleClass ||
- cls == backend.jsNumberClass) {
+ } else if (cls == helpers.jsIntClass ||
+ cls == helpers.jsDoubleClass ||
+ cls == helpers.jsNumberClass) {
throw 'internal error';
- } else if (cls == backend.jsArrayClass ||
- cls == backend.jsMutableArrayClass ||
- cls == backend.jsFixedArrayClass ||
- cls == backend.jsExtendableArrayClass) {
+ } else if (cls == helpers.jsArrayClass ||
+ cls == helpers.jsMutableArrayClass ||
+ cls == helpers.jsFixedArrayClass ||
+ cls == helpers.jsExtendableArrayClass) {
condition = js('receiver.constructor == Array');
- } else if (cls == backend.jsStringClass) {
+ } else if (cls == helpers.jsStringClass) {
condition = js('(typeof receiver) == "string"');
- } else if (cls == backend.jsNullClass) {
+ } else if (cls == helpers.jsNullClass) {
condition = js('receiver == null');
} else {
throw 'internal error';
@@ -58,16 +60,16 @@ class InterceptorStubGenerator {
.hasInstantiatedNativeClasses();
for (ClassElement cls in classes) {
- if (cls == backend.jsArrayClass ||
- cls == backend.jsMutableArrayClass ||
- cls == backend.jsFixedArrayClass ||
- cls == backend.jsExtendableArrayClass) hasArray = true;
- else if (cls == backend.jsBoolClass) hasBool = true;
- else if (cls == backend.jsDoubleClass) hasDouble = true;
- else if (cls == backend.jsIntClass) hasInt = true;
- else if (cls == backend.jsNullClass) hasNull = true;
- else if (cls == backend.jsNumberClass) hasNumber = true;
- else if (cls == backend.jsStringClass) hasString = true;
+ if (cls == helpers.jsArrayClass ||
+ cls == helpers.jsMutableArrayClass ||
+ cls == helpers.jsFixedArrayClass ||
+ cls == helpers.jsExtendableArrayClass) hasArray = true;
+ else if (cls == helpers.jsBoolClass) hasBool = true;
+ else if (cls == helpers.jsDoubleClass) hasDouble = true;
+ else if (cls == helpers.jsIntClass) hasInt = true;
+ else if (cls == helpers.jsNullClass) hasNull = true;
+ else if (cls == helpers.jsNumberClass) hasNumber = true;
+ else if (cls == helpers.jsStringClass) hasString = true;
else {
// The set of classes includes classes mixed-in to interceptor classes
// and user extensions of native classes.
@@ -103,13 +105,13 @@ class InterceptorStubGenerator {
/// is the fallback used when we have determined that receiver
/// is a JavaScript Number.
jsAst.Expression interceptorForNumber = interceptorFor(
- hasDouble ? backend.jsDoubleClass : backend.jsNumberClass);
+ hasDouble ? helpers.jsDoubleClass : helpers.jsNumberClass);
if (hasInt) {
whenNumber = js.statement('''{
if (Math.floor(receiver) == receiver) return #;
return #;
- }''', [interceptorFor(backend.jsIntClass), interceptorForNumber]);
+ }''', [interceptorFor(helpers.jsIntClass), interceptorForNumber]);
} else {
whenNumber = js.statement('return #', interceptorForNumber);
}
@@ -118,10 +120,10 @@ class InterceptorStubGenerator {
}
if (hasString) {
- statements.add(buildInterceptorCheck(backend.jsStringClass));
+ statements.add(buildInterceptorCheck(helpers.jsStringClass));
}
if (hasNull) {
- statements.add(buildInterceptorCheck(backend.jsNullClass));
+ statements.add(buildInterceptorCheck(helpers.jsNullClass));
} else {
// Returning "undefined" or "null" here will provoke a JavaScript
// TypeError which is later identified as a null-error by
@@ -130,12 +132,12 @@ class InterceptorStubGenerator {
js.statement('if (receiver == null) return receiver'));
}
if (hasBool) {
- statements.add(buildInterceptorCheck(backend.jsBoolClass));
+ statements.add(buildInterceptorCheck(helpers.jsBoolClass));
}
// TODO(ahe): It might be faster to check for Array before
// function and bool.
if (hasArray) {
- statements.add(buildInterceptorCheck(backend.jsArrayClass));
+ statements.add(buildInterceptorCheck(helpers.jsArrayClass));
}
if (hasNative) {
@@ -147,13 +149,13 @@ class InterceptorStubGenerator {
if (receiver instanceof #) return receiver;
return #(receiver);
}''', [
- interceptorFor(backend.jsJavaScriptFunctionClass),
+ interceptorFor(helpers.jsJavaScriptFunctionClass),
backend.emitter.constructorAccess(compiler.coreClasses.objectClass),
backend.emitter
- .staticFunctionAccess(backend.getNativeInterceptorMethod)]));
+ .staticFunctionAccess(helpers.getNativeInterceptorMethod)]));
} else {
- ClassElement jsUnknown = backend.jsUnknownJavaScriptObjectClass;
+ ClassElement jsUnknown = helpers.jsUnknownJavaScriptObjectClass;
if (compiler.codegenWorld
.directlyInstantiatedClasses.contains(jsUnknown)) {
statements.add(
@@ -184,9 +186,9 @@ class InterceptorStubGenerator {
return a0 != null && receiver === a0;
}''');
}
- if (!classes.contains(backend.jsIntClass)
- && !classes.contains(backend.jsNumberClass)
- && !classes.contains(backend.jsDoubleClass)) {
+ if (!classes.contains(helpers.jsIntClass)
+ && !classes.contains(helpers.jsNumberClass)
+ && !classes.contains(helpers.jsDoubleClass)) {
return null;
}
if (selector.argumentCount == 1) {
@@ -228,12 +230,12 @@ class InterceptorStubGenerator {
// return receiver[a0] = a1;
// }
// }
- bool containsArray = classes.contains(backend.jsArrayClass);
- bool containsString = classes.contains(backend.jsStringClass);
+ bool containsArray = classes.contains(helpers.jsArrayClass);
+ bool containsString = classes.contains(helpers.jsStringClass);
bool containsJsIndexable =
- backend.jsIndexingBehaviorInterface.isResolved && classes.any((cls) {
+ helpers.jsIndexingBehaviorInterface.isResolved && classes.any((cls) {
return compiler.world.isSubtypeOf(cls,
- backend.jsIndexingBehaviorInterface);
+ helpers.jsIndexingBehaviorInterface);
});
// The index set operator requires a check on its set value in
// checked mode, so we don't optimize the interceptor if the
@@ -310,7 +312,7 @@ class InterceptorStubGenerator {
}
jsAst.Name invocationName = backend.namer.invocationName(selector);
- String globalObject = namer.globalObjectFor(backend.interceptorsLibrary);
+ String globalObject = namer.globalObjectFor(helpers.interceptorsLibrary);
jsAst.Statement optimizedPath =
_fastPathForOneShotInterceptor(selector, classes);

Powered by Google App Engine
This is Rietveld 408576698