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

Side by Side Diff: pkg/dartino_compiler/lib/src/dartino_system_builder.dart

Issue 1659163007: Rename fletch -> dartino (Closed) Base URL: https://github.com/dartino/sdk.git@master
Patch Set: address comments Created 4 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) 2015, the Dartino project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dartino 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 library fletchc.fletch_system_builder; 5 library dartino_compiler.dartino_system_builder;
6 6
7 import 'dart:typed_data'; 7 import 'dart:typed_data';
8 8
9 import 'package:compiler/src/constants/values.dart' show 9 import 'package:compiler/src/constants/values.dart' show
10 ConstantValue, 10 ConstantValue,
11 ConstructedConstantValue, 11 ConstructedConstantValue,
12 DeferredConstantValue, 12 DeferredConstantValue,
13 FunctionConstantValue, 13 FunctionConstantValue,
14 IntConstantValue, 14 IntConstantValue,
15 ListConstantValue, 15 ListConstantValue,
16 MapConstantValue, 16 MapConstantValue,
17 StringConstantValue; 17 StringConstantValue;
18 18
19 import 'package:compiler/src/elements/elements.dart' show 19 import 'package:compiler/src/elements/elements.dart' show
20 ClassElement, 20 ClassElement,
21 ConstructorElement, 21 ConstructorElement,
22 Element, 22 Element,
23 FieldElement, 23 FieldElement,
24 FunctionElement, 24 FunctionElement,
25 FunctionSignature, 25 FunctionSignature,
26 MemberElement; 26 MemberElement;
27 27
28 import 'package:compiler/src/universe/call_structure.dart' show 28 import 'package:compiler/src/universe/call_structure.dart' show
29 CallStructure; 29 CallStructure;
30 30
31 import 'package:persistent/persistent.dart' show 31 import 'package:persistent/persistent.dart' show
32 PersistentMap; 32 PersistentMap;
33 33
34 import 'fletch_constants.dart' show 34 import 'dartino_constants.dart' show
35 FletchClassConstant, 35 DartinoClassConstant,
36 FletchFunctionConstant, 36 DartinoFunctionConstant,
37 FletchClassInstanceConstant; 37 DartinoClassInstanceConstant;
38 38
39 import 'fletch_class_builder.dart'; 39 import 'dartino_class_builder.dart';
40 import 'fletch_context.dart'; 40 import 'dartino_context.dart';
41 import 'fletch_function_builder.dart'; 41 import 'dartino_function_builder.dart';
42 42
43 import '../fletch_system.dart'; 43 import '../dartino_system.dart';
44 import '../vm_commands.dart'; 44 import '../vm_commands.dart';
45 45
46 class FletchSystemBuilder { 46 class DartinoSystemBuilder {
47 final FletchSystem predecessorSystem; 47 final DartinoSystem predecessorSystem;
48 final int functionIdStart; 48 final int functionIdStart;
49 final int classIdStart; 49 final int classIdStart;
50 50
51 final List<FletchFunctionBuilder> _newFunctions = <FletchFunctionBuilder>[]; 51 final List<DartinoFunctionBuilder> _newFunctions = <DartinoFunctionBuilder>[];
52 final Map<int, FletchClassBuilder> _newClasses = <int, FletchClassBuilder>{}; 52 final Map<int, DartinoClassBuilder> _newClasses = <int, DartinoClassBuilder>{} ;
53 final Map<ConstantValue, int> _newConstants = <ConstantValue, int>{}; 53 final Map<ConstantValue, int> _newConstants = <ConstantValue, int>{};
54 final Map<ParameterStubSignature, FletchFunctionBuilder> _newParameterStubs = 54 final Map<ParameterStubSignature, DartinoFunctionBuilder> _newParameterStubs =
55 <ParameterStubSignature, FletchFunctionBuilder>{}; 55 <ParameterStubSignature, DartinoFunctionBuilder>{};
56 56
57 final Map<int, int> _newGettersByFieldIndex = <int, int>{}; 57 final Map<int, int> _newGettersByFieldIndex = <int, int>{};
58 final Map<int, int> _newSettersByFieldIndex = <int, int>{}; 58 final Map<int, int> _newSettersByFieldIndex = <int, int>{};
59 59
60 final List<FletchFunction> _removedFunctions = <FletchFunction>[]; 60 final List<DartinoFunction> _removedFunctions = <DartinoFunction>[];
61 61
62 final Map<Element, FletchFunctionBuilder> _functionBuildersByElement = 62 final Map<Element, DartinoFunctionBuilder> _functionBuildersByElement =
63 <Element, FletchFunctionBuilder>{}; 63 <Element, DartinoFunctionBuilder>{};
64 64
65 final Map<ClassElement, FletchClassBuilder> _classBuildersByElement = 65 final Map<ClassElement, DartinoClassBuilder> _classBuildersByElement =
66 <ClassElement, FletchClassBuilder>{}; 66 <ClassElement, DartinoClassBuilder>{};
67 67
68 final Map<ConstructorElement, FletchFunctionBuilder> 68 final Map<ConstructorElement, DartinoFunctionBuilder>
69 _newConstructorInitializers = 69 _newConstructorInitializers =
70 <ConstructorElement, FletchFunctionBuilder>{}; 70 <ConstructorElement, DartinoFunctionBuilder>{};
71 71
72 // TODO(ajohnsen): By function/class? 72 // TODO(ajohnsen): By function/class?
73 final Map<Element, List<FunctionElement>> _replaceUsage = 73 final Map<Element, List<FunctionElement>> _replaceUsage =
74 <Element, List<FunctionElement>>{}; 74 <Element, List<FunctionElement>>{};
75 75
76 final Map<int, int> _newTearoffsById = <int, int>{}; 76 final Map<int, int> _newTearoffsById = <int, int>{};
77 77
78 final int maxInt64 = (1 << 63) - 1; 78 final int maxInt64 = (1 << 63) - 1;
79 final int minInt64 = -(1 << 63); 79 final int minInt64 = -(1 << 63);
80 80
81 final Map<int, String> _symbolByFletchSelectorId = <int, String>{}; 81 final Map<int, String> _symbolByDartinoSelectorId = <int, String>{};
82 82
83 FletchSystemBuilder(FletchSystem predecessorSystem) 83 DartinoSystemBuilder(DartinoSystem predecessorSystem)
84 : this.predecessorSystem = predecessorSystem, 84 : this.predecessorSystem = predecessorSystem,
85 this.functionIdStart = predecessorSystem.computeMaxFunctionId() + 1, 85 this.functionIdStart = predecessorSystem.computeMaxFunctionId() + 1,
86 this.classIdStart = predecessorSystem.computeMaxClassId() + 1; 86 this.classIdStart = predecessorSystem.computeMaxClassId() + 1;
87 87
88 int lookupConstantIdByValue(ConstantValue value) { 88 int lookupConstantIdByValue(ConstantValue value) {
89 int id = _newConstants[value]; 89 int id = _newConstants[value];
90 if (id != null) return id; 90 if (id != null) return id;
91 FletchConstant constant = predecessorSystem.lookupConstantByValue(value); 91 DartinoConstant constant = predecessorSystem.lookupConstantByValue(value);
92 return constant?.id; 92 return constant?.id;
93 } 93 }
94 94
95 void replaceUsage(Element element, FunctionElement usage) { 95 void replaceUsage(Element element, FunctionElement usage) {
96 _replaceUsage.putIfAbsent(element, () => []).add(usage); 96 _replaceUsage.putIfAbsent(element, () => []).add(usage);
97 } 97 }
98 98
99 FletchFunctionBuilder newFunctionBuilder( 99 DartinoFunctionBuilder newFunctionBuilder(
100 FletchFunctionKind kind, 100 DartinoFunctionKind kind,
101 int arity, 101 int arity,
102 {String name, 102 {String name,
103 Element element, 103 Element element,
104 FunctionSignature signature, 104 FunctionSignature signature,
105 int memberOf, 105 int memberOf,
106 Element mapByElement}) { 106 Element mapByElement}) {
107 int nextFunctionId = functionIdStart + _newFunctions.length; 107 int nextFunctionId = functionIdStart + _newFunctions.length;
108 FletchFunctionBuilder builder = new FletchFunctionBuilder( 108 DartinoFunctionBuilder builder = new DartinoFunctionBuilder(
109 nextFunctionId, 109 nextFunctionId,
110 kind, 110 kind,
111 arity, 111 arity,
112 name: name, 112 name: name,
113 element: element, 113 element: element,
114 signature: signature, 114 signature: signature,
115 memberOf: memberOf); 115 memberOf: memberOf);
116 _newFunctions.add(builder); 116 _newFunctions.add(builder);
117 if (mapByElement != null) { 117 if (mapByElement != null) {
118 _functionBuildersByElement[mapByElement] = builder; 118 _functionBuildersByElement[mapByElement] = builder;
119 } 119 }
120 return builder; 120 return builder;
121 } 121 }
122 122
123 FletchFunctionBuilder newFunctionBuilderWithSignature( 123 DartinoFunctionBuilder newFunctionBuilderWithSignature(
124 String name, 124 String name,
125 Element element, 125 Element element,
126 FunctionSignature signature, 126 FunctionSignature signature,
127 int memberOf, 127 int memberOf,
128 {FletchFunctionKind kind: FletchFunctionKind.NORMAL, 128 {DartinoFunctionKind kind: DartinoFunctionKind.NORMAL,
129 Element mapByElement}) { 129 Element mapByElement}) {
130 int arity = signature.parameterCount + (memberOf != null ? 1 : 0); 130 int arity = signature.parameterCount + (memberOf != null ? 1 : 0);
131 return newFunctionBuilder( 131 return newFunctionBuilder(
132 kind, 132 kind,
133 arity, 133 arity,
134 name: name, 134 name: name,
135 element: element, 135 element: element,
136 signature: signature, 136 signature: signature,
137 memberOf: memberOf, 137 memberOf: memberOf,
138 mapByElement: mapByElement); 138 mapByElement: mapByElement);
139 } 139 }
140 140
141 FletchFunctionBase lookupFunction(int functionId) { 141 DartinoFunctionBase lookupFunction(int functionId) {
142 if (functionId < functionIdStart) { 142 if (functionId < functionIdStart) {
143 return predecessorSystem.lookupFunctionById(functionId); 143 return predecessorSystem.lookupFunctionById(functionId);
144 } else { 144 } else {
145 return lookupFunctionBuilder(functionId); 145 return lookupFunctionBuilder(functionId);
146 } 146 }
147 } 147 }
148 148
149 FletchFunctionBuilder lookupFunctionBuilder(int functionId) { 149 DartinoFunctionBuilder lookupFunctionBuilder(int functionId) {
150 return _newFunctions[functionId - functionIdStart]; 150 return _newFunctions[functionId - functionIdStart];
151 } 151 }
152 152
153 FletchFunctionBase lookupFunctionByElement(Element element) { 153 DartinoFunctionBase lookupFunctionByElement(Element element) {
154 FletchFunctionBase function = _functionBuildersByElement[element]; 154 DartinoFunctionBase function = _functionBuildersByElement[element];
155 if (function != null) return function; 155 if (function != null) return function;
156 return predecessorSystem.lookupFunctionByElement(element); 156 return predecessorSystem.lookupFunctionByElement(element);
157 } 157 }
158 158
159 FletchFunctionBuilder lookupFunctionBuilderByElement(Element element) { 159 DartinoFunctionBuilder lookupFunctionBuilderByElement(Element element) {
160 return _functionBuildersByElement[element]; 160 return _functionBuildersByElement[element];
161 } 161 }
162 162
163 FletchFunctionBase lookupConstructorInitializerByElement( 163 DartinoFunctionBase lookupConstructorInitializerByElement(
164 ConstructorElement element) { 164 ConstructorElement element) {
165 assert(element.isImplementation); 165 assert(element.isImplementation);
166 FletchFunctionBase function = _newConstructorInitializers[element]; 166 DartinoFunctionBase function = _newConstructorInitializers[element];
167 if (function != null) return function; 167 if (function != null) return function;
168 return predecessorSystem.lookupConstructorInitializerByElement(element); 168 return predecessorSystem.lookupConstructorInitializerByElement(element);
169 } 169 }
170 170
171 FletchFunctionBuilder newConstructorInitializer(ConstructorElement element) { 171 DartinoFunctionBuilder newConstructorInitializer(ConstructorElement element) {
172 assert(element.isImplementation); 172 assert(element.isImplementation);
173 FletchFunctionBuilder builder = newFunctionBuilderWithSignature( 173 DartinoFunctionBuilder builder = newFunctionBuilderWithSignature(
174 element.name, 174 element.name,
175 element, 175 element,
176 element.functionSignature, 176 element.functionSignature,
177 null, 177 null,
178 kind: FletchFunctionKind.INITIALIZER_LIST); 178 kind: DartinoFunctionKind.INITIALIZER_LIST);
179 _newConstructorInitializers[element] = builder; 179 _newConstructorInitializers[element] = builder;
180 return builder; 180 return builder;
181 } 181 }
182 182
183 int lookupTearOffById(int functionId) { 183 int lookupTearOffById(int functionId) {
184 int id = _newTearoffsById[functionId]; 184 int id = _newTearoffsById[functionId];
185 if (id != null) return id; 185 if (id != null) return id;
186 return predecessorSystem.lookupTearOffById(functionId); 186 return predecessorSystem.lookupTearOffById(functionId);
187 } 187 }
188 188
189 FletchFunctionBuilder newTearOff(FletchFunctionBase function, int classId) { 189 DartinoFunctionBuilder newTearOff(DartinoFunctionBase function, int classId) {
190 FletchFunctionBuilder builder = newFunctionBuilderWithSignature( 190 DartinoFunctionBuilder builder = newFunctionBuilderWithSignature(
191 'call', 191 'call',
192 null, 192 null,
193 function.signature, 193 function.signature,
194 classId); 194 classId);
195 _newTearoffsById[function.functionId] = builder.functionId; 195 _newTearoffsById[function.functionId] = builder.functionId;
196 return builder; 196 return builder;
197 } 197 }
198 198
199 /// Return a getter for [fieldIndex] if it already exists, return null 199 /// Return a getter for [fieldIndex] if it already exists, return null
200 /// otherwise. 200 /// otherwise.
201 int lookupGetterByFieldIndex(int fieldIndex) { 201 int lookupGetterByFieldIndex(int fieldIndex) {
202 int functionId = _newGettersByFieldIndex[fieldIndex]; 202 int functionId = _newGettersByFieldIndex[fieldIndex];
203 if (functionId == null) { 203 if (functionId == null) {
204 return predecessorSystem.lookupGetterByFieldIndex(fieldIndex); 204 return predecessorSystem.lookupGetterByFieldIndex(fieldIndex);
205 } 205 }
206 return functionId; 206 return functionId;
207 } 207 }
208 208
209 /// Create a new getter for [fieldIndex]. 209 /// Create a new getter for [fieldIndex].
210 FletchFunctionBuilder newGetter(int fieldIndex) { 210 DartinoFunctionBuilder newGetter(int fieldIndex) {
211 FletchFunctionBuilder builder = 211 DartinoFunctionBuilder builder =
212 newFunctionBuilder(FletchFunctionKind.ACCESSOR, 1); 212 newFunctionBuilder(DartinoFunctionKind.ACCESSOR, 1);
213 _newGettersByFieldIndex[fieldIndex] = builder.functionId; 213 _newGettersByFieldIndex[fieldIndex] = builder.functionId;
214 return builder; 214 return builder;
215 } 215 }
216 216
217 /// Return a getter for [fieldIndex]. If one doesn't already exists, one will 217 /// Return a getter for [fieldIndex]. If one doesn't already exists, one will
218 /// be created. 218 /// be created.
219 int getGetterByFieldIndex(int fieldIndex) { 219 int getGetterByFieldIndex(int fieldIndex) {
220 int id = lookupGetterByFieldIndex(fieldIndex); 220 int id = lookupGetterByFieldIndex(fieldIndex);
221 if (id != null) return id; 221 if (id != null) return id;
222 FletchFunctionBuilder stub = newGetter(fieldIndex); 222 DartinoFunctionBuilder stub = newGetter(fieldIndex);
223 stub.assembler 223 stub.assembler
224 ..loadParameter(0) 224 ..loadParameter(0)
225 ..loadField(fieldIndex) 225 ..loadField(fieldIndex)
226 ..ret() 226 ..ret()
227 ..methodEnd(); 227 ..methodEnd();
228 return stub.functionId; 228 return stub.functionId;
229 } 229 }
230 230
231 /// Return a setter for [fieldIndex] if it already exists, return null 231 /// Return a setter for [fieldIndex] if it already exists, return null
232 /// otherwise. 232 /// otherwise.
233 int lookupSetterByFieldIndex(int fieldIndex) { 233 int lookupSetterByFieldIndex(int fieldIndex) {
234 int functionId = _newSettersByFieldIndex[fieldIndex]; 234 int functionId = _newSettersByFieldIndex[fieldIndex];
235 if (functionId == null) { 235 if (functionId == null) {
236 return predecessorSystem.lookupSetterByFieldIndex(fieldIndex); 236 return predecessorSystem.lookupSetterByFieldIndex(fieldIndex);
237 } 237 }
238 return functionId; 238 return functionId;
239 } 239 }
240 240
241 /// Create a new setter for [fieldIndex]. 241 /// Create a new setter for [fieldIndex].
242 FletchFunctionBuilder newSetter(int fieldIndex) { 242 DartinoFunctionBuilder newSetter(int fieldIndex) {
243 FletchFunctionBuilder builder = 243 DartinoFunctionBuilder builder =
244 newFunctionBuilder(FletchFunctionKind.ACCESSOR, 2); 244 newFunctionBuilder(DartinoFunctionKind.ACCESSOR, 2);
245 _newSettersByFieldIndex[fieldIndex] = builder.functionId; 245 _newSettersByFieldIndex[fieldIndex] = builder.functionId;
246 return builder; 246 return builder;
247 } 247 }
248 248
249 /// Return a setter for [fieldIndex]. If one doesn't already exists, one will 249 /// Return a setter for [fieldIndex]. If one doesn't already exists, one will
250 /// be created. 250 /// be created.
251 int getSetterByFieldIndex(int fieldIndex) { 251 int getSetterByFieldIndex(int fieldIndex) {
252 int id = lookupSetterByFieldIndex(fieldIndex); 252 int id = lookupSetterByFieldIndex(fieldIndex);
253 if (id != null) return id; 253 if (id != null) return id;
254 FletchFunctionBuilder stub = newSetter(fieldIndex); 254 DartinoFunctionBuilder stub = newSetter(fieldIndex);
255 stub.assembler 255 stub.assembler
256 ..loadParameter(0) 256 ..loadParameter(0)
257 ..loadParameter(1) 257 ..loadParameter(1)
258 ..storeField(fieldIndex) 258 ..storeField(fieldIndex)
259 // Top is at this point the rhs argument, thus the return value. 259 // Top is at this point the rhs argument, thus the return value.
260 ..ret() 260 ..ret()
261 ..methodEnd(); 261 ..methodEnd();
262 return stub.functionId; 262 return stub.functionId;
263 } 263 }
264 264
265 void forgetFunction(FletchFunction function) { 265 void forgetFunction(DartinoFunction function) {
266 _removedFunctions.add(function); 266 _removedFunctions.add(function);
267 } 267 }
268 268
269 List<FletchFunctionBuilder> getNewFunctions() => _newFunctions; 269 List<DartinoFunctionBuilder> getNewFunctions() => _newFunctions;
270 270
271 FletchClassBuilder getTearoffClassBuilder( 271 DartinoClassBuilder getTearoffClassBuilder(
272 FletchFunctionBase function, 272 DartinoFunctionBase function,
273 FletchClassBuilder superclass) { 273 DartinoClassBuilder superclass) {
274 int functionId = lookupTearOffById(function.functionId); 274 int functionId = lookupTearOffById(function.functionId);
275 if (functionId == null) return null; 275 if (functionId == null) return null;
276 FletchFunctionBase functionBuilder = lookupFunction(functionId); 276 DartinoFunctionBase functionBuilder = lookupFunction(functionId);
277 FletchClassBuilder classBuilder = 277 DartinoClassBuilder classBuilder =
278 lookupClassBuilder(functionBuilder.memberOf); 278 lookupClassBuilder(functionBuilder.memberOf);
279 if (classBuilder != null) return classBuilder; 279 if (classBuilder != null) return classBuilder;
280 FletchClass cls = lookupClass(functionBuilder.memberOf); 280 DartinoClass cls = lookupClass(functionBuilder.memberOf);
281 return newClassBuilderInternal(cls, superclass); 281 return newClassBuilderInternal(cls, superclass);
282 } 282 }
283 283
284 FletchClassBuilder newClassBuilderInternal( 284 DartinoClassBuilder newClassBuilderInternal(
285 FletchClass klass, 285 DartinoClass klass,
286 FletchClassBuilder superclass) { 286 DartinoClassBuilder superclass) {
287 FletchClassBuilder builder = new FletchPatchClassBuilder( 287 DartinoClassBuilder builder = new DartinoPatchClassBuilder(
288 klass, superclass); 288 klass, superclass);
289 assert(_newClasses[klass.classId] == null); 289 assert(_newClasses[klass.classId] == null);
290 _newClasses[klass.classId] = builder; 290 _newClasses[klass.classId] = builder;
291 return builder; 291 return builder;
292 } 292 }
293 293
294 FletchClassBuilder newPatchClassBuilder( 294 DartinoClassBuilder newPatchClassBuilder(
295 int classId, 295 int classId,
296 FletchClassBuilder superclass) { 296 DartinoClassBuilder superclass) {
297 FletchClass klass = lookupClass(classId); 297 DartinoClass klass = lookupClass(classId);
298 return newClassBuilderInternal(klass, superclass); 298 return newClassBuilderInternal(klass, superclass);
299 } 299 }
300 300
301 FletchClassBuilder newClassBuilder( 301 DartinoClassBuilder newClassBuilder(
302 ClassElement element, 302 ClassElement element,
303 FletchClassBuilder superclass, 303 DartinoClassBuilder superclass,
304 bool isBuiltin, 304 bool isBuiltin,
305 {int extraFields: 0}) { 305 {int extraFields: 0}) {
306 if (element != null) { 306 if (element != null) {
307 FletchClass klass = predecessorSystem.lookupClassByElement(element); 307 DartinoClass klass = predecessorSystem.lookupClassByElement(element);
308 if (klass != null) { 308 if (klass != null) {
309 FletchClassBuilder builder = newClassBuilderInternal(klass, superclass); 309 DartinoClassBuilder builder = newClassBuilderInternal(klass, superclass) ;
310 _classBuildersByElement[element] = builder; 310 _classBuildersByElement[element] = builder;
311 return builder; 311 return builder;
312 } 312 }
313 } 313 }
314 314
315 int nextClassId = classIdStart + _newClasses.length; 315 int nextClassId = classIdStart + _newClasses.length;
316 FletchClassBuilder builder = new FletchNewClassBuilder( 316 DartinoClassBuilder builder = new DartinoNewClassBuilder(
317 nextClassId, 317 nextClassId,
318 element, 318 element,
319 superclass, 319 superclass,
320 isBuiltin, 320 isBuiltin,
321 extraFields); 321 extraFields);
322 _newClasses[nextClassId] = builder; 322 _newClasses[nextClassId] = builder;
323 if (element != null) _classBuildersByElement[element] = builder; 323 if (element != null) _classBuildersByElement[element] = builder;
324 return builder; 324 return builder;
325 } 325 }
326 326
327 FletchClass lookupClass(int classId) { 327 DartinoClass lookupClass(int classId) {
328 return predecessorSystem.classesById[classId]; 328 return predecessorSystem.classesById[classId];
329 } 329 }
330 330
331 FletchClassBuilder lookupClassBuilder(int classId) { 331 DartinoClassBuilder lookupClassBuilder(int classId) {
332 return _newClasses[classId]; 332 return _newClasses[classId];
333 } 333 }
334 334
335 FletchClassBuilder lookupClassBuilderByElement(ClassElement element) { 335 DartinoClassBuilder lookupClassBuilderByElement(ClassElement element) {
336 return _classBuildersByElement[element]; 336 return _classBuildersByElement[element];
337 } 337 }
338 338
339 Iterable<FletchClassBuilder> getNewClasses() => _newClasses.values; 339 Iterable<DartinoClassBuilder> getNewClasses() => _newClasses.values;
340 340
341 void registerConstant(ConstantValue constant, FletchContext context) { 341 void registerConstant(ConstantValue constant, DartinoContext context) {
342 if (predecessorSystem.lookupConstantByValue(constant) != null) return; 342 if (predecessorSystem.lookupConstantByValue(constant) != null) return;
343 _newConstants.putIfAbsent(constant, () { 343 _newConstants.putIfAbsent(constant, () {
344 if (constant.isConstructedObject) { 344 if (constant.isConstructedObject) {
345 context.registerConstructedConstantValue(constant); 345 context.registerConstructedConstantValue(constant);
346 } else if (constant.isFunction) { 346 } else if (constant.isFunction) {
347 context.registerFunctionConstantValue(constant); 347 context.registerFunctionConstantValue(constant);
348 } 348 }
349 for (ConstantValue value in constant.getDependencies()) { 349 for (ConstantValue value in constant.getDependencies()) {
350 registerConstant(value, context); 350 registerConstant(value, context);
351 } 351 }
352 // TODO(zarah): Compute max constant id (as for functions an classes) 352 // TODO(zarah): Compute max constant id (as for functions an classes)
353 // instead of using constantsById.length 353 // instead of using constantsById.length
354 return predecessorSystem.constantsById.length + _newConstants.length; 354 return predecessorSystem.constantsById.length + _newConstants.length;
355 }); 355 });
356 } 356 }
357 357
358 void registerSymbol(String symbol, int fletchSelectorId) { 358 void registerSymbol(String symbol, int dartinoSelectorId) {
359 _symbolByFletchSelectorId[fletchSelectorId] = symbol; 359 _symbolByDartinoSelectorId[dartinoSelectorId] = symbol;
360 } 360 }
361 361
362 FletchFunctionBase lookupParameterStub(ParameterStubSignature signature) { 362 DartinoFunctionBase lookupParameterStub(ParameterStubSignature signature) {
363 FletchFunctionBuilder stub = _newParameterStubs[signature]; 363 DartinoFunctionBuilder stub = _newParameterStubs[signature];
364 if (stub != null) return stub; 364 if (stub != null) return stub;
365 return predecessorSystem.lookupParameterStub(signature); 365 return predecessorSystem.lookupParameterStub(signature);
366 } 366 }
367 367
368 void registerParameterStub( 368 void registerParameterStub(
369 ParameterStubSignature signature, 369 ParameterStubSignature signature,
370 FletchFunctionBuilder stub) { 370 DartinoFunctionBuilder stub) {
371 assert(lookupParameterStub(signature) == null); 371 assert(lookupParameterStub(signature) == null);
372 _newParameterStubs[signature] = stub; 372 _newParameterStubs[signature] = stub;
373 } 373 }
374 374
375 FletchSystem computeSystem(FletchContext context, List<VmCommand> commands) { 375 DartinoSystem computeSystem(DartinoContext context, List<VmCommand> commands) {
376 // TODO(ajohnsen): Consider if the incremental compiler should be aware of 376 // TODO(ajohnsen): Consider if the incremental compiler should be aware of
377 // callMain, when detecting changes. 377 // callMain, when detecting changes.
378 FunctionElement callMain = 378 FunctionElement callMain =
379 context.backend.fletchSystemLibrary.findLocal('callMain'); 379 context.backend.dartinoSystemLibrary.findLocal('callMain');
380 replaceUsage(callMain, context.compiler.mainFunction); 380 replaceUsage(callMain, context.compiler.mainFunction);
381 381
382 int changes = 0; 382 int changes = 0;
383 383
384 // Remove all removed FletchFunctions. 384 // Remove all removed DartinoFunctions.
385 for (FletchFunction function in _removedFunctions) { 385 for (DartinoFunction function in _removedFunctions) {
386 commands.add(new RemoveFromMap(MapId.methods, function.functionId)); 386 commands.add(new RemoveFromMap(MapId.methods, function.functionId));
387 } 387 }
388 388
389 // Create all new FletchFunctions. 389 // Create all new DartinoFunctions.
390 List<FletchFunction> functions = <FletchFunction>[]; 390 List<DartinoFunction> functions = <DartinoFunction>[];
391 for (FletchFunctionBuilder builder in _newFunctions) { 391 for (DartinoFunctionBuilder builder in _newFunctions) {
392 context.compiler.reporter.withCurrentElement(builder.element, () { 392 context.compiler.reporter.withCurrentElement(builder.element, () {
393 functions.add(builder.finalizeFunction(context, commands)); 393 functions.add(builder.finalizeFunction(context, commands));
394 }); 394 });
395 } 395 }
396 396
397 // Create all new FletchClasses. 397 // Create all new DartinoClasses.
398 List<FletchClass> classes = <FletchClass>[]; 398 List<DartinoClass> classes = <DartinoClass>[];
399 for (FletchClassBuilder builder in _newClasses.values) { 399 for (DartinoClassBuilder builder in _newClasses.values) {
400 classes.add(builder.finalizeClass(context, commands)); 400 classes.add(builder.finalizeClass(context, commands));
401 changes++; 401 changes++;
402 } 402 }
403 403
404 // Create all statics. 404 // Create all statics.
405 // TODO(ajohnsen): Should be part of the fletch system. Does not work with 405 // TODO(ajohnsen): Should be part of the dartino system. Does not work with
406 // incremental. 406 // incremental.
407 if (predecessorSystem.isEmpty) { 407 if (predecessorSystem.isEmpty) {
408 context.forEachStatic((element, index) { 408 context.forEachStatic((element, index) {
409 FletchFunctionBuilder initializer = 409 DartinoFunctionBuilder initializer =
410 context.backend.lazyFieldInitializers[element]; 410 context.backend.lazyFieldInitializers[element];
411 if (initializer != null) { 411 if (initializer != null) {
412 commands.add(new PushFromMap(MapId.methods, initializer.functionId)); 412 commands.add(new PushFromMap(MapId.methods, initializer.functionId));
413 commands.add(const PushNewInitializer()); 413 commands.add(const PushNewInitializer());
414 } else { 414 } else {
415 commands.add(const PushNull()); 415 commands.add(const PushNull());
416 } 416 }
417 }); 417 });
418 commands.add(new ChangeStatics(context.staticIndices.length)); 418 commands.add(new ChangeStatics(context.staticIndices.length));
419 changes++; 419 changes++;
420 } 420 }
421 421
422 // Create all FletchConstants. 422 // Create all DartinoConstants.
423 PersistentMap<int, FletchConstant> constantsById = 423 PersistentMap<int, DartinoConstant> constantsById =
424 predecessorSystem.constantsById; 424 predecessorSystem.constantsById;
425 PersistentMap<ConstantValue, FletchConstant> constantsByValue = 425 PersistentMap<ConstantValue, DartinoConstant> constantsByValue =
426 predecessorSystem.constantsByValue; 426 predecessorSystem.constantsByValue;
427 _newConstants.forEach((constant, int id) { 427 _newConstants.forEach((constant, int id) {
428 void addList(List<ConstantValue> list, bool isByteList) { 428 void addList(List<ConstantValue> list, bool isByteList) {
429 for (ConstantValue entry in list) { 429 for (ConstantValue entry in list) {
430 int entryId = lookupConstantIdByValue(entry); 430 int entryId = lookupConstantIdByValue(entry);
431 commands.add(new PushFromMap(MapId.constants, entryId)); 431 commands.add(new PushFromMap(MapId.constants, entryId));
432 if (entry.isInt) { 432 if (entry.isInt) {
433 IntConstantValue constant = entry; 433 IntConstantValue constant = entry;
434 int value = constant.primitiveValue; 434 int value = constant.primitiveValue;
435 if (value & 0xFF == value) continue; 435 if (value & 0xFF == value) continue;
(...skipping 22 matching lines...) Expand all
458 if (value > maxInt64 || value < minInt64) { 458 if (value > maxInt64 || value < minInt64) {
459 assert(context.enableBigint); 459 assert(context.enableBigint);
460 bool negative = value < 0; 460 bool negative = value < 0;
461 value = negative ? -value : value; 461 value = negative ? -value : value;
462 var parts = new List(); 462 var parts = new List();
463 while (value != 0) { 463 while (value != 0) {
464 parts.add(value & 0xffffffff); 464 parts.add(value & 0xffffffff);
465 value >>= 32; 465 value >>= 32;
466 } 466 }
467 467
468 // TODO(ajohnsen): Avoid usage of builders (should be FletchClass). 468 // TODO(ajohnsen): Avoid usage of builders (should be DartinoClass).
469 FletchClassBuilder bigintClassBuilder = 469 DartinoClassBuilder bigintClassBuilder =
470 _classBuildersByElement[context.backend.bigintClass]; 470 _classBuildersByElement[context.backend.bigintClass];
471 FletchClassBuilder uint32DigitsClassBuilder = 471 DartinoClassBuilder uint32DigitsClassBuilder =
472 _classBuildersByElement[context.backend.uint32DigitsClass]; 472 _classBuildersByElement[context.backend.uint32DigitsClass];
473 473
474 commands.add(new PushNewBigInteger( 474 commands.add(new PushNewBigInteger(
475 negative, 475 negative,
476 parts, 476 parts,
477 MapId.classes, 477 MapId.classes,
478 bigintClassBuilder.classId, 478 bigintClassBuilder.classId,
479 uint32DigitsClassBuilder.classId)); 479 uint32DigitsClassBuilder.classId));
480 } else { 480 } else {
481 commands.add(new PushNewInteger(constant.primitiveValue)); 481 commands.add(new PushNewInteger(constant.primitiveValue));
(...skipping 16 matching lines...) Expand all
498 } else if (constant.isList) { 498 } else if (constant.isList) {
499 addList(constant.entries, true); 499 addList(constant.entries, true);
500 } else if (constant.isMap) { 500 } else if (constant.isMap) {
501 MapConstantValue value = constant; 501 MapConstantValue value = constant;
502 addList(value.keys, false); 502 addList(value.keys, false);
503 addList(value.values, false); 503 addList(value.values, false);
504 commands.add(new PushConstantMap(value.length * 2)); 504 commands.add(new PushConstantMap(value.length * 2));
505 } else if (constant.isFunction) { 505 } else if (constant.isFunction) {
506 FunctionConstantValue value = constant; 506 FunctionConstantValue value = constant;
507 FunctionElement element = value.element; 507 FunctionElement element = value.element;
508 FletchFunctionBase function = lookupFunctionByElement(element); 508 DartinoFunctionBase function = lookupFunctionByElement(element);
509 int tearoffId = lookupTearOffById(function.functionId); 509 int tearoffId = lookupTearOffById(function.functionId);
510 FletchFunctionBase tearoff = lookupFunction(tearoffId); 510 DartinoFunctionBase tearoff = lookupFunction(tearoffId);
511 commands 511 commands
512 ..add(new PushFromMap(MapId.classes, tearoff.memberOf)) 512 ..add(new PushFromMap(MapId.classes, tearoff.memberOf))
513 ..add(const PushNewInstance()); 513 ..add(const PushNewInstance());
514 } else if (constant.isConstructedObject) { 514 } else if (constant.isConstructedObject) {
515 ConstructedConstantValue value = constant; 515 ConstructedConstantValue value = constant;
516 ClassElement classElement = value.type.element; 516 ClassElement classElement = value.type.element;
517 // TODO(ajohnsen): Avoid usage of builders (should be FletchClass). 517 // TODO(ajohnsen): Avoid usage of builders (should be DartinoClass).
518 FletchClassBuilder classBuilder = _classBuildersByElement[classElement]; 518 DartinoClassBuilder classBuilder = _classBuildersByElement[classElement] ;
519 519
520 void addIfField(MemberElement member) { 520 void addIfField(MemberElement member) {
521 if (!member.isField || member.isStatic || member.isPatch) return; 521 if (!member.isField || member.isStatic || member.isPatch) return;
522 FieldElement fieldElement = member; 522 FieldElement fieldElement = member;
523 ConstantValue fieldValue = value.fields[fieldElement]; 523 ConstantValue fieldValue = value.fields[fieldElement];
524 int fieldId = lookupConstantIdByValue(fieldValue); 524 int fieldId = lookupConstantIdByValue(fieldValue);
525 commands.add(new PushFromMap(MapId.constants, fieldId)); 525 commands.add(new PushFromMap(MapId.constants, fieldId));
526 } 526 }
527 527
528 // Adds all the fields of [currentClass] in order starting from the top 528 // Adds all the fields of [currentClass] in order starting from the top
529 // of the inheritance chain, and for each class adds non-patch fields 529 // of the inheritance chain, and for each class adds non-patch fields
530 // before patch fields. 530 // before patch fields.
531 void addFields(ClassElement currentClass) { 531 void addFields(ClassElement currentClass) {
532 if (currentClass.superclass != null) { 532 if (currentClass.superclass != null) {
533 addFields(currentClass.superclass); 533 addFields(currentClass.superclass);
534 } 534 }
535 currentClass.forEachLocalMember(addIfField); 535 currentClass.forEachLocalMember(addIfField);
536 if (currentClass.isPatched) { 536 if (currentClass.isPatched) {
537 currentClass.patch.forEachLocalMember(addIfField); 537 currentClass.patch.forEachLocalMember(addIfField);
538 } 538 }
539 } 539 }
540 540
541 addFields(classElement); 541 addFields(classElement);
542 542
543 commands 543 commands
544 ..add(new PushFromMap(MapId.classes, classBuilder.classId)) 544 ..add(new PushFromMap(MapId.classes, classBuilder.classId))
545 ..add(const PushNewInstance()); 545 ..add(const PushNewInstance());
546 } else if (constant is FletchClassInstanceConstant) { 546 } else if (constant is DartinoClassInstanceConstant) {
547 commands 547 commands
548 ..add(new PushFromMap(MapId.classes, constant.classId)) 548 ..add(new PushFromMap(MapId.classes, constant.classId))
549 ..add(const PushNewInstance()); 549 ..add(const PushNewInstance());
550 } else if (constant.isType) { 550 } else if (constant.isType) {
551 // TODO(kasperl): Implement proper support for class literals. At this 551 // TODO(kasperl): Implement proper support for class literals. At this
552 // point, we've already issues unimplemented errors for the individual 552 // point, we've already issues unimplemented errors for the individual
553 // accesses to the class literals, so we just let the class literal 553 // accesses to the class literals, so we just let the class literal
554 // turn into null in the runtime. 554 // turn into null in the runtime.
555 commands.add(const PushNull()); 555 commands.add(const PushNull());
556 } else { 556 } else {
557 throw "Unsupported constant: ${constant.toStructuredString()}"; 557 throw "Unsupported constant: ${constant.toStructuredString()}";
558 } 558 }
559 FletchConstant fletchConstant = new FletchConstant(id, MapId.constants); 559 DartinoConstant dartinoConstant = new DartinoConstant(id, MapId.constants) ;
560 constantsByValue = constantsByValue.insert(constant, fletchConstant); 560 constantsByValue = constantsByValue.insert(constant, dartinoConstant);
561 constantsById = constantsById.insert(id, fletchConstant); 561 constantsById = constantsById.insert(id, dartinoConstant);
562 commands.add(new PopToMap(MapId.constants, id)); 562 commands.add(new PopToMap(MapId.constants, id));
563 }); 563 });
564 564
565 // Set super class for classes, now they are resolved. 565 // Set super class for classes, now they are resolved.
566 for (FletchClass klass in classes) { 566 for (DartinoClass klass in classes) {
567 if (!klass.hasSuperclassId) continue; 567 if (!klass.hasSuperclassId) continue;
568 commands.add(new PushFromMap(MapId.classes, klass.classId)); 568 commands.add(new PushFromMap(MapId.classes, klass.classId));
569 commands.add(new PushFromMap(MapId.classes, klass.superclassId)); 569 commands.add(new PushFromMap(MapId.classes, klass.superclassId));
570 commands.add(const ChangeSuperClass()); 570 commands.add(const ChangeSuperClass());
571 changes++; 571 changes++;
572 } 572 }
573 573
574 // Change constants for the functions, now that classes and constants has 574 // Change constants for the functions, now that classes and constants has
575 // been added. 575 // been added.
576 for (FletchFunction function in functions) { 576 for (DartinoFunction function in functions) {
577 List<FletchConstant> constants = function.constants; 577 List<DartinoConstant> constants = function.constants;
578 for (int i = 0; i < constants.length; i++) { 578 for (int i = 0; i < constants.length; i++) {
579 FletchConstant constant = constants[i]; 579 DartinoConstant constant = constants[i];
580 commands 580 commands
581 ..add(new PushFromMap(MapId.methods, function.functionId)) 581 ..add(new PushFromMap(MapId.methods, function.functionId))
582 ..add(new PushFromMap(constant.mapId, constant.id)) 582 ..add(new PushFromMap(constant.mapId, constant.id))
583 ..add(new ChangeMethodLiteral(i)); 583 ..add(new ChangeMethodLiteral(i));
584 changes++; 584 changes++;
585 } 585 }
586 } 586 }
587 587
588 // Compute all scheme changes. 588 // Compute all scheme changes.
589 for (FletchClassBuilder builder in _newClasses.values) { 589 for (DartinoClassBuilder builder in _newClasses.values) {
590 if (builder.computeSchemaChange(commands)) changes++; 590 if (builder.computeSchemaChange(commands)) changes++;
591 } 591 }
592 592
593 List<FletchFunction> changedFunctions = <FletchFunction>[]; 593 List<DartinoFunction> changedFunctions = <DartinoFunction>[];
594 for (Element element in _replaceUsage.keys) { 594 for (Element element in _replaceUsage.keys) {
595 // Don't modify already replaced elements. 595 // Don't modify already replaced elements.
596 if (lookupFunctionBuilderByElement(element) != null) continue; 596 if (lookupFunctionBuilderByElement(element) != null) continue;
597 597
598 FletchFunction function = 598 DartinoFunction function =
599 predecessorSystem.lookupFunctionByElement(element); 599 predecessorSystem.lookupFunctionByElement(element);
600 // Due to false positive, the element can be uncompiled. 600 // Due to false positive, the element can be uncompiled.
601 if (function == null) continue; 601 if (function == null) continue;
602 602
603 bool constantsChanged = false; 603 bool constantsChanged = false;
604 List<FletchConstant> constants = function.constants.toList(); 604 List<DartinoConstant> constants = function.constants.toList();
605 for (int i = 0; i < constants.length; i++) { 605 for (int i = 0; i < constants.length; i++) {
606 FletchConstant constant = constants[i]; 606 DartinoConstant constant = constants[i];
607 if (constant.mapId != MapId.methods) continue; 607 if (constant.mapId != MapId.methods) continue;
608 for (var usage in _replaceUsage[element]) { 608 for (var usage in _replaceUsage[element]) {
609 FletchFunction oldFunction = 609 DartinoFunction oldFunction =
610 predecessorSystem.lookupFunctionByElement(usage); 610 predecessorSystem.lookupFunctionByElement(usage);
611 if (oldFunction == null) continue; 611 if (oldFunction == null) continue;
612 if (oldFunction.functionId != constant.id) continue; 612 if (oldFunction.functionId != constant.id) continue;
613 FletchFunctionBuilder newFunction = 613 DartinoFunctionBuilder newFunction =
614 lookupFunctionBuilderByElement(usage); 614 lookupFunctionBuilderByElement(usage);
615 615
616 // If the method didn't really change, ignore. 616 // If the method didn't really change, ignore.
617 if (newFunction == null) continue; 617 if (newFunction == null) continue;
618 618
619 constant = new FletchConstant(newFunction.functionId, MapId.methods); 619 constant = new DartinoConstant(newFunction.functionId, MapId.methods);
620 commands 620 commands
621 ..add(new PushFromMap(MapId.methods, function.functionId)) 621 ..add(new PushFromMap(MapId.methods, function.functionId))
622 ..add(new PushFromMap(constant.mapId, constant.id)) 622 ..add(new PushFromMap(constant.mapId, constant.id))
623 ..add(new ChangeMethodLiteral(i)); 623 ..add(new ChangeMethodLiteral(i));
624 constants[i] = constant; 624 constants[i] = constant;
625 constantsChanged = true; 625 constantsChanged = true;
626 changes++; 626 changes++;
627 break; 627 break;
628 } 628 }
629 } 629 }
630 630
631 if (constantsChanged) { 631 if (constantsChanged) {
632 changedFunctions.add(function.withReplacedConstants(constants)); 632 changedFunctions.add(function.withReplacedConstants(constants));
633 } 633 }
634 } 634 }
635 635
636 commands.add(new CommitChanges(changes)); 636 commands.add(new CommitChanges(changes));
637 637
638 PersistentMap<int, FletchClass> classesById = predecessorSystem.classesById; 638 PersistentMap<int, DartinoClass> classesById = predecessorSystem.classesById ;
639 PersistentMap<ClassElement, FletchClass> classesByElement = 639 PersistentMap<ClassElement, DartinoClass> classesByElement =
640 predecessorSystem.classesByElement; 640 predecessorSystem.classesByElement;
641 641
642 for (FletchClass klass in classes) { 642 for (DartinoClass klass in classes) {
643 classesById = classesById.insert(klass.classId, klass); 643 classesById = classesById.insert(klass.classId, klass);
644 if (klass.element != null) { 644 if (klass.element != null) {
645 classesByElement = classesByElement.insert(klass.element, klass); 645 classesByElement = classesByElement.insert(klass.element, klass);
646 } 646 }
647 } 647 }
648 648
649 PersistentMap<int, FletchFunction> functionsById = 649 PersistentMap<int, DartinoFunction> functionsById =
650 predecessorSystem.functionsById; 650 predecessorSystem.functionsById;
651 PersistentMap<Element, FletchFunction> functionsByElement = 651 PersistentMap<Element, DartinoFunction> functionsByElement =
652 predecessorSystem.functionsByElement; 652 predecessorSystem.functionsByElement;
653 653
654 for (FletchFunction function in changedFunctions) { 654 for (DartinoFunction function in changedFunctions) {
655 assert(functionsById[function.functionId] != null); 655 assert(functionsById[function.functionId] != null);
656 functionsById = functionsById.insert(function.functionId, function); 656 functionsById = functionsById.insert(function.functionId, function);
657 Element element = function.element; 657 Element element = function.element;
658 if (element != null) { 658 if (element != null) {
659 assert(functionsByElement[element] != null); 659 assert(functionsByElement[element] != null);
660 functionsByElement = functionsByElement.insert(element, function); 660 functionsByElement = functionsByElement.insert(element, function);
661 } 661 }
662 } 662 }
663 663
664 for (FletchFunction function in _removedFunctions) { 664 for (DartinoFunction function in _removedFunctions) {
665 functionsById = functionsById.delete(function.functionId); 665 functionsById = functionsById.delete(function.functionId);
666 Element element = function.element; 666 Element element = function.element;
667 if (element != null) { 667 if (element != null) {
668 functionsByElement = functionsByElement.delete(element); 668 functionsByElement = functionsByElement.delete(element);
669 } 669 }
670 } 670 }
671 671
672 for (FletchFunction function in functions) { 672 for (DartinoFunction function in functions) {
673 functionsById = functionsById.insert(function.functionId, function); 673 functionsById = functionsById.insert(function.functionId, function);
674 } 674 }
675 675
676 _functionBuildersByElement.forEach((element, builder) { 676 _functionBuildersByElement.forEach((element, builder) {
677 functionsByElement = functionsByElement.insert( 677 functionsByElement = functionsByElement.insert(
678 element, 678 element,
679 functionsById[builder.functionId], 679 functionsById[builder.functionId],
680 (oldValue, newValue) { 680 (oldValue, newValue) {
681 throw "Unexpected element in predecessorSystem."; 681 throw "Unexpected element in predecessorSystem.";
682 }); 682 });
683 }); 683 });
684 684
685 PersistentMap<ConstructorElement, FletchFunction> 685 PersistentMap<ConstructorElement, DartinoFunction>
686 constructorInitializersByElement = 686 constructorInitializersByElement =
687 predecessorSystem.constructorInitializersByElement; 687 predecessorSystem.constructorInitializersByElement;
688 688
689 _newConstructorInitializers.forEach((element, builder) { 689 _newConstructorInitializers.forEach((element, builder) {
690 constructorInitializersByElement = 690 constructorInitializersByElement =
691 constructorInitializersByElement.insert( 691 constructorInitializersByElement.insert(
692 element, functionsById[builder.functionId]); 692 element, functionsById[builder.functionId]);
693 }); 693 });
694 694
695 PersistentMap<int, int> tearoffsById = predecessorSystem.tearoffsById; 695 PersistentMap<int, int> tearoffsById = predecessorSystem.tearoffsById;
696 _newTearoffsById.forEach((int functionId, int stubId) { 696 _newTearoffsById.forEach((int functionId, int stubId) {
697 tearoffsById = tearoffsById.insert(functionId, stubId); 697 tearoffsById = tearoffsById.insert(functionId, stubId);
698 }); 698 });
699 699
700 PersistentMap<int, String> symbolByFletchSelectorId = 700 PersistentMap<int, String> symbolByDartinoSelectorId =
701 predecessorSystem.symbolByFletchSelectorId; 701 predecessorSystem.symbolByDartinoSelectorId;
702 _symbolByFletchSelectorId.forEach((int id, String name) { 702 _symbolByDartinoSelectorId.forEach((int id, String name) {
703 symbolByFletchSelectorId = symbolByFletchSelectorId.insert(id, name); 703 symbolByDartinoSelectorId = symbolByDartinoSelectorId.insert(id, name);
704 }); 704 });
705 705
706 PersistentMap<int, int> gettersByFieldIndex = 706 PersistentMap<int, int> gettersByFieldIndex =
707 predecessorSystem.gettersByFieldIndex; 707 predecessorSystem.gettersByFieldIndex;
708 _newGettersByFieldIndex.forEach((int fieldIndex, int functionId) { 708 _newGettersByFieldIndex.forEach((int fieldIndex, int functionId) {
709 gettersByFieldIndex = gettersByFieldIndex.insert(fieldIndex, functionId); 709 gettersByFieldIndex = gettersByFieldIndex.insert(fieldIndex, functionId);
710 }); 710 });
711 711
712 PersistentMap<int, int> settersByFieldIndex = 712 PersistentMap<int, int> settersByFieldIndex =
713 predecessorSystem.settersByFieldIndex; 713 predecessorSystem.settersByFieldIndex;
714 _newSettersByFieldIndex.forEach((int fieldIndex, int functionId) { 714 _newSettersByFieldIndex.forEach((int fieldIndex, int functionId) {
715 settersByFieldIndex = settersByFieldIndex.insert(fieldIndex, functionId); 715 settersByFieldIndex = settersByFieldIndex.insert(fieldIndex, functionId);
716 }); 716 });
717 717
718 PersistentMap<ParameterStubSignature, FletchFunction> parameterStubs = 718 PersistentMap<ParameterStubSignature, DartinoFunction> parameterStubs =
719 predecessorSystem.parameterStubs; 719 predecessorSystem.parameterStubs;
720 _newParameterStubs.forEach((signature, functionBuilder) { 720 _newParameterStubs.forEach((signature, functionBuilder) {
721 FletchFunction function = functionsById[functionBuilder.functionId]; 721 DartinoFunction function = functionsById[functionBuilder.functionId];
722 parameterStubs = parameterStubs.insert(signature, function); 722 parameterStubs = parameterStubs.insert(signature, function);
723 }); 723 });
724 724
725 return new FletchSystem( 725 return new DartinoSystem(
726 functionsById, 726 functionsById,
727 functionsByElement, 727 functionsByElement,
728 constructorInitializersByElement, 728 constructorInitializersByElement,
729 tearoffsById, 729 tearoffsById,
730 classesById, 730 classesById,
731 classesByElement, 731 classesByElement,
732 constantsById, 732 constantsById,
733 constantsByValue, 733 constantsByValue,
734 symbolByFletchSelectorId, 734 symbolByDartinoSelectorId,
735 gettersByFieldIndex, 735 gettersByFieldIndex,
736 settersByFieldIndex, 736 settersByFieldIndex,
737 parameterStubs); 737 parameterStubs);
738 } 738 }
739 } 739 }
OLDNEW
« no previous file with comments | « pkg/dartino_compiler/lib/src/dartino_selector.dart ('k') | pkg/dartino_compiler/lib/src/dartino_system_printer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698