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

Side by Side Diff: pkg/compiler/lib/src/js_backend/codegen/codegen.dart

Issue 716823002: Set up a stub pipline for using the new cps-based ir to generate js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Move IrEnabled to compiler Created 6 years, 1 month 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library code_generator;
6
7 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir;
8 import '../../js/js.dart' as js;
9 import '../../elements/elements.dart';
10 import '../../util/maplet.dart';
11
12 class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> {
13 static const String UNIMPLEMENTED = "Javascript generation aborted";
14
15 /// Variables to be hoisted at the top of the current function.
16 List<js.VariableDeclaration> variables = <js.VariableDeclaration>[];
17
18 /// Maps variables to their name.
19 Map<tree_ir.Variable, String> variableNames = <tree_ir.Variable, String>{};
20
21 /// Maps local constants to their name.
22 Maplet<VariableElement, String> constantNames =
23 new Maplet<VariableElement, String>();
24
25 /// Variables that have had their declaration created.
26 Set<tree_ir.Variable> declaredVariables = new Set<tree_ir.Variable>();
27
28 /// Variable names that have already been used. Used to avoid name clashes.
29 Set<String> usedVariableNames;
30
31 List<js.Parameter> parameters;
32 List<js.Statement> accumulator = new List<js.Statement>();
33
34 js.Block body;
35
36 /// Generates JavaScript code for the body of [function].
37 /// The code will be in [body] and the parameters will be in [parameters].
38 void buildFunction(tree_ir.FunctionDefinition function) {
39 visitStatement(function.body);
40 for (tree_ir.Variable parameter in function.parameters) {
41 parameters.add(new js.Parameter(variableNames[parameter]));
42 }
43 body = new js.Block(accumulator);
44 }
45
46 List<js.Expression> visitArguments(List<tree_ir.Expression> arguments) {
47 return arguments.map(visitExpression).toList();
48 }
49
50 giveup(tree_ir.Node node) {
51 throw UNIMPLEMENTED;
52 }
53
54 @override
55 js.Expression visitConcatenateStrings(tree_ir.ConcatenateStrings node) {
56 return giveup(node);
57 // TODO: implement visitConcatenateStrings
58 }
59
60 @override
61 js.Expression visitConditional(tree_ir.Conditional node) {
62 return giveup(node);
63 // TODO: implement visitConditional
64 }
65
66 @override
67 js.Expression visitConstant(tree_ir.Constant node) {
68 return giveup(node);
69 // TODO: implement visitConstant
70 }
71
72 @override
73 js.Expression visitFunctionExpression(tree_ir.FunctionExpression node) {
74 return giveup(node);
75 // TODO: implement visitFunctionExpression
76 }
77
78 @override
79 js.Expression visitInvokeConstructor(tree_ir.InvokeConstructor node) {
80 return giveup(node);
81 // TODO: implement visitInvokeConstructor
82 }
83
84 @override
85 js.Expression visitInvokeMethod(tree_ir.InvokeMethod node) {
86 return giveup(node);
87 // TODO: implement visitInvokeMethod
88 }
89
90 @override
91 js.Expression visitInvokeStatic(tree_ir.InvokeStatic node) {
92 return giveup(node);
93 // TODO: implement visitInvokeStatic
94 }
95
96 @override
97 js.Expression visitInvokeSuperMethod(tree_ir.InvokeSuperMethod node) {
98 return giveup(node);
99 // TODO: implement visitInvokeSuperMethod
100 }
101
102 @override
103 js.Expression visitLiteralList(tree_ir.LiteralList node) {
104 return giveup(node);
105 // TODO: implement visitLiteralList
106 }
107
108 @override
109 js.Expression visitLiteralMap(tree_ir.LiteralMap node) {
110 return giveup(node);
111 // TODO: implement visitLiteralMap
112 }
113
114 @override
115 js.Expression visitLogicalOperator(tree_ir.LogicalOperator node) {
116 return giveup(node);
117 // TODO: implement visitLogicalOperator
118 }
119
120 @override
121 js.Expression visitNot(tree_ir.Not node) {
122 return giveup(node);
123 // TODO: implement visitNot
124 }
125
126 @override
127 js.Expression visitReifyTypeVar(tree_ir.ReifyTypeVar node) {
128 return giveup(node);
129 // TODO: implement visitReifyTypeVar
130 }
131
132 @override
133 js.Expression visitThis(tree_ir.This node) {
134 return giveup(node);
135 // TODO: implement visitThis
136 }
137
138 @override
139 js.Expression visitTypeOperator(tree_ir.TypeOperator node) {
140 return giveup(node);
141 // TODO: implement visitTypeOperator
142 }
143
144 @override
145 js.Expression visitVariable(tree_ir.Variable node) {
146 return giveup(node);
147 // TODO: implement visitVariable
148 }
149
150 @override
151 void visitContinue(tree_ir.Continue node) {
152 return giveup(node);
153 // TODO: implement visitContinue
154 }
155
156 @override
157 void visitExpressionStatement(tree_ir.ExpressionStatement node) {
158 accumulator.add(new js.ExpressionStatement(
159 visitExpression(node.expression)));
160 visitStatement(node.next);
161 }
162
163 @override
164 void visitFunctionDeclaration(tree_ir.FunctionDeclaration node) {
165 giveup(node);
166 // TODO: implement visitFunctionDeclaration
167 }
168
169 @override
170 void visitIf(tree_ir.If node) {
171 giveup(node);
172 // TODO: implement visitIf
173 }
174
175 @override
176 void visitLabeledStatement(tree_ir.LabeledStatement node) {
177 giveup(node);
178 // TODO: implement visitLabeledStatement
179 }
180
181 @override
182 void visitAssign(tree_ir.Assign node) {
183 giveup(node);
184 // TODO: implement visitAssign
185 }
186
187 @override
188 void visitBreak(tree_ir.Break node) {
189 giveup(node);
190 // TODO: implement visitBreak
191 }
192
193 @override
194 void visitWhileCondition(tree_ir.WhileCondition node) {
195 giveup(node);
196 // TODO: implement visitWhileCondition
197 }
198
199 @override
200 void visitWhileTrue(tree_ir.WhileTrue node) {
201 giveup(node);
202 // TODO: implement visitWhileTrue
203 }
204
205 @override
206 void visitReturn(tree_ir.Return node) {
207 if (node.value != null) {
208 accumulator.add(new js.Return(visitExpression(node.value)));
209 }
210 }
211 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698