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

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

Issue 12226074: Cleanup universe to not have backend related things. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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 | 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 library universe; 5 library universe;
6 6
7 import '../closure.dart'; 7 import '../closure.dart';
8 import '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../dart2jslib.dart'; 9 import '../dart2jslib.dart';
10 import '../dart_types.dart'; 10 import '../dart_types.dart';
(...skipping 17 matching lines...) Expand all
28 28
29 /** 29 /**
30 * Documentation wanted -- johnniwinther 30 * Documentation wanted -- johnniwinther
31 * 31 *
32 * Invariant: Elements are declaration elements. 32 * Invariant: Elements are declaration elements.
33 */ 33 */
34 final Set<FunctionElement> staticFunctionsNeedingGetter; 34 final Set<FunctionElement> staticFunctionsNeedingGetter;
35 final Map<SourceString, Set<Selector>> invokedNames; 35 final Map<SourceString, Set<Selector>> invokedNames;
36 final Map<SourceString, Set<Selector>> invokedGetters; 36 final Map<SourceString, Set<Selector>> invokedGetters;
37 final Map<SourceString, Set<Selector>> invokedSetters; 37 final Map<SourceString, Set<Selector>> invokedSetters;
38
39 /**
40 * Fields accessed. Currently only the codegen knows this
41 * information. The resolver is too conservative when seeing a
42 * getter and only registers an invoked getter.
43 */
44 final Map<SourceString, Set<Selector>> fieldGetters;
45
46 /**
47 * Fields set. See comment in [fieldGetters].
48 */
49 final Map<SourceString, Set<Selector>> fieldSetters;
38 final Set<DartType> isChecks; 50 final Set<DartType> isChecks;
39 51
40 Universe() : instantiatedClasses = new Set<ClassElement>(), 52 Universe() : instantiatedClasses = new Set<ClassElement>(),
41 instantiatedTypes = new Set<DartType>(), 53 instantiatedTypes = new Set<DartType>(),
42 staticFunctionsNeedingGetter = new Set<FunctionElement>(), 54 staticFunctionsNeedingGetter = new Set<FunctionElement>(),
43 invokedNames = new Map<SourceString, Set<Selector>>(), 55 invokedNames = new Map<SourceString, Set<Selector>>(),
44 invokedGetters = new Map<SourceString, Set<Selector>>(), 56 invokedGetters = new Map<SourceString, Set<Selector>>(),
57 fieldGetters = new Map<SourceString, Set<Selector>>(),
58 fieldSetters = new Map<SourceString, Set<Selector>>(),
45 invokedSetters = new Map<SourceString, Set<Selector>>(), 59 invokedSetters = new Map<SourceString, Set<Selector>>(),
46 isChecks = new Set<DartType>(); 60 isChecks = new Set<DartType>();
47 61
48 bool hasMatchingSelector(Set<Selector> selectors, 62 bool hasMatchingSelector(Set<Selector> selectors,
49 Element member, 63 Element member,
50 Compiler compiler) { 64 Compiler compiler) {
51 if (selectors == null) return false; 65 if (selectors == null) return false;
52 for (Selector selector in selectors) { 66 for (Selector selector in selectors) {
53 if (selector.appliesUnnamed(member, compiler)) return true; 67 if (selector.appliesUnnamed(member, compiler)) return true;
54 } 68 }
55 return false; 69 return false;
56 } 70 }
57 71
58 bool hasInvocation(Element member, Compiler compiler) { 72 bool hasInvocation(Element member, Compiler compiler) {
59 return hasMatchingSelector(invokedNames[member.name], member, compiler); 73 return hasMatchingSelector(invokedNames[member.name], member, compiler);
60 } 74 }
61 75
62 bool hasInvokedGetter(Element member, Compiler compiler) { 76 bool hasInvokedGetter(Element member, Compiler compiler) {
63 return hasMatchingSelector(invokedGetters[member.name], member, compiler); 77 return hasMatchingSelector(invokedGetters[member.name], member, compiler);
64 } 78 }
65 79
66 bool hasInvokedSetter(Element member, Compiler compiler) { 80 bool hasInvokedSetter(Element member, Compiler compiler) {
67 return hasMatchingSelector(invokedSetters[member.name], member, compiler); 81 return hasMatchingSelector(invokedSetters[member.name], member, compiler);
68 } 82 }
69 }
70
71 /// [Universe] which is specific to resolution.
72 class ResolutionUniverse extends Universe {
73 }
74
75 /// [Universe] which is specific to code generation.
76 class CodegenUniverse extends Universe {
77 /**
78 * Documentation wanted -- johnniwinther
79 *
80 * Invariant: Key elements are declaration elements.
81 */
82 Map<Element, js.Expression> generatedCode;
83
84 /**
85 * Documentation wanted -- johnniwinther
86 *
87 * Invariant: Key elements are declaration elements.
88 */
89 Map<Element, js.Expression> generatedBailoutCode;
90
91 final Map<SourceString, Set<Selector>> fieldGetters;
92 final Map<SourceString, Set<Selector>> fieldSetters;
93
94 CodegenUniverse()
95 : generatedCode = new Map<Element, js.Expression>(),
96 generatedBailoutCode = new Map<Element, js.Expression>(),
97 fieldGetters = new Map<SourceString, Set<Selector>>(),
98 fieldSetters = new Map<SourceString, Set<Selector>>();
99
100 void addGeneratedCode(CodegenWorkItem work, js.Expression code) {
101 assert(invariant(work.element, work.element.isDeclaration));
102 generatedCode[work.element] = code;
103 }
104
105 void addBailoutCode(CodegenWorkItem work, js.Expression code) {
106 assert(invariant(work.element, work.element.isDeclaration));
107 generatedBailoutCode[work.element] = code;
108 }
109 83
110 bool hasFieldGetter(Element member, Compiler compiler) { 84 bool hasFieldGetter(Element member, Compiler compiler) {
111 return hasMatchingSelector(fieldGetters[member.name], member, compiler); 85 return hasMatchingSelector(fieldGetters[member.name], member, compiler);
112 } 86 }
113 87
114 bool hasFieldSetter(Element member, Compiler compiler) { 88 bool hasFieldSetter(Element member, Compiler compiler) {
115 return hasMatchingSelector(fieldSetters[member.name], member, compiler); 89 return hasMatchingSelector(fieldSetters[member.name], member, compiler);
116 } 90 }
117 } 91 }
118 92
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 ClassElement cls = self; 486 ClassElement cls = self;
513 if (cls.isSubclassOf(other)) { 487 if (cls.isSubclassOf(other)) {
514 // Resolve an invocation of [element.name] on [self]. If it 488 // Resolve an invocation of [element.name] on [self]. If it
515 // is found, this selector is a candidate. 489 // is found, this selector is a candidate.
516 return hasElementIn(self, element) && appliesUntyped(element, compiler); 490 return hasElementIn(self, element) && appliesUntyped(element, compiler);
517 } 491 }
518 492
519 return false; 493 return false;
520 } 494 }
521 } 495 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698