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

Side by Side Diff: pkg/compiler/lib/src/mirrors_used.dart

Issue 1148343004: Remove ConstantExpression.value (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Update comments. Created 5 years, 6 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) 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.mirrors_used; 5 library dart2js.mirrors_used;
6 6
7 import 'compile_time_constants.dart' show 7 import 'compile_time_constants.dart' show
8 ConstantCompiler; 8 ConstantCompiler;
9 import 'constants/expressions.dart'; 9 import 'constants/expressions.dart';
10 import 'constants/values.dart' show 10 import 'constants/values.dart' show
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 130
131 /// Call-back from the resolver to analyze MirorsUsed annotations. The result 131 /// Call-back from the resolver to analyze MirorsUsed annotations. The result
132 /// is stored in [analyzer] and later used to compute 132 /// is stored in [analyzer] and later used to compute
133 /// [:analyzer.mergedMirrorUsage:]. 133 /// [:analyzer.mergedMirrorUsage:].
134 void validate(NewExpression node, TreeElements mapping) { 134 void validate(NewExpression node, TreeElements mapping) {
135 for (Node argument in node.send.arguments) { 135 for (Node argument in node.send.arguments) {
136 NamedArgument named = argument.asNamedArgument(); 136 NamedArgument named = argument.asNamedArgument();
137 if (named == null) continue; 137 if (named == null) continue;
138 ConstantCompiler constantCompiler = compiler.resolver.constantCompiler; 138 ConstantCompiler constantCompiler = compiler.resolver.constantCompiler;
139 ConstantValue value = 139 ConstantValue value =
140 constantCompiler.compileNode(named.expression, mapping).value; 140 constantCompiler.getConstantValue(
141 constantCompiler.compileNode(named.expression, mapping));
141 142
142 MirrorUsageBuilder builder = 143 MirrorUsageBuilder builder =
143 new MirrorUsageBuilder( 144 new MirrorUsageBuilder(
144 analyzer, mapping.analyzedElement.library, named.expression, 145 analyzer, mapping.analyzedElement.library, named.expression,
145 value, mapping); 146 value, mapping);
146 147
147 if (named.name.source == 'symbols') { 148 if (named.name.source == 'symbols') {
148 analyzer.cachedStrings[value] = 149 analyzer.cachedStrings[value] =
149 builder.convertConstantToUsageList(value, onlyStrings: true); 150 builder.convertConstantToUsageList(value, onlyStrings: true);
150 } else if (named.name.source == 'targets') { 151 } else if (named.name.source == 'targets') {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 /// annotations are represented as [MirrorUsage]. 260 /// annotations are represented as [MirrorUsage].
260 List<MirrorUsage> mirrorsUsedOnLibraryTag(LibraryElement library, 261 List<MirrorUsage> mirrorsUsedOnLibraryTag(LibraryElement library,
261 Import tag) { 262 Import tag) {
262 LibraryElement importedLibrary = library.getLibraryFromTag(tag); 263 LibraryElement importedLibrary = library.getLibraryFromTag(tag);
263 if (importedLibrary != compiler.mirrorsLibrary) { 264 if (importedLibrary != compiler.mirrorsLibrary) {
264 return null; 265 return null;
265 } 266 }
266 List<MirrorUsage> result = <MirrorUsage>[]; 267 List<MirrorUsage> result = <MirrorUsage>[];
267 for (MetadataAnnotation metadata in tag.metadata) { 268 for (MetadataAnnotation metadata in tag.metadata) {
268 metadata.ensureResolved(compiler); 269 metadata.ensureResolved(compiler);
269 Element element = 270 ConstantValue value =
270 metadata.constant.value.getType(compiler.coreTypes).element; 271 compiler.constants.getConstantValue(metadata.constant);
272 Element element = value.getType(compiler.coreTypes).element;
271 if (element == compiler.mirrorsUsedClass) { 273 if (element == compiler.mirrorsUsedClass) {
272 result.add(buildUsage(metadata.constant.value)); 274 result.add(buildUsage(value));
273 } 275 }
274 } 276 }
275 return result; 277 return result;
276 } 278 }
277 279
278 /// Merge all [MirrorUsage] instances accross all libraries. 280 /// Merge all [MirrorUsage] instances accross all libraries.
279 MirrorUsage mergeUsages(Map<LibraryElement, List<MirrorUsage>> usageMap) { 281 MirrorUsage mergeUsages(Map<LibraryElement, List<MirrorUsage>> usageMap) {
280 Set<MirrorUsage> usagesToMerge = new Set<MirrorUsage>(); 282 Set<MirrorUsage> usagesToMerge = new Set<MirrorUsage>();
281 usageMap.forEach((LibraryElement library, List<MirrorUsage> usages) { 283 usageMap.forEach((LibraryElement library, List<MirrorUsage> usages) {
282 librariesWithUsage.add(library); 284 librariesWithUsage.add(library);
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 } 563 }
562 return scope.localLookup(name); 564 return scope.localLookup(name);
563 } 565 }
564 return null; 566 return null;
565 } 567 }
566 568
567 /// Attempt to find a [Spannable] corresponding to constant. 569 /// Attempt to find a [Spannable] corresponding to constant.
568 Spannable positionOf(ConstantValue constant) { 570 Spannable positionOf(ConstantValue constant) {
569 Node node; 571 Node node;
570 elements.forEachConstantNode((Node n, ConstantExpression c) { 572 elements.forEachConstantNode((Node n, ConstantExpression c) {
571 if (node == null && c.value == constant) { 573 if (node == null && compiler.constants.getConstantValue(c) == constant) {
572 node = n; 574 node = n;
573 } 575 }
574 }); 576 });
575 if (node == null) { 577 if (node == null) {
576 // TODO(ahe): Returning [spannable] here leads to confusing error 578 // TODO(ahe): Returning [spannable] here leads to confusing error
577 // messages. For example, consider: 579 // messages. For example, consider:
578 // @MirrorsUsed(targets: fisk) 580 // @MirrorsUsed(targets: fisk)
579 // import 'dart:mirrors'; 581 // import 'dart:mirrors';
580 // 582 //
581 // const fisk = const [main]; 583 // const fisk = const [main];
582 // 584 //
583 // main() {} 585 // main() {}
584 // 586 //
585 // The message is: 587 // The message is:
586 // example.dart:1:23: Hint: Can't use 'fisk' here because ... 588 // example.dart:1:23: Hint: Can't use 'fisk' here because ...
587 // Did you forget to add quotes? 589 // Did you forget to add quotes?
588 // @MirrorsUsed(targets: fisk) 590 // @MirrorsUsed(targets: fisk)
589 // ^^^^ 591 // ^^^^
590 // 592 //
591 // Instead of saying 'fisk' should pretty print the problematic constant 593 // Instead of saying 'fisk' should pretty print the problematic constant
592 // value. 594 // value.
593 return spannable; 595 return spannable;
594 } 596 }
595 return node; 597 return node;
596 } 598 }
597 } 599 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/mirrors/dart2js_mirrors.dart ('k') | pkg/compiler/lib/src/native/behavior.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698