Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
| index 96234813207aa998b060fb2cc7b38ddd8f868b7e..9bec5aa0b920833ca4eac39dcfd71779e2c25381 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
| @@ -1649,10 +1649,10 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| } else { |
| methodName = backend.namer.getNameOfInstanceMember(superMethod); |
| } |
| - js.PropertyAccess method = |
| - backend.namer.elementAccess(superClass)['prototype'][methodName]; |
| - push(jsPropertyCall( |
| - method, "call", visitArguments(node.inputs, start: 0)), node); |
| + push(js.js('#.prototype.#.call(#)', [ |
|
floitsch
2014/04/22 16:11:18
can we import with show 'js', so that we don't hav
sra1
2014/04/23 02:33:50
Then we would have to change the current import na
|
| + backend.namer.elementAccess(superClass), |
| + methodName, visitArguments(node.inputs, start: 0)]), |
| + node); |
| } |
| } |
| @@ -1725,22 +1725,23 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| visitForeign(HForeign node) { |
| List<HInstruction> inputs = node.inputs; |
| if (node.isJsStatement()) { |
| - if (!inputs.isEmpty) { |
| - compiler.internalError(node, "Foreign statement with inputs."); |
| + //if (!inputs.isEmpty) { |
|
floitsch
2014/04/22 16:11:18
dead code.
sra1
2014/04/23 02:33:50
Done.
|
| + // compiler.internalError(node, "Foreign statement with inputs."); |
| + //} |
| + //pushStatement(node.codeTemplate.ast, node); |
| + List<js.Expression> interpolatedExpressions = <js.Expression>[]; |
| + for (int i = 0; i < inputs.length; i++) { |
| + use(inputs[i]); |
| + interpolatedExpressions.add(pop()); |
| } |
| - pushStatement(node.codeAst, node); |
| + pushStatement(node.codeTemplate.instantiate(interpolatedExpressions)); |
| } else { |
| - if (!inputs.isEmpty) { |
| - List<js.Expression> interpolatedExpressions = <js.Expression>[]; |
| - for (int i = 0; i < inputs.length; i++) { |
| - use(inputs[i]); |
| - interpolatedExpressions.add(pop()); |
| - } |
| - var visitor = new js.UninterpolateJSExpression(interpolatedExpressions); |
| - push(visitor.visit(node.codeAst), node); |
| - } else { |
| - push(node.codeAst, node); |
| + List<js.Expression> interpolatedExpressions = <js.Expression>[]; |
| + for (int i = 0; i < inputs.length; i++) { |
| + use(inputs[i]); |
| + interpolatedExpressions.add(pop()); |
| } |
| + push(node.codeTemplate.instantiate(interpolatedExpressions)); |
| } |
| // TODO(sra): Tell world.nativeEnqueuer about the types created here. |
| @@ -2623,13 +2624,13 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| if (!optionalParameterTypes.isEmpty) { |
| arguments.add(new js.ArrayInitializer.from(optionalParameterTypes)); |
| } |
| - push(accessHelper('buildFunctionType')(arguments)); |
| + push(js.js('#(#)', [accessHelper('buildFunctionType'), arguments])); |
| } else { |
| var arguments = [ |
| returnType, |
| new js.ArrayInitializer.from(parameterTypes), |
| new js.ObjectInitializer(namedParameters)]; |
| - push(accessHelper('buildNamedFunctionType')(arguments)); |
| + push(js.js('#(#)', [accessHelper('buildNamedFunctionType'), arguments])); |
| } |
| } |
| @@ -2644,17 +2645,18 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| int index = RuntimeTypes.getTypeVariableIndex(element); |
| js.Expression receiver = pop(); |
| js.Expression helper = backend.namer.elementAccess(helperElement); |
| - push(helper(js.js(r'#.$builtinTypeInfo && #.$builtinTypeInfo[#]', |
| - [receiver, receiver, js.js.toExpression(index)]))); |
| + push(js.js(r'#(#.$builtinTypeInfo && #.$builtinTypeInfo[#])', |
| + [helper, receiver, receiver, js.js.number(index)])); |
| } else { |
| backend.emitter.registerReadTypeVariable(element); |
| - push( |
| - js.js('#.${backend.namer.readTypeVariableName(element)}()', pop())); |
| + push(js.js('#.#()', |
| + [pop(), backend.namer.readTypeVariableName(element)])); |
| } |
| } else { |
| - push( |
| + push(js.js('#(#)', [ |
| backend.namer.elementAccess( |
| - compiler.findHelper('convertRtiToRuntimeType'))(pop())); |
| + compiler.findHelper('convertRtiToRuntimeType')), |
| + pop()])); |
| } |
| } |
| @@ -2671,15 +2673,15 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| if (!typeArguments.isEmpty) { |
| arguments.add(new js.ArrayInitializer.from(typeArguments)); |
| } |
| - push(accessHelper('buildInterfaceType')(arguments)); |
| + push(js.js('#(#)', [accessHelper('buildInterfaceType'), arguments])); |
| } |
| void visitVoidType(HVoidType node) { |
| - push(accessHelper('getVoidRuntimeType')()); |
| + push(js.js('#()', accessHelper('getVoidRuntimeType'))); |
| } |
| void visitDynamicType(HDynamicType node) { |
| - push(accessHelper('getDynamicRuntimeType')()); |
| + push(js.js('#()', accessHelper('getDynamicRuntimeType'))); |
| } |
| js.PropertyAccess accessHelper(String name) { |