Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
index dfb59eb46268e49b5a89fdec9619b75ac18f08fb..7dbf72c1d23e72af5ba599e6b1dc66c2abd7806d 100644 |
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
@@ -470,7 +470,10 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
for (Local param in getConstructorBodyParameters(bodyElement)) { |
bodyArguments.add(irBuilder.environment.lookup(param)); |
} |
- irBuilder.buildInvokeDirectly(bodyElement, instance, bodyArguments); |
+ Selector selector = new Selector.call(target.memberName, |
+ new CallStructure(bodyArguments.length)); |
+ irBuilder.addPrimitive(new ir.InvokeMethodDirectly( |
+ instance, bodyElement, selector, bodyArguments, null)); |
} |
// --- step 4: return the created object ---- |
@@ -1062,13 +1065,15 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
} |
visitAwait(ast.Await node) { |
+ assert(irBuilder.isOpen); |
ir.Primitive value = visit(node.expression); |
- return irBuilder.buildAwait(value); |
+ return irBuilder.addPrimitive(new ir.Await(value)); |
} |
visitYield(ast.Yield node) { |
+ assert(irBuilder.isOpen); |
ir.Primitive value = visit(node.expression); |
- return irBuilder.buildYield(value, node.hasStar); |
+ return irBuilder.addPrimitive(new ir.Yield(value, node.hasStar)); |
} |
visitSyncForIn(ast.SyncForIn node) { |
@@ -1103,7 +1108,7 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
ir.Primitive checkType(ir.Primitive value, DartType dartType) { |
if (!compiler.trustTypeAnnotations) return value; |
TypeMask type = typeMaskSystem.subtypesOf(dartType).nullable(); |
- return irBuilder.buildRefinement(value, type); |
+ return irBuilder.addPrimitive(new ir.Refinement(value, type)); |
} |
ir.Primitive checkTypeVsElement(ir.Primitive value, TypedElement element) { |
@@ -1391,13 +1396,14 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
ir.Primitive buildCheckDeferredIsLoaded(PrefixElement prefix, ast.Send node) { |
SourceInformation sourceInformation = |
sourceInformationBuilder.buildCall(node, node.selector); |
+ ir.Primitive name = irBuilder.buildStringConstant( |
+ compiler.deferredLoadTask.getImportDeferName(node, prefix)); |
+ ir.Primitive uri = |
+ irBuilder.buildStringConstant('${prefix.deferredImport.uri}'); |
return irBuilder.buildStaticFunctionInvocation( |
helpers.checkDeferredIsLoaded, |
- CallStructure.TWO_ARGS, <ir.Primitive>[ |
- irBuilder.buildStringConstant( |
- compiler.deferredLoadTask.getImportDeferName(node, prefix)), |
- irBuilder.buildStringConstant('${prefix.deferredImport.uri}'), |
- ], sourceInformation: sourceInformation); |
+ <ir.Primitive>[name, uri], |
+ sourceInformation: sourceInformation); |
} |
ir.Primitive visitNamedArgument(ast.NamedArgument node) { |
@@ -1531,7 +1537,7 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
compiler.deferredLoadTask.getImportDeferName(node, prefix)); |
return irBuilder.buildStaticFunctionInvocation( |
compiler.loadLibraryFunction, |
- CallStructure.ONE_ARG, <ir.Primitive>[loadId], |
+ <ir.Primitive>[loadId], |
sourceInformation: sourceInformation); |
} else { |
return irBuilder.buildStaticGetterGet(getter, sourceInformation); |
@@ -2004,10 +2010,8 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
List<ir.Primitive> arguments = <ir.Primitive>[]; |
callStructure = translateStaticArguments(argumentsNode, function, |
callStructure, arguments); |
- return irBuilder.buildStaticFunctionInvocation(function, |
- callStructure, |
- arguments, |
- sourceInformation: |
+ Selector selector = new Selector.call(function.memberName, callStructure); |
+ return irBuilder.buildInvokeStatic(function, selector, arguments, |
sourceInformationBuilder.buildCall(node, node.selector)); |
} |
} |
@@ -2788,11 +2792,8 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
List<ir.Primitive> arguments = <ir.Primitive>[]; |
callStructure = translateStaticArguments(argumentList, element, |
callStructure, arguments); |
- return irBuilder.buildStaticFunctionInvocation( |
- element, |
- callStructure, |
- arguments, |
- sourceInformation: |
+ Selector selector = new Selector.call(element.memberName, callStructure); |
+ return irBuilder.buildInvokeStatic(element, selector, arguments, |
sourceInformationBuilder.buildCall(node, node.selector)); |
} |
@@ -3013,7 +3014,9 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
buildStringParts(node.expression, accumulator); |
} else { |
ir.Primitive value = visit(node); |
- accumulator.add(irBuilder.buildStringify(value)); |
+ accumulator.add(irBuilder.buildStaticFunctionInvocation( |
+ helpers.stringInterpolationHelper, |
+ <ir.Primitive>[value])); |
} |
} |
@@ -3055,20 +3058,6 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
[irBuilder.buildInvocationMirror(selector, arguments)]); |
} |
- ir.Primitive buildRuntimeError(String message) { |
- return irBuilder.buildStaticFunctionInvocation( |
- helpers.throwRuntimeError, |
- new CallStructure.unnamed(1), |
- [irBuilder.buildStringConstant(message)]); |
- } |
- |
- ir.Primitive buildAbstractClassInstantiationError(ClassElement element) { |
- return irBuilder.buildStaticFunctionInvocation( |
- helpers.throwAbstractClassInstantiationError, |
- new CallStructure.unnamed(1), |
- [irBuilder.buildStringConstant(element.name)]); |
- } |
- |
@override |
ir.Primitive visitUnresolvedCompound( |
ast.Send node, |
@@ -3088,7 +3077,11 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
ast.NodeList arguments, |
Selector selector, _) { |
// If the class is missing it's a runtime error. |
- return buildRuntimeError("Unresolved class: '${element.name}'"); |
+ ir.Primitive message = |
+ irBuilder.buildStringConstant("Unresolved class: '${element.name}'"); |
+ return irBuilder.buildStaticFunctionInvocation( |
+ helpers.throwRuntimeError, |
+ <ir.Primitive>[message]); |
} |
@override |
@@ -3255,7 +3248,11 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
ast.NodeList arguments, |
CallStructure callStructure, _) { |
for (ast.Node argument in arguments) visit(argument); |
- return buildAbstractClassInstantiationError(element.enclosingClass); |
+ ir.Primitive name = |
+ irBuilder.buildStringConstant(element.enclosingClass.name); |
+ return irBuilder.buildStaticFunctionInvocation( |
+ helpers.throwAbstractClassInstantiationError, |
+ <ir.Primitive>[name]); |
} |
@override |
@@ -3597,10 +3594,6 @@ class GlobalProgramInformation { |
return cls.typeVariables.isNotEmpty && _backend.classNeedsRti(cls); |
} |
- FunctionElement get stringifyFunction { |
- return _backend.helpers.stringInterpolationHelper; |
- } |
- |
FunctionElement get throwTypeErrorHelper => _backend.helpers.throwTypeError; |
Element get throwNoSuchMethod => _backend.helpers.throwNoSuchMethod; |