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

Unified Diff: pkg/compiler/lib/src/ssa/builder.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
« no previous file with comments | « pkg/compiler/lib/src/patch_parser.dart ('k') | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/builder.dart
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 748fccfba38809d7b516045d0a1b0c04748c540b..7f13d7dab66dd0d83e2e7998d8eadd47fe233fa9 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -23,7 +23,7 @@ import '../elements/entities.dart';
import '../elements/modelx.dart' show ConstructorBodyElementX;
import '../io/source_information.dart';
import '../js/js.dart' as js;
-import '../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../js_backend/backend.dart' show JavaScriptBackend;
import '../js_backend/js_backend.dart';
import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
import '../native/native.dart' as native;
@@ -707,7 +707,8 @@ class SsaBuilder extends ast.Visitor
parameters.values.where((p) => p.instructionType.isEmpty);
if (emptyParameters.length > 0) {
addComment('${emptyParameters} inferred as [empty]');
- pushInvokeStatic(function.body, helpers.assertUnreachableMethod, []);
+ pushInvokeStatic(
+ function.body, commonElements.assertUnreachableMethod, []);
pop();
return closeFunction();
}
@@ -1434,24 +1435,24 @@ class SsaBuilder extends ast.Visitor
insertTraceCall(Element element) {
if (JavaScriptBackend.TRACE_METHOD == 'console') {
- if (element == helpers.traceHelper) return;
+ if (element == commonElements.traceHelper) return;
n(e) => e == null ? '' : e.name;
String name = "${n(element.library)}:${n(element.enclosingClass)}."
"${n(element)}";
HConstant nameConstant = addConstantString(name);
- add(new HInvokeStatic(helpers.traceHelper, <HInstruction>[nameConstant],
- commonMasks.dynamicType));
+ add(new HInvokeStatic(commonElements.traceHelper,
+ <HInstruction>[nameConstant], commonMasks.dynamicType));
}
}
insertCoverageCall(Element element) {
if (JavaScriptBackend.TRACE_METHOD == 'post') {
- if (element == helpers.traceHelper) return;
+ if (element == commonElements.traceHelper) return;
// TODO(sigmund): create a better uuid for elements.
HConstant idConstant =
graph.addConstantInt(element.hashCode, closedWorld);
HConstant nameConstant = addConstantString(element.name);
- add(new HInvokeStatic(helpers.traceHelper,
+ add(new HInvokeStatic(commonElements.traceHelper,
<HInstruction>[idConstant, nameConstant], commonMasks.dynamicType));
}
}
@@ -1464,7 +1465,7 @@ class SsaBuilder extends ast.Visitor
localsHandler.substInContext(supertype), sourceElement);
HInstruction messageInstruction = graph.addConstantString(
new ast.DartString.literal(message), closedWorld);
- MethodElement element = helpers.assertIsSubtype;
+ MethodElement element = commonElements.assertIsSubtype;
var inputs = <HInstruction>[
subtypeInstruction,
supertypeInstruction,
@@ -1529,7 +1530,7 @@ class SsaBuilder extends ast.Visitor
// assertHelper(condition);
//
visit(node.condition);
- pushInvokeStatic(node, helpers.assertHelper, [pop()]);
+ pushInvokeStatic(node, commonElements.assertHelper, [pop()]);
pop();
return;
}
@@ -1539,12 +1540,12 @@ class SsaBuilder extends ast.Visitor
//
void buildCondition() {
visit(node.condition);
- pushInvokeStatic(node, helpers.assertTest, [pop()]);
+ pushInvokeStatic(node, commonElements.assertTest, [pop()]);
}
void fail() {
visit(node.message);
- pushInvokeStatic(node, helpers.assertThrow, [pop()]);
+ pushInvokeStatic(node, commonElements.assertThrow, [pop()]);
pop();
}
@@ -2027,7 +2028,7 @@ class SsaBuilder extends ast.Visitor
HInstruction loadIdConstant = addConstantString(loadId);
String uri = prefixElement.deferredImport.uri.toString();
HInstruction uriConstant = addConstantString(uri);
- MethodElement helper = helpers.checkDeferredIsLoaded;
+ MethodElement helper = commonElements.checkDeferredIsLoaded;
pushInvokeStatic(location, helper, [loadIdConstant, uriConstant]);
pop();
}
@@ -2393,21 +2394,21 @@ class SsaBuilder extends ast.Visitor
expression,
representation,
];
- pushInvokeStatic(node, helpers.functionTypeTest, inputs,
+ pushInvokeStatic(node, commonElements.functionTypeTest, inputs,
typeMask: commonMasks.boolType);
HInstruction call = pop();
return new HIs.compound(type, expression, call, commonMasks.boolType);
} else if (type.isTypeVariable) {
HInstruction runtimeType =
typeBuilder.addTypeVariableReference(type, sourceElement);
- MethodElement helper = helpers.checkSubtypeOfRuntimeType;
+ MethodElement helper = commonElements.checkSubtypeOfRuntimeType;
List<HInstruction> inputs = <HInstruction>[expression, runtimeType];
pushInvokeStatic(null, helper, inputs, typeMask: commonMasks.boolType);
HInstruction call = pop();
return new HIs.variable(type, expression, call, commonMasks.boolType);
} else if (RuntimeTypesSubstitutions.hasTypeArguments(type)) {
ClassElement element = type.element;
- MethodElement helper = helpers.checkSubtype;
+ MethodElement helper = commonElements.checkSubtype;
HInstruction representations =
typeBuilder.buildTypeArgumentRepresentations(type, sourceElement);
add(representations);
@@ -2671,7 +2672,7 @@ class SsaBuilder extends ast.Visitor
// Call a helper method from the isolate library. The isolate
// library uses its own isolate structure, that encapsulates
// Leg's isolate.
- MethodElement element = helpers.currentIsolate;
+ MethodElement element = commonElements.currentIsolate;
if (element == null) {
reporter.internalError(node, 'Isolate library and compiler mismatch.');
}
@@ -2739,7 +2740,7 @@ class SsaBuilder extends ast.Visitor
Element element = elements[argument];
if (element == null ||
element is! EnumConstantElement ||
- element.enclosingClass != helpers.jsGetNameEnum) {
+ element.enclosingClass != commonElements.jsGetNameEnum) {
reporter.reportErrorMessage(argument, MessageKind.GENERIC,
{'text': 'Error: Expected a JsGetName enum value.'});
}
@@ -2760,7 +2761,7 @@ class SsaBuilder extends ast.Visitor
Element builtinElement = elements[arguments[1]];
if (builtinElement == null ||
(builtinElement is! EnumConstantElement) ||
- builtinElement.enclosingClass != helpers.jsBuiltinEnum) {
+ builtinElement.enclosingClass != commonElements.jsBuiltinEnum) {
reporter.reportErrorMessage(argument, MessageKind.GENERIC,
{'text': 'Error: Expected a JsBuiltin enum value.'});
}
@@ -2864,7 +2865,7 @@ class SsaBuilder extends ast.Visitor
<HInstruction>[pop()], commonMasks.dynamicType));
} else {
// Call a helper method from the isolate library.
- MethodElement element = helpers.callInIsolate;
+ MethodElement element = commonElements.callInIsolate;
if (element == null) {
reporter.internalError(node, 'Isolate library and compiler mismatch.');
}
@@ -2940,7 +2941,7 @@ class SsaBuilder extends ast.Visitor
void handleForeignSend(ast.Send node, FunctionElement element) {
String name = element.name;
- if (name == BackendHelpers.JS) {
+ if (name == JavaScriptBackend.JS) {
handleForeignJs(node);
} else if (name == 'JS_CURRENT_ISOLATE_CONTEXT') {
handleForeignJsCurrentIsolateContext(node);
@@ -2956,15 +2957,15 @@ class SsaBuilder extends ast.Visitor
handleForeignJsGetStaticState(node);
} else if (name == 'JS_GET_NAME') {
handleForeignJsGetName(node);
- } else if (name == BackendHelpers.JS_EMBEDDED_GLOBAL) {
+ } else if (name == JavaScriptBackend.JS_EMBEDDED_GLOBAL) {
handleForeignJsEmbeddedGlobal(node);
- } else if (name == BackendHelpers.JS_BUILTIN) {
+ } else if (name == JavaScriptBackend.JS_BUILTIN) {
handleForeignJsBuiltin(node);
} else if (name == 'JS_GET_FLAG') {
handleForeignJsGetFlag(node);
} else if (name == 'JS_EFFECT') {
stack.add(graph.addConstantNull(closedWorld));
- } else if (name == BackendHelpers.JS_INTERCEPTOR_CONSTANT) {
+ } else if (name == JavaScriptBackend.JS_INTERCEPTOR_CONSTANT) {
handleJsInterceptorConstant(node);
} else if (name == 'JS_STRING_CONCAT') {
handleJsStringConcat(node);
@@ -2977,7 +2978,7 @@ class SsaBuilder extends ast.Visitor
SourceInformation sourceInformation) {
// Until now we only handle these as getters.
invariant(node, deferredLoader.isDeferredLoaderGetter);
- FunctionEntity loadFunction = helpers.loadLibraryWrapper;
+ FunctionEntity loadFunction = commonElements.loadLibraryWrapper;
PrefixElement prefixElement = deferredLoader.enclosingElement;
String loadId =
compiler.deferredLoadTask.getImportDeferName(node, prefixElement);
@@ -3015,7 +3016,8 @@ class SsaBuilder extends ast.Visitor
js.Name internalName = namer.invocationName(selector);
- MethodElement createInvocationMirror = helpers.createInvocationMirror;
+ MethodElement createInvocationMirror =
+ commonElements.createInvocationMirror;
var argumentsInstruction = buildLiteralList(arguments);
add(argumentsInstruction);
@@ -3245,7 +3247,7 @@ class SsaBuilder extends ast.Visitor
HInstruction callSetRuntimeTypeInfo(
HInstruction typeInfo, HInstruction newObject) {
// Set the runtime type information on the object.
- MethodElement typeInfoSetterElement = helpers.setRuntimeTypeInfo;
+ MethodElement typeInfoSetterElement = commonElements.setRuntimeTypeInfo;
pushInvokeStatic(
null, typeInfoSetterElement, <HInstruction>[newObject, typeInfo],
typeMask: commonMasks.dynamicType,
@@ -3319,14 +3321,15 @@ class SsaBuilder extends ast.Visitor
final bool isSymbolConstructor =
closedWorld.commonElements.isSymbolConstructor(constructorDeclaration);
- final bool isJSArrayTypedConstructor =
- constructorDeclaration == helpers.jsArrayTypedConstructor;
+ final bool isJSArrayTypedConstructor = constructorDeclaration ==
+ closedWorld.commonElements.jsArrayTypedConstructor;
if (isSymbolConstructor) {
- constructor = helpers.symbolValidatedConstructor;
+ constructor = commonElements.symbolValidatedConstructor;
assert(invariant(send, constructor != null,
message: 'Constructor Symbol.validated is missing'));
- callStructure = helpers.symbolValidatedConstructorSelector.callStructure;
+ callStructure =
+ commonElements.symbolValidatedConstructorSelector.callStructure;
assert(invariant(send, callStructure != null,
message: 'Constructor Symbol.validated is missing'));
}
@@ -3753,9 +3756,9 @@ class SsaBuilder extends ast.Visitor
ResolutionDartType type = localsHandler.substInContext(typeVariable);
HInstruction value = typeBuilder.analyzeTypeArgument(type, sourceElement,
sourceInformation: sourceInformationBuilder.buildGet(node));
- pushInvokeStatic(node, helpers.runtimeTypeToString, [value],
+ pushInvokeStatic(node, commonElements.runtimeTypeToString, [value],
typeMask: commonMasks.stringType);
- pushInvokeStatic(node, helpers.createRuntimeType, [pop()]);
+ pushInvokeStatic(node, commonElements.createRuntimeType, [pop()]);
}
}
@@ -3796,17 +3799,17 @@ class SsaBuilder extends ast.Visitor
}
void generateRuntimeError(ast.Node node, String message) {
- MethodElement helper = helpers.throwRuntimeError;
+ MethodElement helper = commonElements.throwRuntimeError;
generateError(node, message, helper);
}
void generateTypeError(ast.Node node, String message) {
- MethodElement helper = helpers.throwTypeError;
+ MethodElement helper = commonElements.throwTypeError;
generateError(node, message, helper);
}
void generateAbstractClassInstantiationError(ast.Node node, String message) {
- MethodElement helper = helpers.throwAbstractClassInstantiationError;
+ MethodElement helper = commonElements.throwAbstractClassInstantiationError;
generateError(node, message, helper);
}
@@ -3815,7 +3818,7 @@ class SsaBuilder extends ast.Visitor
List<HInstruction> argumentValues,
List<String> existingArguments,
SourceInformation sourceInformation}) {
- MethodElement helper = helpers.throwNoSuchMethod;
+ MethodElement helper = commonElements.throwNoSuchMethod;
ConstantValue receiverConstant =
constantSystem.createString(new ast.DartString.empty());
HInstruction receiver = graph.addConstant(receiverConstant, closedWorld);
@@ -3930,10 +3933,10 @@ class SsaBuilder extends ast.Visitor
bool isLength = selector.isGetter && selector.name == "length";
if (isLength || selector.isIndex) {
return closedWorld.isSubtypeOf(
- element.enclosingClass, helpers.jsIndexableClass);
+ element.enclosingClass, commonElements.jsIndexableClass);
} else if (selector.isIndexSet) {
return closedWorld.isSubtypeOf(
- element.enclosingClass, helpers.jsMutableIndexableClass);
+ element.enclosingClass, commonElements.jsMutableIndexableClass);
} else {
return false;
}
@@ -3947,9 +3950,9 @@ class SsaBuilder extends ast.Visitor
if (selector.isSetter) return true;
if (selector.isIndex) return true;
if (selector.isIndexSet) return true;
- if (element == helpers.jsArrayAdd ||
- element == helpers.jsArrayRemoveLast ||
- element == helpers.jsStringSplit) {
+ if (element == commonElements.jsArrayAdd ||
+ element == commonElements.jsArrayRemoveLast ||
+ element == commonElements.jsStringSplit) {
return true;
}
return false;
@@ -4065,7 +4068,7 @@ class SsaBuilder extends ast.Visitor
if (!options.trustJSInteropTypeAnnotations ||
type.isObject ||
type.isDynamic) {
- ClassElement cls = helpers.jsJavaScriptObjectClass;
+ ClassElement cls = commonElements.jsJavaScriptObjectClass;
nativeBehavior.typesInstantiated.add(cls.thisType);
}
@@ -5311,7 +5314,7 @@ class SsaBuilder extends ast.Visitor
visit(node.expression);
HInstruction expression = pop();
- ConstructorElement constructor = helpers.streamIteratorConstructor;
+ ConstructorElement constructor = commonElements.streamIteratorConstructor;
pushInvokeStatic(
node, constructor, [expression, graph.addConstantNull(closedWorld)]);
streamIterator = pop();
@@ -5379,9 +5382,9 @@ class SsaBuilder extends ast.Visitor
TypeMask mask = elementInferenceResults.typeOfIterator(node);
if (mask != null &&
- mask.satisfies(helpers.jsIndexableClass, closedWorld) &&
+ mask.satisfies(commonElements.jsIndexableClass, closedWorld) &&
// String is indexable but not iterable.
- !mask.satisfies(helpers.jsStringClass, closedWorld)) {
+ !mask.satisfies(commonElements.jsStringClass, closedWorld)) {
return buildSyncForInIndexable(node, mask);
}
buildSyncForInIterator(node);
@@ -5479,8 +5482,8 @@ class SsaBuilder extends ast.Visitor
//
HInstruction length = buildGetLength();
push(new HIdentity(length, originalLength, null, boolType));
- pushInvokeStatic(
- node, helpers.checkConcurrentModificationError, [pop(), array]);
+ pushInvokeStatic(node, commonElements.checkConcurrentModificationError,
+ [pop(), array]);
pop();
}
@@ -5608,9 +5611,9 @@ class SsaBuilder extends ast.Visitor
List<HInstruction> inputs = <HInstruction>[];
if (listInputs.isEmpty) {
- listConstructor = helpers.mapLiteralConstructorEmpty;
+ listConstructor = commonElements.mapLiteralConstructorEmpty;
} else {
- listConstructor = helpers.mapLiteralConstructor;
+ listConstructor = commonElements.mapLiteralConstructor;
HLiteralList keyValuePairs = buildLiteralList(listInputs);
add(keyValuePairs);
inputs.add(keyValuePairs);
@@ -5640,9 +5643,9 @@ class SsaBuilder extends ast.Visitor
// in the output.
if (typeInputs.every((HInstruction input) => input.isNull())) {
if (listInputs.isEmpty) {
- createFunction = helpers.mapLiteralUntypedEmptyMaker;
+ createFunction = commonElements.mapLiteralUntypedEmptyMaker;
} else {
- createFunction = helpers.mapLiteralUntypedMaker;
+ createFunction = commonElements.mapLiteralUntypedMaker;
}
} else {
inputs.addAll(typeInputs);
@@ -5658,8 +5661,8 @@ class SsaBuilder extends ast.Visitor
// The instruction type will always be a subtype of the mapLiteralClass, but
// type inference might discover a more specific type, or find nothing (in
// dart2js unit tests).
- TypeMask mapType =
- new TypeMask.nonNullSubtype(helpers.mapLiteralClass, closedWorld);
+ TypeMask mapType = new TypeMask.nonNullSubtype(
+ commonElements.mapLiteralClass, closedWorld);
TypeMask returnTypeMask = TypeMaskFactory.inferredReturnTypeForElement(
createFunction, globalInferenceResults);
TypeMask instructionType =
@@ -5966,7 +5969,7 @@ class SsaBuilder extends ast.Visitor
buildSwitchCase(switchCase);
if (!isAborted()) {
if (caseIterator.hasNext && isReachable) {
- pushInvokeStatic(switchCase, helpers.fallThroughError, []);
+ pushInvokeStatic(switchCase, commonElements.fallThroughError, []);
HInstruction error = pop();
closeAndGotoExit(new HThrow(error, error.sourceInformation));
} else if (!isDefaultCase(switchCase)) {
@@ -6186,7 +6189,7 @@ class SsaBuilder extends ast.Visitor
HInstruction oldRethrowableException = rethrowableException;
rethrowableException = exception;
- pushInvokeStatic(node, helpers.exceptionUnwrapper, [exception]);
+ pushInvokeStatic(node, commonElements.exceptionUnwrapper, [exception]);
HInvokeStatic unwrappedException = pop();
tryInstruction.exception = exception;
Link<ast.Node> link = node.catchBlocks.nodes;
@@ -6231,7 +6234,8 @@ class SsaBuilder extends ast.Visitor
}
ast.Node trace = catchBlock.trace;
if (trace != null) {
- pushInvokeStatic(trace, helpers.traceFromException, [exception]);
+ pushInvokeStatic(
+ trace, commonElements.traceFromException, [exception]);
HInstruction traceInstruction = pop();
LocalVariableElement traceVariable = elements[trace];
localsHandler.updateLocal(traceVariable, traceInstruction);
« no previous file with comments | « pkg/compiler/lib/src/patch_parser.dart ('k') | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698