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

Unified Diff: pkg/compiler/lib/src/ssa/codegen.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
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/interceptor_simplifier.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/codegen.dart
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 7c7cb3c8f5d419e738120f2017c73988910e29ce..04a17c47c7a8277013c280a91e549906a316046b 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -157,6 +157,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
CodegenRegistry get registry => work.registry;
+ BackendHelpers get helpers => backend.helpers;
+
native.NativeEnqueuer get nativeEnqueuer {
return compiler.enqueuer.codegen.nativeEnqueuer;
}
@@ -706,8 +708,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
registry.registerInstantiatedClass(classElement);
}
}
- register(backend.jsPlainJavaScriptObjectClass);
- register(backend.jsUnknownJavaScriptObjectClass);
+ register(helpers.jsPlainJavaScriptObjectClass);
+ register(helpers.jsUnknownJavaScriptObjectClass);
HLocalValue exception = info.catchVariable;
String name = variableNames.getName(exception);
@@ -1523,7 +1525,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
js.Name name =
backend.namer.nameForGetInterceptor(node.interceptedClasses);
var isolate = new js.VariableUse(
- backend.namer.globalObjectFor(backend.interceptorsLibrary));
+ backend.namer.globalObjectFor(helpers.interceptorsLibrary));
use(node.receiver);
List<js.Expression> arguments = <js.Expression>[pop()];
push(js.propertyCall(isolate, name, arguments)
@@ -1541,11 +1543,11 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
// TODO(herhut): The namer should return the appropriate backendname here.
if (target != null && !node.isInterceptedCall) {
- if (target == backend.jsArrayAdd) {
+ if (target == helpers.jsArrayAdd) {
methodName = 'push';
- } else if (target == backend.jsArrayRemoveLast) {
+ } else if (target == helpers.jsArrayRemoveLast) {
methodName = 'pop';
- } else if (target == backend.jsStringSplit) {
+ } else if (target == helpers.jsStringSplit) {
methodName = 'split';
// Split returns a List, so we make sure the backend knows the
// list class is instantiated.
@@ -1583,7 +1585,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
void visitOneShotInterceptor(HOneShotInterceptor node) {
List<js.Expression> arguments = visitArguments(node.inputs);
var isolate = new js.VariableUse(
- backend.namer.globalObjectFor(backend.interceptorsLibrary));
+ backend.namer.globalObjectFor(helpers.interceptorsLibrary));
Selector selector = node.selector;
TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
js.Name methodName = backend.registerOneShotInterceptor(selector);
@@ -1797,7 +1799,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
// that does not exist.
push(new js.PropertyAccess.field(pop(), 'toString')
.withSourceInformation(node.sourceInformation));
- } else if (element == backend.jsIndexableLength) {
+ } else if (element == helpers.jsIndexableLength) {
// We're accessing a native JavaScript property called 'length'
// on a JS String or a JS array. Therefore, the name of that
// property should not be mangled.
@@ -2080,7 +2082,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
pushStatement(new js.Throw(pop())
.withSourceInformation(node.sourceInformation));
} else {
- generateThrowWithHelper('wrapException', node.inputs[0],
+ generateThrowWithHelper(helpers.wrapExceptionHelper, node.inputs[0],
sourceInformation: node.sourceInformation);
}
}
@@ -2141,19 +2143,20 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
js.Statement thenBody = new js.Block.empty();
js.Block oldContainer = currentContainer;
currentContainer = thenBody;
- generateThrowWithHelper('ioore', [node.array, node.reportedIndex]);
+ generateThrowWithHelper(helpers.throwIndexOutOfRangeException,
+ [node.array, node.reportedIndex]);
currentContainer = oldContainer;
thenBody = unwrapStatement(thenBody);
pushStatement(new js.If.noElse(underOver, thenBody)
.withSourceInformation(node.sourceInformation));
} else {
- generateThrowWithHelper('ioore', [node.array, node.index]);
+ generateThrowWithHelper(helpers.throwIndexOutOfRangeException,
+ [node.array, node.index]);
}
}
- void generateThrowWithHelper(String helperName, argument,
+ void generateThrowWithHelper(Element helper, argument,
{SourceInformation sourceInformation}) {
- Element helper = backend.findHelper(helperName);
registry.registerStaticUse(helper);
js.Expression jsHelper = backend.emitter.staticFunctionAccess(helper);
List arguments = [];
@@ -2174,7 +2177,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
// BUG(4906): Using throw/return here adds to the size of the generated code
// but it has the advantage of explicitly telling the JS engine that
// this code path will terminate abruptly. Needs more work.
- if (helperName == 'wrapException') {
+ if (helper == helpers.wrapExceptionHelper) {
pushStatement(new js.Throw(value)
.withSourceInformation(sourceInformation));
} else {
@@ -2196,7 +2199,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
HInstruction argument = node.inputs[0];
use(argument);
- Element helper = backend.findHelper("throwExpression");
+ Element helper = helpers.throwExpressionHelper;
registry.registerStaticUse(helper);
js.Expression jsHelper = backend.emitter.staticFunctionAccess(helper);
@@ -2427,31 +2430,31 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
SourceInformation sourceInformation,
{bool negative: false}) {
Element element = type.element;
- if (element == backend.jsArrayClass) {
+ if (element == helpers.jsArrayClass) {
checkArray(input, negative ? '!==': '===');
return;
- } else if (element == backend.jsMutableArrayClass) {
+ } else if (element == helpers.jsMutableArrayClass) {
if (negative) {
checkImmutableArray(input);
} else {
checkMutableArray(input);
}
return;
- } else if (element == backend.jsExtendableArrayClass) {
+ } else if (element == helpers.jsExtendableArrayClass) {
if (negative) {
checkFixedArray(input);
} else {
checkExtendableArray(input);
}
return;
- } else if (element == backend.jsFixedArrayClass) {
+ } else if (element == helpers.jsFixedArrayClass) {
if (negative) {
checkExtendableArray(input);
} else {
checkFixedArray(input);
}
return;
- } else if (element == backend.jsUnmodifiableArrayClass) {
+ } else if (element == helpers.jsUnmodifiableArrayClass) {
if (negative) {
checkMutableArray(input);
} else {
@@ -2690,7 +2693,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
bool turnIntoNullCheck = !turnIntoNumCheck
&& (checkedType.nullable() == inputType)
&& (isIntCheck
- || checkedType.satisfies(backend.jsIndexableClass, classWorld));
+ || checkedType.satisfies(helpers.jsIndexableClass, classWorld));
if (turnIntoNullCheck) {
use(input);
@@ -2731,7 +2734,8 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
js.Statement body = new js.Block.empty();
currentContainer = body;
if (node.isArgumentTypeCheck) {
- generateThrowWithHelper('iae',
+ generateThrowWithHelper(
+ helpers.throwIllegalArgumentException,
node.checkedInput,
sourceInformation: node.sourceInformation);
} else if (node.isReceiverTypeCheck) {
@@ -2826,7 +2830,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
void visitReadTypeVariable(HReadTypeVariable node) {
TypeVariableElement element = node.dartType.element;
- Element helperElement = backend.findHelper('convertRtiToRuntimeType');
+ Element helperElement = helpers.convertRtiToRuntimeType;
registry.registerStaticUse(helperElement);
use(node.inputs[0]);
@@ -2845,8 +2849,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
}
} else {
push(js.js('#(#)', [
- backend.emitter.staticFunctionAccess(
- backend.findHelper('convertRtiToRuntimeType')),
+ backend.emitter.staticFunctionAccess(helperElement),
pop()]));
}
}
@@ -2875,7 +2878,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
}
js.PropertyAccess accessHelper(String name) {
- Element helper = backend.findHelper(name);
+ Element helper = helpers.findHelper(name);
if (helper == null) {
// For mocked-up tests.
return js.js('(void 0).$name');
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/interceptor_simplifier.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698