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

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

Issue 12525007: Record dependency information to implement first version of dependency (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 9 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) 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 dart2js; 5 part of dart2js;
6 6
7 /** 7 /**
8 * The [ConstantHandler] keeps track of compile-time constants, 8 * The [ConstantHandler] keeps track of compile-time constants,
9 * initializations of global and static fields, and default values of 9 * initializations of global and static fields, and default values of
10 * optional parameters. 10 * optional parameters.
(...skipping 25 matching lines...) Expand all
36 { bool this.isMetadata: false }) 36 { bool this.isMetadata: false })
37 : initialVariableValues = new Map<VariableElement, dynamic>(), 37 : initialVariableValues = new Map<VariableElement, dynamic>(),
38 compiledConstants = new Set<Constant>(), 38 compiledConstants = new Set<Constant>(),
39 pendingVariables = new Set<VariableElement>(), 39 pendingVariables = new Set<VariableElement>(),
40 lazyStatics = new Set<VariableElement>(), 40 lazyStatics = new Set<VariableElement>(),
41 super(compiler); 41 super(compiler);
42 42
43 String get name => 'ConstantHandler'; 43 String get name => 'ConstantHandler';
44 44
45 void registerCompileTimeConstant(Constant constant) { 45 void registerCompileTimeConstant(Constant constant) {
46 registerInstantiatedClass(constant.computeType(compiler).element); 46 registerInstantiatedClass(constant.computeType(compiler).element,
47 compiler.globalDependencies);
47 if (constant.isFunction()) { 48 if (constant.isFunction()) {
48 FunctionConstant function = constant; 49 FunctionConstant function = constant;
49 registerGetOfStaticFunction(function.element); 50 registerGetOfStaticFunction(function.element);
50 } 51 }
51 compiledConstants.add(constant); 52 compiledConstants.add(constant);
52 } 53 }
53 54
54 void registerInstantiatedClass(ClassElement element) { 55 void registerInstantiatedClass(ClassElement element, TreeElements elements) {
55 if (isMetadata) return; 56 if (isMetadata) return;
56 compiler.enqueuer.codegen.registerInstantiatedClass(element); 57 compiler.enqueuer.codegen.registerInstantiatedClass(element, elements);
57 } 58 }
58 59
59 void registerStaticUse(Element element) { 60 void registerStaticUse(Element element) {
60 if (isMetadata) return; 61 if (isMetadata) return;
61 compiler.enqueuer.codegen.registerStaticUse(element); 62 compiler.enqueuer.codegen.registerStaticUse(element);
62 } 63 }
63 64
64 void registerGetOfStaticFunction(FunctionElement element) { 65 void registerGetOfStaticFunction(FunctionElement element) {
65 if (isMetadata) return; 66 if (isMetadata) return;
66 compiler.enqueuer.codegen.registerGetOfStaticFunction(element); 67 compiler.enqueuer.codegen.registerGetOfStaticFunction(element);
67 } 68 }
68 69
69 void registerStringInstance() { 70 void registerStringInstance() {
70 registerInstantiatedClass(compiler.stringClass); 71 registerInstantiatedClass(compiler.stringClass,
72 compiler.globalDependencies);
71 } 73 }
72 74
73 void registerCreateRuntimeTypeFunction() { 75 void registerCreateRuntimeTypeFunction() {
74 if (createRuntimeTypeFunction != null) return; 76 if (createRuntimeTypeFunction != null) return;
75 SourceString helperName = const SourceString('createRuntimeType'); 77 SourceString helperName = const SourceString('createRuntimeType');
76 createRuntimeTypeFunction = compiler.findHelper(helperName); 78 createRuntimeTypeFunction = compiler.findHelper(helperName);
77 registerStaticUse(createRuntimeTypeFunction); 79 registerStaticUse(createRuntimeTypeFunction);
78 } 80 }
79 81
80 /** 82 /**
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 isEvaluatingConstant = oldIsEvaluatingConstant; 307 isEvaluatingConstant = oldIsEvaluatingConstant;
306 assert(result != null); 308 assert(result != null);
307 return result; 309 return result;
308 } 310 }
309 311
310 Constant visitNode(Node node) { 312 Constant visitNode(Node node) {
311 return signalNotCompileTimeConstant(node); 313 return signalNotCompileTimeConstant(node);
312 } 314 }
313 315
314 Constant visitLiteralBool(LiteralBool node) { 316 Constant visitLiteralBool(LiteralBool node) {
315 handler.registerInstantiatedClass(compiler.boolClass); 317 handler.registerInstantiatedClass(compiler.boolClass, elements);
316 return constantSystem.createBool(node.value); 318 return constantSystem.createBool(node.value);
317 } 319 }
318 320
319 Constant visitLiteralDouble(LiteralDouble node) { 321 Constant visitLiteralDouble(LiteralDouble node) {
320 handler.registerInstantiatedClass(compiler.doubleClass); 322 handler.registerInstantiatedClass(compiler.doubleClass, elements);
321 return constantSystem.createDouble(node.value); 323 return constantSystem.createDouble(node.value);
322 } 324 }
323 325
324 Constant visitLiteralInt(LiteralInt node) { 326 Constant visitLiteralInt(LiteralInt node) {
325 handler.registerInstantiatedClass(compiler.intClass); 327 handler.registerInstantiatedClass(compiler.intClass, elements);
326 return constantSystem.createInt(node.value); 328 return constantSystem.createInt(node.value);
327 } 329 }
328 330
329 Constant visitLiteralList(LiteralList node) { 331 Constant visitLiteralList(LiteralList node) {
330 if (!node.isConst()) { 332 if (!node.isConst()) {
331 return signalNotCompileTimeConstant(node); 333 return signalNotCompileTimeConstant(node);
332 } 334 }
333 List<Constant> arguments = <Constant>[]; 335 List<Constant> arguments = <Constant>[];
334 for (Link<Node> link = node.elements.nodes; 336 for (Link<Node> link = node.elements.nodes;
335 !link.isEmpty; 337 !link.isEmpty;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 DartType keysType = compiler.listClass.rawType; 380 DartType keysType = compiler.listClass.rawType;
379 ListConstant keysList = new ListConstant(keysType, keys); 381 ListConstant keysList = new ListConstant(keysType, keys);
380 handler.registerCompileTimeConstant(keysList); 382 handler.registerCompileTimeConstant(keysList);
381 SourceString className = hasProtoKey 383 SourceString className = hasProtoKey
382 ? MapConstant.DART_PROTO_CLASS 384 ? MapConstant.DART_PROTO_CLASS
383 : MapConstant.DART_CLASS; 385 : MapConstant.DART_CLASS;
384 ClassElement classElement = compiler.jsHelperLibrary.find(className); 386 ClassElement classElement = compiler.jsHelperLibrary.find(className);
385 classElement.ensureResolved(compiler); 387 classElement.ensureResolved(compiler);
386 // TODO(floitsch): copy over the generic type. 388 // TODO(floitsch): copy over the generic type.
387 DartType type = classElement.rawType; 389 DartType type = classElement.rawType;
388 handler.registerInstantiatedClass(classElement); 390 handler.registerInstantiatedClass(classElement, elements);
389 Constant constant = new MapConstant(type, keysList, values, protoValue); 391 Constant constant = new MapConstant(type, keysList, values, protoValue);
390 handler.registerCompileTimeConstant(constant); 392 handler.registerCompileTimeConstant(constant);
391 return constant; 393 return constant;
392 } 394 }
393 395
394 Constant visitLiteralNull(LiteralNull node) { 396 Constant visitLiteralNull(LiteralNull node) {
395 return constantSystem.createNull(); 397 return constantSystem.createNull();
396 } 398 }
397 399
398 Constant visitLiteralString(LiteralString node) { 400 Constant visitLiteralString(LiteralString node) {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 assert(invariant(node, constructor.isImplementation)); 655 assert(invariant(node, constructor.isImplementation));
654 656
655 Selector selector = elements.getSelector(send); 657 Selector selector = elements.getSelector(send);
656 List<Constant> arguments = evaluateArgumentsToConstructor( 658 List<Constant> arguments = evaluateArgumentsToConstructor(
657 node, selector, send.arguments, constructor); 659 node, selector, send.arguments, constructor);
658 ConstructorEvaluator evaluator = 660 ConstructorEvaluator evaluator =
659 new ConstructorEvaluator(node, constructor, handler, compiler); 661 new ConstructorEvaluator(node, constructor, handler, compiler);
660 evaluator.evaluateConstructorFieldValues(arguments); 662 evaluator.evaluateConstructorFieldValues(arguments);
661 List<Constant> jsNewArguments = evaluator.buildJsNewArguments(classElement); 663 List<Constant> jsNewArguments = evaluator.buildJsNewArguments(classElement);
662 664
663 handler.registerInstantiatedClass(classElement); 665 handler.registerInstantiatedClass(classElement, elements);
664 // TODO(floitsch): take generic types into account. 666 // TODO(floitsch): take generic types into account.
665 classElement.computeType(compiler); 667 classElement.computeType(compiler);
666 DartType type = classElement.rawType; 668 DartType type = classElement.rawType;
667 Constant constant = new ConstructedConstant(type, jsNewArguments); 669 Constant constant = new ConstructedConstant(type, jsNewArguments);
668 handler.registerCompileTimeConstant(constant); 670 handler.registerCompileTimeConstant(constant);
669 return constant; 671 return constant;
670 } 672 }
671 673
672 Constant visitParenthesizedExpression(ParenthesizedExpression node) { 674 Constant visitParenthesizedExpression(ParenthesizedExpression node) {
673 return node.expression.accept(this); 675 return node.expression.accept(this);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 // Use the default value. 884 // Use the default value.
883 fieldValue = handler.compileConstant(field); 885 fieldValue = handler.compileConstant(field);
884 } 886 }
885 jsNewArguments.add(fieldValue); 887 jsNewArguments.add(fieldValue);
886 }, 888 },
887 includeBackendMembers: true, 889 includeBackendMembers: true,
888 includeSuperMembers: true); 890 includeSuperMembers: true);
889 return jsNewArguments; 891 return jsNewArguments;
890 } 892 }
891 } 893 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698