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

Side by Side Diff: pkg/compiler/lib/src/universe/codegen_world_builder.dart

Issue 2884233002: Use entities in runtime_types (Closed)
Patch Set: Remove debug print Created 3 years, 7 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 part of world_builder; 5 part of world_builder;
6 6
7 /// World builder specific to codegen. 7 /// World builder specific to codegen.
8 /// 8 ///
9 /// This adds additional access to liveness of selectors and elements. 9 /// This adds additional access to liveness of selectors and elements.
10 abstract class CodegenWorldBuilder implements WorldBuilder { 10 abstract class CodegenWorldBuilder implements WorldBuilder {
(...skipping 20 matching lines...) Expand all
31 bool hasInvokedSetter(Element member, ClosedWorld world); 31 bool hasInvokedSetter(Element member, ClosedWorld world);
32 32
33 bool hasInvokedGetter(Element member, ClosedWorld world); 33 bool hasInvokedGetter(Element member, ClosedWorld world);
34 34
35 Map<Selector, SelectorConstraints> invocationsByName(String name); 35 Map<Selector, SelectorConstraints> invocationsByName(String name);
36 36
37 Map<Selector, SelectorConstraints> getterInvocationsByName(String name); 37 Map<Selector, SelectorConstraints> getterInvocationsByName(String name);
38 38
39 Map<Selector, SelectorConstraints> setterInvocationsByName(String name); 39 Map<Selector, SelectorConstraints> setterInvocationsByName(String name);
40 40
41 Iterable<FunctionElement> get staticFunctionsNeedingGetter; 41 Iterable<FunctionEntity> get staticFunctionsNeedingGetter;
42 Iterable<FunctionElement> get methodsNeedingSuperGetter; 42 Iterable<FunctionEntity> get methodsNeedingSuperGetter;
43 43
44 /// The set of all referenced static fields. 44 /// The set of all referenced static fields.
45 /// 45 ///
46 /// Invariant: Elements are declaration elements. 46 /// Invariant: Elements are declaration elements.
47 Iterable<FieldElement> get allReferencedStaticFields; 47 Iterable<FieldEntity> get allReferencedStaticFields;
48
49 /// Set of methods in instantiated classes that are potentially closurized.
50 Iterable<FunctionEntity> get closurizedMembers;
48 } 51 }
49 52
50 class CodegenWorldBuilderImpl implements CodegenWorldBuilder { 53 class CodegenWorldBuilderImpl implements CodegenWorldBuilder {
51 final NativeBasicData _nativeData; 54 final NativeBasicData _nativeData;
52 final ClosedWorld _world; 55 final ClosedWorld _world;
53 final JavaScriptConstantCompiler _constants; 56 final JavaScriptConstantCompiler _constants;
54 57
55 /// The set of all directly instantiated classes, that is, classes with a 58 /// The set of all directly instantiated classes, that is, classes with a
56 /// generative constructor that has been called directly and not only through 59 /// generative constructor that has been called directly and not only through
57 /// a super-call. 60 /// a super-call.
(...skipping 16 matching lines...) Expand all
74 /// The set of all referenced static fields. 77 /// The set of all referenced static fields.
75 /// 78 ///
76 /// Invariant: Elements are declaration elements. 79 /// Invariant: Elements are declaration elements.
77 final Set<FieldElement> allReferencedStaticFields = new Set<FieldElement>(); 80 final Set<FieldElement> allReferencedStaticFields = new Set<FieldElement>();
78 81
79 /** 82 /**
80 * Documentation wanted -- johnniwinther 83 * Documentation wanted -- johnniwinther
81 * 84 *
82 * Invariant: Elements are declaration elements. 85 * Invariant: Elements are declaration elements.
83 */ 86 */
84 final Set<FunctionElement> staticFunctionsNeedingGetter = 87 final Set<FunctionEntity> staticFunctionsNeedingGetter =
85 new Set<FunctionElement>(); 88 new Set<FunctionEntity>();
86 final Set<FunctionElement> methodsNeedingSuperGetter = 89 final Set<FunctionEntity> methodsNeedingSuperGetter =
87 new Set<FunctionElement>(); 90 new Set<FunctionEntity>();
88 final Map<String, Map<Selector, SelectorConstraints>> _invokedNames = 91 final Map<String, Map<Selector, SelectorConstraints>> _invokedNames =
89 <String, Map<Selector, SelectorConstraints>>{}; 92 <String, Map<Selector, SelectorConstraints>>{};
90 final Map<String, Map<Selector, SelectorConstraints>> _invokedGetters = 93 final Map<String, Map<Selector, SelectorConstraints>> _invokedGetters =
91 <String, Map<Selector, SelectorConstraints>>{}; 94 <String, Map<Selector, SelectorConstraints>>{};
92 final Map<String, Map<Selector, SelectorConstraints>> _invokedSetters = 95 final Map<String, Map<Selector, SelectorConstraints>> _invokedSetters =
93 <String, Map<Selector, SelectorConstraints>>{}; 96 <String, Map<Selector, SelectorConstraints>>{};
94 97
95 final Map<ClassElement, _ClassUsage> _processedClasses = 98 final Map<ClassElement, _ClassUsage> _processedClasses =
96 <ClassElement, _ClassUsage>{}; 99 <ClassElement, _ClassUsage>{};
97 100
(...skipping 14 matching lines...) Expand all
112 /// closurized. 115 /// closurized.
113 final Map<String, Set<_MemberUsage>> _instanceFunctionsByName = 116 final Map<String, Set<_MemberUsage>> _instanceFunctionsByName =
114 <String, Set<_MemberUsage>>{}; 117 <String, Set<_MemberUsage>>{};
115 118
116 final Set<ResolutionDartType> isChecks = new Set<ResolutionDartType>(); 119 final Set<ResolutionDartType> isChecks = new Set<ResolutionDartType>();
117 120
118 final SelectorConstraintsStrategy selectorConstraintsStrategy; 121 final SelectorConstraintsStrategy selectorConstraintsStrategy;
119 122
120 final Set<ConstantValue> _constantValues = new Set<ConstantValue>(); 123 final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
121 124
125 /// Set of methods in instantiated classes that are potentially closurized.
126 final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>();
127
122 CodegenWorldBuilderImpl(this._nativeData, this._world, this._constants, 128 CodegenWorldBuilderImpl(this._nativeData, this._world, this._constants,
123 this.selectorConstraintsStrategy); 129 this.selectorConstraintsStrategy);
124 130
125 /// Calls [f] with every instance field, together with its declarer, in an 131 /// Calls [f] with every instance field, together with its declarer, in an
126 /// instance of [cls]. 132 /// instance of [cls].
127 void forEachInstanceField( 133 void forEachInstanceField(
128 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) { 134 ClassElement cls, void f(ClassEntity declarer, FieldEntity field)) {
129 cls.implementation 135 cls.implementation
130 .forEachInstanceField(f, includeSuperAndInjectedMembers: true); 136 .forEachInstanceField(f, includeSuperAndInjectedMembers: true);
131 } 137 }
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 isChecks.add(type); 327 isChecks.add(type);
322 } 328 }
323 329
324 void _registerStaticUse(StaticUse staticUse) { 330 void _registerStaticUse(StaticUse staticUse) {
325 Element element = staticUse.element; 331 Element element = staticUse.element;
326 if (Elements.isStaticOrTopLevel(element) && element.isField) { 332 if (Elements.isStaticOrTopLevel(element) && element.isField) {
327 allReferencedStaticFields.add(element); 333 allReferencedStaticFields.add(element);
328 } 334 }
329 switch (staticUse.kind) { 335 switch (staticUse.kind) {
330 case StaticUseKind.STATIC_TEAR_OFF: 336 case StaticUseKind.STATIC_TEAR_OFF:
331 staticFunctionsNeedingGetter.add(element); 337 MethodElement method = element;
338 staticFunctionsNeedingGetter.add(method);
332 break; 339 break;
333 case StaticUseKind.SUPER_TEAR_OFF: 340 case StaticUseKind.SUPER_TEAR_OFF:
334 methodsNeedingSuperGetter.add(element); 341 MethodElement method = element;
342 methodsNeedingSuperGetter.add(method);
335 break; 343 break;
336 case StaticUseKind.SUPER_FIELD_SET: 344 case StaticUseKind.SUPER_FIELD_SET:
337 case StaticUseKind.FIELD_SET: 345 case StaticUseKind.FIELD_SET:
338 case StaticUseKind.GENERAL: 346 case StaticUseKind.GENERAL:
339 case StaticUseKind.DIRECT_USE: 347 case StaticUseKind.DIRECT_USE:
340 case StaticUseKind.CLOSURE: 348 case StaticUseKind.CLOSURE:
341 case StaticUseKind.FIELD_GET: 349 case StaticUseKind.FIELD_GET:
342 case StaticUseKind.CONSTRUCTOR_INVOKE: 350 case StaticUseKind.CONSTRUCTOR_INVOKE:
343 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: 351 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
344 case StaticUseKind.REDIRECTION: 352 case StaticUseKind.REDIRECTION:
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 useSet.addAll(usage.normalUse()); 401 useSet.addAll(usage.normalUse());
394 break; 402 break;
395 case StaticUseKind.INLINING: 403 case StaticUseKind.INLINING:
396 break; 404 break;
397 } 405 }
398 if (useSet.isNotEmpty) { 406 if (useSet.isNotEmpty) {
399 memberUsed(usage.entity, useSet); 407 memberUsed(usage.entity, useSet);
400 } 408 }
401 } 409 }
402 410
411 /// Registers that [element] has been closurized.
412 void registerClosurizedMember(MemberEntity element) {
413 closurizedMembers.add(element);
414 }
415
403 void processClassMembers(ClassElement cls, MemberUsedCallback memberUsed) { 416 void processClassMembers(ClassElement cls, MemberUsedCallback memberUsed) {
404 cls.implementation.forEachMember((_, MemberElement member) { 417 cls.implementation.forEachMember((_, MemberElement member) {
405 assert(invariant(member, member.isDeclaration)); 418 assert(invariant(member, member.isDeclaration));
406 if (!member.isInstanceMember) return; 419 if (!member.isInstanceMember) return;
407 if (member.isMalformed) return; 420 if (member.isMalformed) return;
408 _getMemberUsage(member, memberUsed); 421 _getMemberUsage(member, memberUsed);
409 }); 422 });
410 } 423 }
411 424
412 _MemberUsage _getMemberUsage( 425 _MemberUsage _getMemberUsage(
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 502
490 /// Register the constant [use] with this world builder. Returns `true` if 503 /// Register the constant [use] with this world builder. Returns `true` if
491 /// the constant use was new to the world. 504 /// the constant use was new to the world.
492 bool registerConstantUse(ConstantUse use) { 505 bool registerConstantUse(ConstantUse use) {
493 if (use.kind == ConstantUseKind.DIRECT) { 506 if (use.kind == ConstantUseKind.DIRECT) {
494 _constants.addCompileTimeConstantForEmission(use.value); 507 _constants.addCompileTimeConstantForEmission(use.value);
495 } 508 }
496 return _constantValues.add(use.value); 509 return _constantValues.add(use.value);
497 } 510 }
498 } 511 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698