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

Side by Side Diff: pkg/analyzer2dart/lib/src/cps_generator.dart

Issue 661933002: Split IrBuilder and IrBuilderVisitor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library analyzer2dart.cps_generator; 5 library analyzer2dart.cps_generator;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 8
9 import 'package:compiler/implementation/elements/elements.dart' as dart2js; 9 import 'package:compiler/implementation/elements/elements.dart' as dart2js;
10 import 'package:analyzer/src/generated/source.dart'; 10 import 'package:analyzer/src/generated/source.dart';
11 import 'package:analyzer/src/generated/element.dart' as analyzer; 11 import 'package:analyzer/src/generated/element.dart' as analyzer;
12 12
13 import 'package:compiler/implementation/dart2jslib.dart'
14 show DART_CONSTANT_SYSTEM;
13 import 'package:compiler/implementation/cps_ir/cps_ir_nodes.dart' as ir; 15 import 'package:compiler/implementation/cps_ir/cps_ir_nodes.dart' as ir;
14 import 'package:compiler/implementation/cps_ir/cps_ir_builder.dart'; 16 import 'package:compiler/implementation/cps_ir/cps_ir_builder.dart';
15 import 'package:compiler/implementation/universe/universe.dart'; 17 import 'package:compiler/implementation/universe/universe.dart';
16 18
17 import 'semantic_visitor.dart'; 19 import 'semantic_visitor.dart';
18 import 'element_converter.dart'; 20 import 'element_converter.dart';
19 import 'util.dart'; 21 import 'util.dart';
20 import 'package:analyzer2dart/src/identifier_semantics.dart'; 22 import 'package:analyzer2dart/src/identifier_semantics.dart';
21 23
22 class CpsGeneratingVisitor extends SemanticVisitor<ir.Node> { 24 class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
25 with IrBuilderMixin {
23 final analyzer.Element element; 26 final analyzer.Element element;
24 final ElementConverter converter; 27 final ElementConverter converter;
25 final IrBuilder irBuilder = new IrBuilder();
26 28
27 CpsGeneratingVisitor(this.converter, this.element); 29 CpsGeneratingVisitor(this.converter, this.element);
28 30
29 Source get currentSource => element.source; 31 Source get currentSource => element.source;
30 32
31 @override 33 @override
32 ir.FunctionDefinition visitFunctionDeclaration(FunctionDeclaration node) { 34 ir.FunctionDefinition visitFunctionDeclaration(FunctionDeclaration node) {
33 analyzer.FunctionElement function = node.element; 35 analyzer.FunctionElement function = node.element;
34 function.parameters.forEach((analyzer.ParameterElement parameter) { 36 dart2js.FunctionElement element = converter.convertElement(function);
35 // TODO(johnniwinther): Support "closure variables", that is variables 37 return withBuilder(
36 // accessed from an inner function. 38 new IrBuilder(DART_CONSTANT_SYSTEM,
37 irBuilder.createParameter(converter.convertElement(parameter), 39 element,
38 isClosureVariable: false); 40 // TODO(johnniwinther): Supported closure variables.
41 const <dart2js.Local>[]),
42 () {
43 function.parameters.forEach((analyzer.ParameterElement parameter) {
44 // TODO(johnniwinther): Support "closure variables", that is variables
45 // accessed from an inner function.
46 irBuilder.createParameter(converter.convertElement(parameter),
47 isClosureVariable: false);
48 });
49 // Visit the body directly to avoid processing the signature as
50 // expressions.
51 node.functionExpression.body.accept(this);
52 return irBuilder.buildFunctionDefinition(element, const []);
39 }); 53 });
40 // Visit the body directly to avoid processing the signature as expressions.
41 node.functionExpression.body.accept(this);
42 return irBuilder.buildFunctionDefinition(
43 converter.convertElement(function), const []);
44 } 54 }
45 55
46 @override 56 @override
47 visitStaticMethodInvocation(MethodInvocation node, 57 visitStaticMethodInvocation(MethodInvocation node,
48 AccessSemantics semantics) { 58 AccessSemantics semantics) {
49 analyzer.Element staticElement = semantics.element; 59 analyzer.Element staticElement = semantics.element;
50 dart2js.Element element = converter.convertElement(staticElement); 60 dart2js.Element element = converter.convertElement(staticElement);
51 List<ir.Definition> arguments = <ir.Definition>[]; 61 List<ir.Definition> arguments = <ir.Definition>[];
52 for (Expression argument in node.argumentList.arguments) { 62 for (Expression argument in node.argumentList.arguments) {
53 ir.Definition value = argument.accept(this); 63 ir.Definition value = argument.accept(this);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 analyzer.Element element = semantics.element; 155 analyzer.Element element = semantics.element;
146 dart2js.Element target = converter.convertElement(element); 156 dart2js.Element target = converter.convertElement(element);
147 // TODO(johnniwinther): Selector information should be computed in the 157 // TODO(johnniwinther): Selector information should be computed in the
148 // [TreeShaker] and shared with the [CpsGeneratingVisitor]. 158 // [TreeShaker] and shared with the [CpsGeneratingVisitor].
149 assert(invariant(node, target.isTopLevel || target.isStatic, 159 assert(invariant(node, target.isTopLevel || target.isStatic,
150 '$target expected to be top-level or static.')); 160 '$target expected to be top-level or static.'));
151 return irBuilder.buildGetStatic(target, 161 return irBuilder.buildGetStatic(target,
152 new Selector.getter(target.name, target.library)); 162 new Selector.getter(target.name, target.library));
153 } 163 }
154 } 164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698