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

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

Issue 2693163002: Split backend implementation of EnqueuerListener (Closed)
Patch Set: Updated cf. comments Created 3 years, 10 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import '../closure.dart'; 5 import '../closure.dart';
6 import '../common.dart'; 6 import '../common.dart';
7 import '../compiler.dart'; 7 import '../compiler.dart';
8 import '../constants/values.dart'; 8 import '../constants/values.dart';
9 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
10 import '../elements/resolution_types.dart'; 10 import '../elements/resolution_types.dart';
11 import '../enqueue.dart'; 11 import '../enqueue.dart';
12 import '../options.dart';
12 import '../world.dart'; 13 import '../world.dart';
13 import '../util/emptyset.dart'; 14 import '../util/emptyset.dart';
15 import 'backend_helpers.dart';
14 16
15 class MirrorsData { 17 class MirrorsData {
16 /// True if a call to preserveMetadataMarker has been seen. This means that 18 /// True if a call to preserveMetadataMarker has been seen. This means that
17 /// metadata must be retained for dart:mirrors to work correctly. 19 /// metadata must be retained for dart:mirrors to work correctly.
18 bool mustRetainMetadata = false; 20 bool mustRetainMetadata = false;
19 21
20 /// True if any metadata has been retained. This is slightly different from 22 /// True if any metadata has been retained. This is slightly different from
21 /// [mustRetainMetadata] and tells us if any metadata was retained. For 23 /// [mustRetainMetadata] and tells us if any metadata was retained. For
22 /// example, if [mustRetainMetadata] is true but there is no metadata in the 24 /// example, if [mustRetainMetadata] is true but there is no metadata in the
23 /// program, this variable will stil be false. 25 /// program, this variable will stil be false.
24 bool hasRetainedMetadata = false; 26 bool hasRetainedMetadata = false;
25 27
26 /// True if a call to preserveLibraryNames has been seen. 28 /// True if a call to preserveLibraryNames has been seen.
27 bool mustRetainLibraryNames = false; 29 bool mustRetainLibraryNames = false;
28 30
29 /// True if a call to preserveNames has been seen. 31 /// True if a call to preserveNames has been seen.
30 bool mustPreserveNames = false; 32 bool mustPreserveNames = false;
31 33
32 /// True if a call to disableTreeShaking has been seen. 34 /// True if a call to disableTreeShaking has been seen.
33 bool isTreeShakingDisabled = false; 35 bool isTreeShakingDisabled = false;
34 36
35 /// True if there isn't sufficient @MirrorsUsed data. 37 /// True if there isn't sufficient @MirrorsUsed data.
36 bool hasInsufficientMirrorsUsed = false; 38 bool hasInsufficientMirrorsUsed = false;
37 39
40 /// True if a call to preserveUris has been seen and the preserve-uris flag
41 /// is set.
42 bool mustPreserveUris = false;
43
38 /// List of symbols that the user has requested for reflection. 44 /// List of symbols that the user has requested for reflection.
39 final Set<String> symbolsUsed = new Set<String>(); 45 final Set<String> symbolsUsed = new Set<String>();
40 46
41 /// List of elements that the user has requested for reflection. 47 /// List of elements that the user has requested for reflection.
42 final Set<Element> targetsUsed = new Set<Element>(); 48 final Set<Element> targetsUsed = new Set<Element>();
43 49
44 /// List of annotations provided by user that indicate that the annotated 50 /// List of annotations provided by user that indicate that the annotated
45 /// element must be retained. 51 /// element must be retained.
46 final Set<Element> metaTargetsUsed = new Set<Element>(); 52 final Set<Element> metaTargetsUsed = new Set<Element>();
47 53
48 final Compiler compiler; 54 final Compiler compiler;
49 55
50 MirrorsData(this.compiler); 56 MirrorsData(this.compiler);
51 57
58 CompilerOptions get _options => compiler.options;
59
60 BackendHelpers get _helpers => compiler.backend.helpers;
61
62 void registerUsedMember(MemberElement member) {
63 if (member == _helpers.disableTreeShakingMarker) {
64 isTreeShakingDisabled = true;
65 } else if (member == _helpers.preserveNamesMarker) {
66 mustPreserveNames = true;
67 } else if (member == _helpers.preserveMetadataMarker) {
68 mustRetainMetadata = true;
69 } else if (member == _helpers.preserveUrisMarker) {
70 if (_options.preserveUris) mustPreserveUris = true;
71 } else if (member == _helpers.preserveLibraryNamesMarker) {
72 mustRetainLibraryNames = true;
73 }
74 }
75
52 /// Should [element] (a getter) that would normally not be generated due to 76 /// Should [element] (a getter) that would normally not be generated due to
53 /// treeshaking be retained for reflection? 77 /// treeshaking be retained for reflection?
54 bool shouldRetainGetter(Element element) { 78 bool shouldRetainGetter(Element element) {
55 return isTreeShakingDisabled && isAccessibleByReflection(element); 79 return isTreeShakingDisabled && isAccessibleByReflection(element);
56 } 80 }
57 81
58 /// Should [element] (a setter) hat would normally not be generated due to 82 /// Should [element] (a setter) hat would normally not be generated due to
59 /// treeshaking be retained for reflection? 83 /// treeshaking be retained for reflection?
60 bool shouldRetainSetter(Element element) { 84 bool shouldRetainSetter(Element element) {
61 return isTreeShakingDisabled && isAccessibleByReflection(element); 85 return isTreeShakingDisabled && isAccessibleByReflection(element);
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 for (Element closure in closureMap[null]) { 347 for (Element closure in closureMap[null]) {
324 if (referencedFromMirrorSystem(closure)) { 348 if (referencedFromMirrorSystem(closure)) {
325 reflectableMembers.add(closure); 349 reflectableMembers.add(closure);
326 foundClosure = true; 350 foundClosure = true;
327 } 351 }
328 } 352 }
329 } 353 }
330 // As we do not think about closures as classes, yet, we have to make sure 354 // As we do not think about closures as classes, yet, we have to make sure
331 // their superclasses are available for reflection manually. 355 // their superclasses are available for reflection manually.
332 if (foundClosure) { 356 if (foundClosure) {
333 ClassElement cls = compiler.backend.helpers.closureClass; 357 ClassElement cls = _helpers.closureClass;
334 reflectableMembers.add(cls); 358 reflectableMembers.add(cls);
335 } 359 }
336 Set<Element> closurizedMembers = 360 Set<Element> closurizedMembers =
337 compiler.resolutionWorldBuilder.closurizedMembers; 361 compiler.resolutionWorldBuilder.closurizedMembers;
338 if (closurizedMembers.any(reflectableMembers.contains)) { 362 if (closurizedMembers.any(reflectableMembers.contains)) {
339 ClassElement cls = compiler.backend.helpers.boundClosureClass; 363 ClassElement cls = _helpers.boundClosureClass;
340 reflectableMembers.add(cls); 364 reflectableMembers.add(cls);
341 } 365 }
342 // Add typedefs. 366 // Add typedefs.
343 reflectableMembers 367 reflectableMembers
344 .addAll(closedWorld.allTypedefs.where(referencedFromMirrorSystem)); 368 .addAll(closedWorld.allTypedefs.where(referencedFromMirrorSystem));
345 // Register all symbols of reflectable elements 369 // Register all symbols of reflectable elements
346 for (Element element in reflectableMembers) { 370 for (Element element in reflectableMembers) {
347 symbolsUsed.add(element.name); 371 symbolsUsed.add(element.name);
348 } 372 }
349 _membersNeededForReflection = reflectableMembers; 373 _membersNeededForReflection = reflectableMembers;
(...skipping 11 matching lines...) Expand all
361 } 385 }
362 386
363 /// Called when [:const Symbol(name):] is seen. 387 /// Called when [:const Symbol(name):] is seen.
364 void registerConstSymbol(String name) { 388 void registerConstSymbol(String name) {
365 symbolsUsed.add(name); 389 symbolsUsed.add(name);
366 if (name.endsWith('=')) { 390 if (name.endsWith('=')) {
367 symbolsUsed.add(name.substring(0, name.length - 1)); 391 symbolsUsed.add(name.substring(0, name.length - 1));
368 } 392 }
369 } 393 }
370 } 394 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/enqueuer.dart ('k') | pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698