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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 1140703006: dart2js: Construct the entire output as a single AST before printing. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of ssa; 5 part of ssa;
6 6
7 class SsaFunctionCompiler implements FunctionCompiler { 7 class SsaFunctionCompiler implements FunctionCompiler {
8 SsaCodeGeneratorTask generator; 8 SsaCodeGeneratorTask generator;
9 SsaBuilderTask builder; 9 SsaBuilderTask builder;
10 SsaOptimizerTask optimizer; 10 SsaOptimizerTask optimizer;
(...skipping 3538 matching lines...) Expand 10 before | Expand all | Expand 10 after
3549 HInstruction buildTypeArgumentRepresentations(DartType type) { 3549 HInstruction buildTypeArgumentRepresentations(DartType type) {
3550 // Compute the representation of the type arguments, including access 3550 // Compute the representation of the type arguments, including access
3551 // to the runtime type information for type variables as instructions. 3551 // to the runtime type information for type variables as instructions.
3552 if (type.isTypeVariable) { 3552 if (type.isTypeVariable) {
3553 return buildLiteralList(<HInstruction>[addTypeVariableReference(type)]); 3553 return buildLiteralList(<HInstruction>[addTypeVariableReference(type)]);
3554 } else { 3554 } else {
3555 assert(type.element.isClass); 3555 assert(type.element.isClass);
3556 InterfaceType interface = type; 3556 InterfaceType interface = type;
3557 List<HInstruction> inputs = <HInstruction>[]; 3557 List<HInstruction> inputs = <HInstruction>[];
3558 bool first = true; 3558 bool first = true;
3559 List<String> templates = <String>[]; 3559 List<js.Expression> templates = <js.Expression>[];
3560 for (DartType argument in interface.typeArguments) { 3560 for (DartType argument in interface.typeArguments) {
3561 templates.add(rti.getTypeRepresentationWithHashes(argument, (variable) { 3561 templates.add(rti.getTypeRepresentationWithHashes(argument, (variable) {
3562 HInstruction runtimeType = addTypeVariableReference(variable); 3562 HInstruction runtimeType = addTypeVariableReference(variable);
3563 inputs.add(runtimeType); 3563 inputs.add(runtimeType);
3564 })); 3564 }));
3565 } 3565 }
3566 String template = '[${templates.join(', ')}]';
3567 // TODO(sra): This is a fresh template each time. We can't let the 3566 // TODO(sra): This is a fresh template each time. We can't let the
3568 // template manager build them. 3567 // template manager build them.
3569 js.Template code = js.js.uncachedExpressionTemplate(template); 3568 js.Template code = new js.Template.withExpressionResult(
3569 new js.ArrayInitializer(templates), hasPlaceholders : true);
3570 HInstruction representation = 3570 HInstruction representation =
3571 new HForeignCode(code, backend.readableArrayType, inputs, 3571 new HForeignCode(code, backend.readableArrayType, inputs,
3572 nativeBehavior: native.NativeBehavior.PURE_ALLOCATION); 3572 nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
3573 return representation; 3573 return representation;
3574 } 3574 }
3575 } 3575 }
3576 3576
3577 @override 3577 @override
3578 void visitAs(ast.Send node, ast.Node expression, DartType type, _) { 3578 void visitAs(ast.Send node, ast.Node expression, DartType type, _) {
3579 HInstruction expressionInstruction = visitAndPop(expression); 3579 HInstruction expressionInstruction = visitAndPop(expression);
(...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after
4616 // Represent [dynamic] as [null]. 4616 // Represent [dynamic] as [null].
4617 return graph.addConstantNull(compiler); 4617 return graph.addConstantNull(compiler);
4618 } 4618 }
4619 4619
4620 if (argument.isTypeVariable) { 4620 if (argument.isTypeVariable) {
4621 return addTypeVariableReference(argument); 4621 return addTypeVariableReference(argument);
4622 } 4622 }
4623 4623
4624 List<HInstruction> inputs = <HInstruction>[]; 4624 List<HInstruction> inputs = <HInstruction>[];
4625 4625
4626 String template = rti.getTypeRepresentationWithHashes(argument, (variable) { 4626 js.Expression template =
4627 inputs.add(addTypeVariableReference(variable)); 4627 rti.getTypeRepresentationWithHashes(argument,
floitsch 2015/05/19 13:43:35 looks like it fits on one line.
herhut 2015/05/19 14:08:09 Done.
4628 }); 4628 (variable) {
4629 inputs.add(addTypeVariableReference(variable));
4630 });
4629 4631
4630 js.Template code = js.js.uncachedExpressionTemplate(template); 4632 js.Template code =
4633 new js.Template.withExpressionResult(template, hasPlaceholders : true);
4631 HInstruction result = new HForeignCode(code, backend.stringType, inputs, 4634 HInstruction result = new HForeignCode(code, backend.stringType, inputs,
4632 nativeBehavior: native.NativeBehavior.PURE); 4635 nativeBehavior: native.NativeBehavior.PURE);
4633 add(result); 4636 add(result);
4634 return result; 4637 return result;
4635 } 4638 }
4636 4639
4637 HInstruction handleListConstructor(InterfaceType type, 4640 HInstruction handleListConstructor(InterfaceType type,
4638 ast.Node currentNode, 4641 ast.Node currentNode,
4639 HInstruction newObject) { 4642 HInstruction newObject) {
4640 if (!backend.classNeedsRti(type.element) || type.treatAsRaw) { 4643 if (!backend.classNeedsRti(type.element) || type.treatAsRaw) {
(...skipping 3027 matching lines...) Expand 10 before | Expand all | Expand 10 after
7668 if (unaliased is TypedefType) throw 'unable to unalias $type'; 7671 if (unaliased is TypedefType) throw 'unable to unalias $type';
7669 unaliased.accept(this, builder); 7672 unaliased.accept(this, builder);
7670 } 7673 }
7671 7674
7672 void visitDynamicType(DynamicType type, SsaBuilder builder) { 7675 void visitDynamicType(DynamicType type, SsaBuilder builder) {
7673 JavaScriptBackend backend = builder.compiler.backend; 7676 JavaScriptBackend backend = builder.compiler.backend;
7674 ClassElement cls = backend.findHelper('DynamicRuntimeType'); 7677 ClassElement cls = backend.findHelper('DynamicRuntimeType');
7675 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); 7678 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld)));
7676 } 7679 }
7677 } 7680 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698