Index: sdk/lib/_internal/compiler/implementation/compiler.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart |
index 2bfbdf253c1808b7fe806382b83bdd24490b5d09..0137e2f2dcf8766f0aa96b2e569ce73b52d4b5f7 100644 |
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart |
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart |
@@ -492,33 +492,50 @@ abstract class Compiler implements DiagnosticListener { |
LibraryElement scanBuiltinLibrary(String filename); |
void initializeSpecialClasses() { |
- final List missingClasses = []; |
- ClassElement lookupSpecialClass(SourceString name) { |
+ final List missingCoreClasses = []; |
+ ClassElement lookupCoreClass(SourceString name) { |
ClassElement result = coreLibrary.find(name); |
if (result == null) { |
- missingClasses.add(name.slowToString()); |
+ missingCoreClasses.add(name.slowToString()); |
+ } |
+ return result; |
+ } |
+ objectClass = lookupCoreClass(const SourceString('Object')); |
+ boolClass = lookupCoreClass(const SourceString('bool')); |
+ numClass = lookupCoreClass(const SourceString('num')); |
+ intClass = lookupCoreClass(const SourceString('int')); |
+ doubleClass = lookupCoreClass(const SourceString('double')); |
+ stringClass = lookupCoreClass(const SourceString('String')); |
+ functionClass = lookupCoreClass(const SourceString('Function')); |
+ listClass = lookupCoreClass(const SourceString('List')); |
+ typeClass = lookupCoreClass(const SourceString('Type')); |
+ mapClass = lookupCoreClass(const SourceString('Map')); |
+ if (!missingCoreClasses.isEmpty) { |
+ internalErrorOnElement(coreLibrary, |
+ 'dart:core library does not contain required classes: ' |
+ '$missingCoreClasses'); |
+ } |
+ |
+ final List missingHelperClasses = []; |
+ ClassElement lookupHelperClass(SourceString name) { |
+ ClassElement result = jsHelperLibrary.find(name); |
+ if (result == null) { |
+ missingHelperClasses.add(name.slowToString()); |
} |
return result; |
} |
- objectClass = lookupSpecialClass(const SourceString('Object')); |
- boolClass = lookupSpecialClass(const SourceString('bool')); |
- numClass = lookupSpecialClass(const SourceString('num')); |
- intClass = lookupSpecialClass(const SourceString('int')); |
- doubleClass = lookupSpecialClass(const SourceString('double')); |
- stringClass = lookupSpecialClass(const SourceString('String')); |
- functionClass = lookupSpecialClass(const SourceString('Function')); |
- listClass = lookupSpecialClass(const SourceString('List')); |
- typeClass = lookupSpecialClass(const SourceString('Type')); |
- mapClass = lookupSpecialClass(const SourceString('Map')); |
jsInvocationMirrorClass = |
- lookupSpecialClass(const SourceString('JSInvocationMirror')); |
- closureClass = lookupSpecialClass(const SourceString('Closure')); |
- dynamicClass = lookupSpecialClass(const SourceString('Dynamic_')); |
- nullClass = lookupSpecialClass(const SourceString('Null')); |
- types = new Types(this, dynamicClass); |
- if (!missingClasses.isEmpty) { |
- cancel('core library does not contain required classes: $missingClasses'); |
+ lookupHelperClass(const SourceString('JSInvocationMirror')); |
+ closureClass = lookupHelperClass(const SourceString('Closure')); |
+ dynamicClass = lookupHelperClass(const SourceString('Dynamic_')); |
+ nullClass = lookupHelperClass(const SourceString('Null')); |
+ if (!missingHelperClasses.isEmpty) { |
+ internalErrorOnElement(jsHelperLibrary, |
+ 'dart:_js_helper library does not contain required classes: ' |
+ '$missingHelperClasses'); |
} |
+ |
+ types = new Types(this, dynamicClass); |
} |
void scanBuiltinLibraries() { |
@@ -533,18 +550,6 @@ abstract class Compiler implements DiagnosticListener { |
isolateHelperLibrary.find(const SourceString('_WorkerStub')); |
cls.setNative('"*Worker"'); |
- // The core library was loaded and patched before jsHelperLibrary was |
- // initialized, so it wasn't imported into those two libraries during |
- // patching. |
- importHelperLibrary(coreLibrary); |
- importHelperLibrary(interceptorsLibrary); |
- |
- importForeignLibrary(jsHelperLibrary); |
- importForeignLibrary(interceptorsLibrary); |
- |
- importForeignLibrary(isolateHelperLibrary); |
- importHelperLibrary(isolateHelperLibrary); |
- |
assertMethod = jsHelperLibrary.find(const SourceString('assertHelper')); |
identicalFunction = coreLibrary.find(const SourceString('identical')); |
@@ -577,67 +582,6 @@ abstract class Compiler implements DiagnosticListener { |
*/ |
Uri resolvePatchUri(String dartLibraryPath); |
- /** Define the JS helper functions in the given library. */ |
- void importForeignLibrary(LibraryElement library) { |
- if (foreignLibrary != null) { |
- libraryLoader.importLibrary(library, foreignLibrary, null); |
- } |
- } |
- |
- void importIsolateHelperLibrary(LibraryElement library) { |
- if (isolateHelperLibrary != null) { |
- libraryLoader.importLibrary(library, isolateHelperLibrary, null); |
- } |
- } |
- |
- // TODO(karlklose,floitsch): move this to the javascript backend. |
- /** Enable the 'JS' helper for a library if needed. */ |
- void maybeEnableJSHelper(LibraryElement library) { |
- String libraryName = library.canonicalUri.toString(); |
- bool nativeTest = library.entryCompilationUnit.script.name.contains( |
- 'dart/tests/compiler/dart2js_native'); |
- if (nativeTest |
- || libraryName == 'dart:async' |
- || libraryName == 'dart:chrome' |
- || libraryName == 'dart:mirrors' |
- || libraryName == 'dart:math' |
- || libraryName == 'dart:html' |
- || libraryName == 'dart:html_common' |
- || libraryName == 'dart:indexed_db' |
- || libraryName == 'dart:svg' |
- || libraryName == 'dart:web_audio') { |
- if (nativeTest |
- || libraryName == 'dart:chrome' |
- || libraryName == 'dart:html' |
- || libraryName == 'dart:html_common' |
- || libraryName == 'dart:indexed_db' |
- || libraryName == 'dart:svg') { |
- // dart:html and dart:svg need access to convertDartClosureToJS and |
- // annotation classes. |
- // dart:mirrors needs access to the Primitives class. |
- importHelperLibrary(library); |
- } |
- library.addToScope( |
- foreignLibrary.findLocal(const SourceString('JS')), this); |
- Element jsIndexingBehaviorInterface = |
- findHelper(const SourceString('JavaScriptIndexingBehavior')); |
- if (jsIndexingBehaviorInterface != null) { |
- library.addToScope(jsIndexingBehaviorInterface, this); |
- } |
- } |
- } |
- |
- void maybeEnableIsolateHelper(LibraryElement library) { |
- String libraryName = library.canonicalUri.toString(); |
- if (libraryName == 'dart:isolate' |
- || libraryName == 'dart:html' |
- // TODO(floitsch): create a separate async-helper library instead of |
- // importing the isolate-library just for TimerImpl. |
- || libraryName == 'dart:async') { |
- importIsolateHelperLibrary(library); |
- } |
- } |
- |
void runCompiler(Uri uri) { |
assert(uri != null || analyzeOnly); |
scanBuiltinLibraries(); |
@@ -655,10 +599,6 @@ abstract class Compiler implements DiagnosticListener { |
} |
mainApp = libraryLoader.loadLibrary(uri, null, uri); |
} |
- libraries.forEach((_, library) { |
- maybeEnableJSHelper(library); |
- maybeEnableIsolateHelper(library); |
- }); |
Element main = null; |
if (mainApp != null) { |
main = mainApp.find(MAIN); |