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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/cps_ir/cps_ir_builder.dart

Issue 614993002: Rename Constant to ConstantValue and ConstExp to ConstantExpression. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 dart2js.ir_builder; 5 library dart2js.ir_builder;
6 6
7 import '../constants/expressions.dart'; 7 import '../constants/expressions.dart';
8 import '../constants/values.dart' show PrimitiveConstant; 8 import '../constants/values.dart' show PrimitiveConstantValue;
9 import '../dart_backend/dart_backend.dart' show DartBackend; 9 import '../dart_backend/dart_backend.dart' show DartBackend;
10 import '../dart_types.dart'; 10 import '../dart_types.dart';
11 import '../dart2jslib.dart'; 11 import '../dart2jslib.dart';
12 import '../elements/elements.dart'; 12 import '../elements/elements.dart';
13 import '../source_file.dart'; 13 import '../source_file.dart';
14 import '../tree/tree.dart' as ast; 14 import '../tree/tree.dart' as ast;
15 import '../scanner/scannerlib.dart' show Token, isUserDefinableOperator; 15 import '../scanner/scannerlib.dart' show Token, isUserDefinableOperator;
16 import '../universe/universe.dart' show SelectorKind; 16 import '../universe/universe.dart' show SelectorKind;
17 import 'cps_ir_nodes.dart' as ir; 17 import 'cps_ir_nodes.dart' as ir;
18 18
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 } 295 }
296 296
297 ir.Primitive continueWithExpression(ir.Expression build(ir.Continuation k)) { 297 ir.Primitive continueWithExpression(ir.Expression build(ir.Continuation k)) {
298 ir.Parameter v = new ir.Parameter(null); 298 ir.Parameter v = new ir.Parameter(null);
299 ir.Continuation k = new ir.Continuation([v]); 299 ir.Continuation k = new ir.Continuation([v]);
300 ir.Expression expression = build(k); 300 ir.Expression expression = build(k);
301 add(new ir.LetCont(k, expression)); 301 add(new ir.LetCont(k, expression));
302 return v; 302 return v;
303 } 303 }
304 304
305 ir.Constant makeConst(ConstExp exp) { 305 ir.Constant makeConst(ConstantExpression exp) {
306 return new ir.Constant(exp); 306 return new ir.Constant(exp);
307 } 307 }
308 308
309 ir.Constant makePrimConst(PrimitiveConstant value) { 309 ir.Constant makePrimConst(PrimitiveConstantValue value) {
310 return makeConst(new PrimitiveConstExp(value)); 310 return makeConst(new PrimitiveConstantExpression(value));
311 } 311 }
312 312
313 // TODO(johnniwinther): Build constants directly through [ConstExp] when these 313 // TODO(johnniwinther): Build constants directly through [ConstExp] when these
314 // are created from analyzer2dart. 314 // are created from analyzer2dart.
315 ir.Node buildPrimConst(PrimitiveConstant constant) { 315 ir.Node buildPrimConst(PrimitiveConstantValue constant) {
316 assert(isOpen); 316 assert(isOpen);
317 ir.Node prim = makePrimConst(constant); 317 ir.Node prim = makePrimConst(constant);
318 add(new ir.LetPrim(prim)); 318 add(new ir.LetPrim(prim));
319 return prim; 319 return prim;
320 } 320 }
321 321
322 /// Create an integer literal. 322 /// Create an integer literal.
323 ir.Constant buildIntegerLiteral(int value) { 323 ir.Constant buildIntegerLiteral(int value) {
324 return buildPrimConst(constantSystem.createInt(value)); 324 return buildPrimConst(constantSystem.createInt(value));
325 } 325 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 _current = null; 372 _current = null;
373 } 373 }
374 374
375 /// Create a [ir.FunctionDefinition] for [element] using [_root] as the body. 375 /// Create a [ir.FunctionDefinition] for [element] using [_root] as the body.
376 /// 376 ///
377 /// Parameters must be created before the construction of the body using 377 /// Parameters must be created before the construction of the body using
378 /// [createParameter]. 378 /// [createParameter].
379 ir.FunctionDefinition buildFunctionDefinition( 379 ir.FunctionDefinition buildFunctionDefinition(
380 FunctionElement element, 380 FunctionElement element,
381 List<ConstDeclaration> constants, 381 List<ConstDeclaration> constants,
382 List<ConstExp> defaults) { 382 List<ConstantExpression> defaults) {
383 if (!element.isAbstract) { 383 if (!element.isAbstract) {
384 ensureReturn(); 384 ensureReturn();
385 return new ir.FunctionDefinition( 385 return new ir.FunctionDefinition(
386 element, returnContinuation, _parameters, _root, constants, defaults); 386 element, returnContinuation, _parameters, _root, constants, defaults);
387 } else { 387 } else {
388 assert(invariant(element, _root == null, 388 assert(invariant(element, _root == null,
389 message: "Non-empty body for abstract method $element: $_root")); 389 message: "Non-empty body for abstract method $element: $_root"));
390 assert(invariant(element, constants.isEmpty, 390 assert(invariant(element, constants.isEmpty,
391 message: "Local constants for abstract method $element: $constants")); 391 message: "Local constants for abstract method $element: $constants"));
392 return new ir.FunctionDefinition.abstract( 392 return new ir.FunctionDefinition.abstract(
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 closureLocals.visit(function); 530 closureLocals.visit(function);
531 531
532 _root = _current = null; 532 _root = _current = null;
533 533
534 FunctionSignature signature = element.functionSignature; 534 FunctionSignature signature = element.functionSignature;
535 signature.orderedForEachParameter((ParameterElement parameterElement) { 535 signature.orderedForEachParameter((ParameterElement parameterElement) {
536 createParameter(parameterElement, 536 createParameter(parameterElement,
537 isClosureVariable: isClosureVariable(parameterElement)); 537 isClosureVariable: isClosureVariable(parameterElement));
538 }); 538 });
539 539
540 List<ConstExp> defaults = new List<ConstExp>(); 540 List<ConstantExpression> defaults = new List<ConstantExpression>();
541 signature.orderedOptionalParameters.forEach((ParameterElement element) { 541 signature.orderedOptionalParameters.forEach((ParameterElement element) {
542 defaults.add(getConstantForVariable(element)); 542 defaults.add(getConstantForVariable(element));
543 }); 543 });
544 544
545 visit(function.body); 545 visit(function.body);
546 return buildFunctionDefinition(element, localConstants, defaults); 546 return buildFunctionDefinition(element, localConstants, defaults);
547 } 547 }
548 548
549 ir.Primitive visit(ast.Node node) => node.accept(this); 549 ir.Primitive visit(ast.Node node) => node.accept(this);
550 550
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 return null; 1133 return null;
1134 } 1134 }
1135 1135
1136 ir.Primitive visitVariableDefinitions(ast.VariableDefinitions node) { 1136 ir.Primitive visitVariableDefinitions(ast.VariableDefinitions node) {
1137 assert(isOpen); 1137 assert(isOpen);
1138 if (node.modifiers.isConst) { 1138 if (node.modifiers.isConst) {
1139 for (ast.SendSet definition in node.definitions.nodes) { 1139 for (ast.SendSet definition in node.definitions.nodes) {
1140 assert(!definition.arguments.isEmpty); 1140 assert(!definition.arguments.isEmpty);
1141 assert(definition.arguments.tail.isEmpty); 1141 assert(definition.arguments.tail.isEmpty);
1142 VariableElement element = elements[definition]; 1142 VariableElement element = elements[definition];
1143 ConstExp value = getConstantForVariable(element); 1143 ConstantExpression value = getConstantForVariable(element);
1144 localConstants.add(new ConstDeclaration(element, value)); 1144 localConstants.add(new ConstDeclaration(element, value));
1145 } 1145 }
1146 } else { 1146 } else {
1147 for (ast.Node definition in node.definitions.nodes) { 1147 for (ast.Node definition in node.definitions.nodes) {
1148 Element element = elements[definition]; 1148 Element element = elements[definition];
1149 ir.Primitive initialValue; 1149 ir.Primitive initialValue;
1150 // Definitions are either SendSets if there is an initializer, or 1150 // Definitions are either SendSets if there is an initializer, or
1151 // Identifiers if there is no initializer. 1151 // Identifiers if there is no initializer.
1152 if (definition is ast.SendSet) { 1152 if (definition is ast.SendSet) {
1153 assert(!definition.arguments.isEmpty); 1153 assert(!definition.arguments.isEmpty);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 ir.Primitive visitLiteralNull(ast.LiteralNull node) { 1254 ir.Primitive visitLiteralNull(ast.LiteralNull node) {
1255 assert(isOpen); 1255 assert(isOpen);
1256 return translateConstant(node); 1256 return translateConstant(node);
1257 } 1257 }
1258 1258
1259 ir.Primitive visitLiteralString(ast.LiteralString node) { 1259 ir.Primitive visitLiteralString(ast.LiteralString node) {
1260 assert(isOpen); 1260 assert(isOpen);
1261 return translateConstant(node); 1261 return translateConstant(node);
1262 } 1262 }
1263 1263
1264 ConstExp getConstantForNode(ast.Node node) { 1264 ConstantExpression getConstantForNode(ast.Node node) {
1265 ConstExp constant = 1265 ConstantExpression constant =
1266 compiler.backend.constantCompilerTask.compileNode(node, elements); 1266 compiler.backend.constantCompilerTask.compileNode(node, elements);
1267 assert(invariant(node, constant != null, 1267 assert(invariant(node, constant != null,
1268 message: 'No constant computed for $node')); 1268 message: 'No constant computed for $node'));
1269 return constant; 1269 return constant;
1270 } 1270 }
1271 1271
1272 ConstExp getConstantForVariable(VariableElement element) { 1272 ConstantExpression getConstantForVariable(VariableElement element) {
1273 ConstExp constant = 1273 ConstantExpression constant =
1274 compiler.backend.constants.getConstantForVariable(element); 1274 compiler.backend.constants.getConstantForVariable(element);
1275 assert(invariant(element, constant != null, 1275 assert(invariant(element, constant != null,
1276 message: 'No constant computed for $element')); 1276 message: 'No constant computed for $element'));
1277 return constant; 1277 return constant;
1278 } 1278 }
1279 1279
1280 ir.Primitive visitLiteralList(ast.LiteralList node) { 1280 ir.Primitive visitLiteralList(ast.LiteralList node) {
1281 assert(isOpen); 1281 assert(isOpen);
1282 if (node.isConst) { 1282 if (node.isConst) {
1283 return translateConstant(node); 1283 return translateConstant(node);
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
1852 var it = node.parts.iterator; 1852 var it = node.parts.iterator;
1853 while (it.moveNext()) { 1853 while (it.moveNext()) {
1854 ast.StringInterpolationPart part = it.current; 1854 ast.StringInterpolationPart part = it.current;
1855 arguments.add(visit(part.expression)); 1855 arguments.add(visit(part.expression));
1856 arguments.add(visitLiteralString(part.string)); 1856 arguments.add(visitLiteralString(part.string));
1857 } 1857 }
1858 return continueWithExpression( 1858 return continueWithExpression(
1859 (k) => new ir.ConcatenateStrings(k, arguments)); 1859 (k) => new ir.ConcatenateStrings(k, arguments));
1860 } 1860 }
1861 1861
1862 ir.Primitive translateConstant(ast.Node node, [ConstExp constant]) { 1862 ir.Primitive translateConstant(ast.Node node, [ConstantExpression constant]) {
1863 assert(isOpen); 1863 assert(isOpen);
1864 if (constant == null) { 1864 if (constant == null) {
1865 constant = getConstantForNode(node); 1865 constant = getConstantForNode(node);
1866 } 1866 }
1867 ir.Primitive primitive = makeConst(constant); 1867 ir.Primitive primitive = makeConst(constant);
1868 add(new ir.LetPrim(primitive)); 1868 add(new ir.LetPrim(primitive));
1869 return primitive; 1869 return primitive;
1870 } 1870 }
1871 1871
1872 ir.FunctionDefinition makeSubFunction(ast.FunctionExpression node) { 1872 ir.FunctionDefinition makeSubFunction(ast.FunctionExpression node) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1953 } 1953 }
1954 1954
1955 visitFunctionExpression(ast.FunctionExpression node) { 1955 visitFunctionExpression(ast.FunctionExpression node) {
1956 FunctionElement oldFunction = currentFunction; 1956 FunctionElement oldFunction = currentFunction;
1957 currentFunction = elements[node]; 1957 currentFunction = elements[node];
1958 visit(node.body); 1958 visit(node.body);
1959 currentFunction = oldFunction; 1959 currentFunction = oldFunction;
1960 } 1960 }
1961 1961
1962 } 1962 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698