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

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

Issue 2814453005: Merge CommonElements and BackendHelpers! (Closed)
Patch Set: comments and re-merge, take two Created 3 years, 8 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 6863e50486fd55aa127a6cfec6d9859cde9ed4a8..6036711be963411c17086727877199f0a92447d9 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -10,7 +10,6 @@ import '../elements/entities.dart';
import '../elements/types.dart' show InterfaceType;
import '../js/js.dart' as jsAst;
import '../js/js.dart' show js;
-import '../js_backend/backend_helpers.dart' show BackendHelpers;
import '../js_backend/js_backend.dart'
show
CustomElementsCodegenAnalysis,
@@ -33,8 +32,6 @@ class InterceptorStubGenerator {
Emitter get emitter => backend.emitter.emitter;
- BackendHelpers get helpers => backend.helpers;
-
jsAst.Expression generateGetInterceptorMethod(Set<ClassEntity> classes) {
jsAst.Expression interceptorFor(ClassEntity cls) {
return backend.emitter.interceptorPrototypeAccess(cls);
@@ -47,20 +44,20 @@ class InterceptorStubGenerator {
jsAst.Statement buildInterceptorCheck(ClassEntity cls) {
jsAst.Expression condition;
assert(backend.interceptorData.isInterceptedClass(cls));
- if (cls == helpers.jsBoolClass) {
+ if (cls == compiler.commonElements.jsBoolClass) {
condition = js('(typeof receiver) == "boolean"');
- } else if (cls == helpers.jsIntClass ||
- cls == helpers.jsDoubleClass ||
- cls == helpers.jsNumberClass) {
+ } else if (cls == compiler.commonElements.jsIntClass ||
+ cls == compiler.commonElements.jsDoubleClass ||
+ cls == compiler.commonElements.jsNumberClass) {
throw 'internal error';
- } else if (cls == helpers.jsArrayClass ||
- cls == helpers.jsMutableArrayClass ||
- cls == helpers.jsFixedArrayClass ||
- cls == helpers.jsExtendableArrayClass) {
+ } else if (cls == compiler.commonElements.jsArrayClass ||
+ cls == compiler.commonElements.jsMutableArrayClass ||
+ cls == compiler.commonElements.jsFixedArrayClass ||
+ cls == compiler.commonElements.jsExtendableArrayClass) {
condition = js('receiver.constructor == Array');
- } else if (cls == helpers.jsStringClass) {
+ } else if (cls == compiler.commonElements.jsStringClass) {
condition = js('(typeof receiver) == "string"');
- } else if (cls == helpers.jsNullClass) {
+ } else if (cls == compiler.commonElements.jsNullClass) {
condition = js('receiver == null');
} else {
throw 'internal error';
@@ -80,22 +77,22 @@ class InterceptorStubGenerator {
backend.nativeCodegenEnqueuer.hasInstantiatedNativeClasses;
for (ClassEntity cls in classes) {
- if (cls == helpers.jsArrayClass ||
- cls == helpers.jsMutableArrayClass ||
- cls == helpers.jsFixedArrayClass ||
- cls == helpers.jsExtendableArrayClass)
+ if (cls == compiler.commonElements.jsArrayClass ||
+ cls == compiler.commonElements.jsMutableArrayClass ||
+ cls == compiler.commonElements.jsFixedArrayClass ||
+ cls == compiler.commonElements.jsExtendableArrayClass)
hasArray = true;
- else if (cls == helpers.jsBoolClass)
+ else if (cls == compiler.commonElements.jsBoolClass)
hasBool = true;
- else if (cls == helpers.jsDoubleClass)
+ else if (cls == compiler.commonElements.jsDoubleClass)
hasDouble = true;
- else if (cls == helpers.jsIntClass)
+ else if (cls == compiler.commonElements.jsIntClass)
hasInt = true;
- else if (cls == helpers.jsNullClass)
+ else if (cls == compiler.commonElements.jsNullClass)
hasNull = true;
- else if (cls == helpers.jsNumberClass)
+ else if (cls == compiler.commonElements.jsNumberClass)
hasNumber = true;
- else if (cls == helpers.jsStringClass)
+ else if (cls == compiler.commonElements.jsStringClass)
hasString = true;
else {
// The set of classes includes classes mixed-in to interceptor classes
@@ -131,8 +128,9 @@ class InterceptorStubGenerator {
/// and JavaScript's Number (typeof receiver == 'number'). This
/// is the fallback used when we have determined that receiver
/// is a JavaScript Number.
- jsAst.Expression interceptorForNumber = interceptorFor(
- hasDouble ? helpers.jsDoubleClass : helpers.jsNumberClass);
+ jsAst.Expression interceptorForNumber = interceptorFor(hasDouble
+ ? compiler.commonElements.jsDoubleClass
+ : compiler.commonElements.jsNumberClass);
if (hasInt) {
whenNumber = js.statement(
@@ -140,7 +138,10 @@ class InterceptorStubGenerator {
if (Math.floor(receiver) == receiver) return #;
return #;
}''',
- [interceptorFor(helpers.jsIntClass), interceptorForNumber]);
+ [
+ interceptorFor(compiler.commonElements.jsIntClass),
+ interceptorForNumber
+ ]);
} else {
whenNumber = js.statement('return #', interceptorForNumber);
}
@@ -149,10 +150,12 @@ class InterceptorStubGenerator {
}
if (hasString) {
- statements.add(buildInterceptorCheck(helpers.jsStringClass));
+ statements
+ .add(buildInterceptorCheck(compiler.commonElements.jsStringClass));
}
if (hasNull) {
- statements.add(buildInterceptorCheck(helpers.jsNullClass));
+ statements
+ .add(buildInterceptorCheck(compiler.commonElements.jsNullClass));
} else {
// Returning "undefined" or "null" here will provoke a JavaScript
// TypeError which is later identified as a null-error by
@@ -160,12 +163,14 @@ class InterceptorStubGenerator {
statements.add(js.statement('if (receiver == null) return receiver'));
}
if (hasBool) {
- statements.add(buildInterceptorCheck(helpers.jsBoolClass));
+ statements
+ .add(buildInterceptorCheck(compiler.commonElements.jsBoolClass));
}
// TODO(ahe): It might be faster to check for Array before
// function and bool.
if (hasArray) {
- statements.add(buildInterceptorCheck(helpers.jsArrayClass));
+ statements
+ .add(buildInterceptorCheck(compiler.commonElements.jsArrayClass));
}
if (hasNative) {
@@ -179,14 +184,15 @@ class InterceptorStubGenerator {
return #(receiver);
}''',
[
- interceptorFor(helpers.jsJavaScriptFunctionClass),
+ interceptorFor(compiler.commonElements.jsJavaScriptFunctionClass),
backend.emitter
.constructorAccess(compiler.commonElements.objectClass),
- backend.emitter
- .staticFunctionAccess(helpers.getNativeInterceptorMethod)
+ backend.emitter.staticFunctionAccess(
+ compiler.commonElements.getNativeInterceptorMethod)
]));
} else {
- ClassEntity jsUnknown = helpers.jsUnknownJavaScriptObjectClass;
+ ClassEntity jsUnknown =
+ compiler.commonElements.jsUnknownJavaScriptObjectClass;
if (compiler.codegenWorldBuilder.directlyInstantiatedClasses
.contains(jsUnknown)) {
statements.add(js.statement('if (!(receiver instanceof #)) return #;', [
@@ -216,9 +222,9 @@ class InterceptorStubGenerator {
return a0 != null && receiver === a0;
}''');
}
- if (!classes.contains(helpers.jsIntClass) &&
- !classes.contains(helpers.jsNumberClass) &&
- !classes.contains(helpers.jsDoubleClass)) {
+ if (!classes.contains(compiler.commonElements.jsIntClass) &&
+ !classes.contains(compiler.commonElements.jsNumberClass) &&
+ !classes.contains(compiler.commonElements.jsDoubleClass)) {
return null;
}
if (selector.argumentCount == 1) {
@@ -265,14 +271,16 @@ class InterceptorStubGenerator {
// }
// }
// }
- bool containsArray = classes.contains(helpers.jsArrayClass);
- bool containsString = classes.contains(helpers.jsStringClass);
- bool containsJsIndexable =
- closedWorld.isImplemented(helpers.jsIndexingBehaviorInterface) &&
- classes.any((cls) {
- return closedWorld.isSubtypeOf(
- cls, helpers.jsIndexingBehaviorInterface);
- });
+ bool containsArray =
+ classes.contains(compiler.commonElements.jsArrayClass);
+ bool containsString =
+ classes.contains(compiler.commonElements.jsStringClass);
+ bool containsJsIndexable = closedWorld.isImplemented(
+ compiler.commonElements.jsIndexingBehaviorInterface) &&
+ classes.any((cls) {
+ return closedWorld.isSubtypeOf(
+ cls, compiler.commonElements.jsIndexingBehaviorInterface);
+ });
// The index set operator requires a check on its set value in
// checked mode, so we don't optimize the interceptor if the
// compiler has type assertions enabled.
@@ -355,8 +363,8 @@ class InterceptorStubGenerator {
}
jsAst.Name invocationName = backend.namer.invocationName(selector);
- String globalObject =
- namer.globalObjectForLibrary(helpers.interceptorsLibrary);
+ String globalObject = namer
+ .globalObjectForLibrary(compiler.commonElements.interceptorsLibrary);
jsAst.Statement optimizedPath =
_fastPathForOneShotInterceptor(selector, classes);

Powered by Google App Engine
This is Rietveld 408576698