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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart

Issue 1421003004: Add CoreClasses (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comment. Created 5 years, 1 month 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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.js_emitter.program_builder; 5 library dart2js.js_emitter.program_builder;
6 6
7 import '../js_emitter.dart' show 7 import '../js_emitter.dart' show
8 ClassStubGenerator, 8 ClassStubGenerator,
9 CodeEmitterTask, 9 CodeEmitterTask,
10 computeMixinClass, 10 computeMixinClass,
11 Emitter, 11 Emitter,
12 InterceptorStubGenerator, 12 InterceptorStubGenerator,
13 MainCallStubGenerator, 13 MainCallStubGenerator,
14 ParameterStubGenerator, 14 ParameterStubGenerator,
15 RuntimeTypeGenerator, 15 RuntimeTypeGenerator,
16 TypeTestProperties; 16 TypeTestProperties;
17 import '../model.dart'; 17 import '../model.dart';
18 18
19 import '../../closure.dart' show
20 ClosureFieldElement;
19 import '../../common.dart'; 21 import '../../common.dart';
20 import '../../common/names.dart' show 22 import '../../common/names.dart' show
21 Names; 23 Names,
24 Selectors;
22 import '../../compiler.dart' show 25 import '../../compiler.dart' show
23 Compiler; 26 Compiler;
24 import '../../constants/values.dart' show 27 import '../../constants/values.dart' show
25 ConstantValue, 28 ConstantValue,
26 InterceptorConstantValue; 29 InterceptorConstantValue;
27 import '../../closure.dart' show 30 import '../../core_types.dart' show
28 ClosureFieldElement; 31 CoreClasses;
29 import '../../dart_types.dart' show 32 import '../../dart_types.dart' show
30 DartType; 33 DartType;
31 import '../../elements/elements.dart' show 34 import '../../elements/elements.dart' show
32 ClassElement, 35 ClassElement,
33 Element, 36 Element,
34 Elements, 37 Elements,
35 FieldElement, 38 FieldElement,
36 FunctionElement, 39 FunctionElement,
37 FunctionSignature, 40 FunctionSignature,
38 LibraryElement, 41 LibraryElement,
39 MethodElement, 42 MethodElement,
40 Name, 43 Name,
41 ParameterElement, 44 ParameterElement,
42 TypedefElement, 45 TypedefElement,
43 VariableElement; 46 VariableElement;
44 import '../../js/js.dart' as js; 47 import '../../js/js.dart' as js;
45 import '../../js_backend/js_backend.dart' show 48 import '../../js_backend/js_backend.dart' show
46 Namer, 49 Namer,
47 JavaScriptBackend, 50 JavaScriptBackend,
48 JavaScriptConstantCompiler, 51 JavaScriptConstantCompiler,
49 StringBackedName; 52 StringBackedName;
50 import '../../universe/call_structure.dart' show
51 CallStructure;
52 import '../../universe/selector.dart' show 53 import '../../universe/selector.dart' show
53 Selector; 54 Selector;
54 import '../../universe/universe.dart' show 55 import '../../universe/universe.dart' show
55 Universe, 56 Universe,
56 SelectorConstraints; 57 SelectorConstraints;
57 import '../../deferred_load.dart' show 58 import '../../deferred_load.dart' show
58 DeferredLoadTask, 59 DeferredLoadTask,
59 OutputUnit; 60 OutputUnit;
60 61
61 part 'collector.dart'; 62 part 'collector.dart';
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 List<Library> _buildLibraries(LibrariesMap librariesMap) { 341 List<Library> _buildLibraries(LibrariesMap librariesMap) {
341 List<Library> libraries = new List<Library>(librariesMap.length); 342 List<Library> libraries = new List<Library>(librariesMap.length);
342 int count = 0; 343 int count = 0;
343 librariesMap.forEach((LibraryElement library, List<Element> elements) { 344 librariesMap.forEach((LibraryElement library, List<Element> elements) {
344 libraries[count++] = _buildLibrary(library, elements); 345 libraries[count++] = _buildLibrary(library, elements);
345 }); 346 });
346 return libraries; 347 return libraries;
347 } 348 }
348 349
349 void _addJsInteropStubs(LibrariesMap librariesMap) { 350 void _addJsInteropStubs(LibrariesMap librariesMap) {
350 if (_classes.containsKey(_compiler.objectClass)) { 351 if (_classes.containsKey(_compiler.coreClasses.objectClass)) {
351 var toStringInvocation = namer.invocationName(new Selector.call( 352 var toStringInvocation = namer.invocationName(Selectors.toString_);
352 new Name("toString", _compiler.objectClass.library),
353 CallStructure.NO_ARGS));
354 // TODO(jacobr): register toString as used so that it is always accessible 353 // TODO(jacobr): register toString as used so that it is always accessible
355 // from JavaScript. 354 // from JavaScript.
356 _classes[_compiler.objectClass].callStubs.add(_buildStubMethod( 355 _classes[_compiler.coreClasses.objectClass].callStubs.add(
357 new StringBackedName("toString"), 356 _buildStubMethod(
358 js.js('function() { return this.#(this) }', toStringInvocation))); 357 new StringBackedName("toString"),
358 js.js('function() { return this.#(this) }', toStringInvocation)));
359 } 359 }
360 360
361 // We add all members from classes marked with isJsInterop to the base 361 // We add all members from classes marked with isJsInterop to the base
362 // Interceptor class with implementations that directly call the 362 // Interceptor class with implementations that directly call the
363 // corresponding JavaScript member. We do not attempt to bind this when 363 // corresponding JavaScript member. We do not attempt to bind this when
364 // tearing off JavaScript methods as we cannot distinguish between calling 364 // tearing off JavaScript methods as we cannot distinguish between calling
365 // a regular getter that returns a JavaScript function and tearing off 365 // a regular getter that returns a JavaScript function and tearing off
366 // a method in the case where there exist multiple JavaScript classes 366 // a method in the case where there exist multiple JavaScript classes
367 // that conflict on whether the member is a getter or a method. 367 // that conflict on whether the member is a getter or a method.
368 var interceptorClass = _classes[backend.jsJavaScriptObjectClass]; 368 var interceptorClass = _classes[backend.jsJavaScriptObjectClass];
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 }); 521 });
522 } 522 }
523 } 523 }
524 } 524 }
525 525
526 List<StubMethod> typeVariableReaderStubs = 526 List<StubMethod> typeVariableReaderStubs =
527 runtimeTypeGenerator.generateTypeVariableReaderStubs(element); 527 runtimeTypeGenerator.generateTypeVariableReaderStubs(element);
528 528
529 List<StubMethod> noSuchMethodStubs = <StubMethod>[]; 529 List<StubMethod> noSuchMethodStubs = <StubMethod>[];
530 530
531 if (backend.enabledNoSuchMethod && element == _compiler.objectClass) { 531 if (backend.enabledNoSuchMethod && element.isObject) {
532 Map<js.Name, Selector> selectors = 532 Map<js.Name, Selector> selectors =
533 classStubGenerator.computeSelectorsForNsmHandlers(); 533 classStubGenerator.computeSelectorsForNsmHandlers();
534 selectors.forEach((js.Name name, Selector selector) { 534 selectors.forEach((js.Name name, Selector selector) {
535 // If the program contains `const Symbol` names we have to retain them. 535 // If the program contains `const Symbol` names we have to retain them.
536 String selectorName = selector.name; 536 String selectorName = selector.name;
537 if (selector.isSetter) selectorName = "$selectorName="; 537 if (selector.isSetter) selectorName = "$selectorName=";
538 if (backend.symbolsUsed.contains(selectorName)) { 538 if (backend.symbolsUsed.contains(selectorName)) {
539 _symbolsMap[name] = selectorName; 539 _symbolsMap[name] = selectorName;
540 } 540 }
541 noSuchMethodStubs 541 noSuchMethodStubs
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 Constant constant = new Constant(name, holder, constantValue); 961 Constant constant = new Constant(name, holder, constantValue);
962 _constants[constantValue] = constant; 962 _constants[constantValue] = constant;
963 } 963 }
964 } 964 }
965 965
966 Holder _registerStaticStateHolder() { 966 Holder _registerStaticStateHolder() {
967 return _registry.registerHolder( 967 return _registry.registerHolder(
968 namer.staticStateHolder, isStaticStateHolder: true); 968 namer.staticStateHolder, isStaticStateHolder: true);
969 } 969 }
970 } 970 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698