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

Side by Side Diff: pkg/dev_compiler/lib/js/legacy/dart_library.js

Issue 2954523002: fix #27259, implement covariance checking for strong mode and DDC (Closed)
Patch Set: add more comments Created 3 years, 5 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 Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /* This file defines the module loader for the dart runtime. 5 /* This file defines the module loader for the dart runtime.
6 */ 6 */
7 var dart_library; 7 var dart_library;
8 if (!dart_library) { 8 if (!dart_library) {
9 dart_library = 9 dart_library =
10 typeof module != "undefined" && module.exports || {}; 10 typeof module != "undefined" && module.exports || {};
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 this._imports = imports; 60 this._imports = imports;
61 this._loader = loader; 61 this._loader = loader;
62 62
63 // Cyclic import detection 63 // Cyclic import detection
64 this._state = LibraryLoader.NOT_LOADED; 64 this._state = LibraryLoader.NOT_LOADED;
65 } 65 }
66 66
67 loadImports() { 67 loadImports() {
68 let results = []; 68 let results = [];
69 for (let name of this._imports) { 69 for (let name of this._imports) {
70 results.push(import_(name)); 70 let lib = libraries.get(name);
71 if (!lib) {
72 throwLibraryError('Library not available: ' + name);
73 }
74 results.push(lib.load());
71 } 75 }
72 return results; 76 return results;
73 } 77 }
74 78
75 load() { 79 load() {
76 // Check for cycles 80 // Check for cycles
77 if (this._state == LibraryLoader.LOADING) { 81 if (this._state == LibraryLoader.LOADING) {
78 throwLibraryError('Circular dependence on library: ' 82 throwLibraryError('Circular dependence on library: '
79 + this._name); 83 + this._name);
80 } else if (this._state >= LibraryLoader.READY) { 84 } else if (this._state >= LibraryLoader.READY) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 if (result) { 145 if (result) {
142 console.warn('Already loaded ' + name); 146 console.warn('Already loaded ' + name);
143 return result; 147 return result;
144 } 148 }
145 result = new LibraryLoader(name, defaultValue, imports, loader); 149 result = new LibraryLoader(name, defaultValue, imports, loader);
146 libraries.set(name, result); 150 libraries.set(name, result);
147 return result; 151 return result;
148 } 152 }
149 dart_library.library = library; 153 dart_library.library = library;
150 154
151 // Maintain a stack of active imports. If a requested library/module is not 155 function import_(libraryName) {
152 // available, print the stack to show where/how it was requested. 156 let loader = libraries.get(libraryName);
153 let _stack = []; 157 // TODO(vsm): A user might call this directly from JS (as we do in tests).
154 function import_(name) { 158 // We may want a different error type.
155 let lib = libraries.get(name); 159 if (!loader) throwLibraryError('Library not found: ' + libraryName);
156 if (!lib) { 160 return loader.load();
157 let message = 'Module ' + name + ' not loaded in the browser.';
158 if (_stack != []) {
159 message += '\nDependency via:';
160 let indent = '';
161 for (let last = _stack.length - 1; last >= 0; last--) {
162 indent += ' ';
163 message += '\n' + indent + '- ' + _stack[last];
164 }
165 }
166 throwLibraryError(message);
167 }
168 _stack.push(name);
169 let result = lib.load();
170 _stack.pop();
171 return result;
172 } 161 }
173 dart_library.import = import_; 162 dart_library.import = import_;
174 163
175 var _currentIsolate = false; 164 var _currentIsolate = false;
176 165
177 function start(moduleName, libraryName) { 166 function start(moduleName, libraryName) {
178 if (libraryName == null) libraryName = moduleName; 167 if (libraryName == null) libraryName = moduleName;
179 let library = import_(moduleName)[libraryName]; 168 let library = import_(moduleName)[libraryName];
180 let dart_sdk = import_('dart_sdk'); 169 let dart_sdk = import_('dart_sdk');
181 170
182 if (!_currentIsolate) { 171 if (!_currentIsolate) {
183 // This import is only needed for chrome debugging. We should provide an 172 // This import is only needed for chrome debugging. We should provide an
184 // option to compile without it. 173 // option to compile without it.
185 dart_sdk._debugger.registerDevtoolsFormatter(); 174 dart_sdk._debugger.registerDevtoolsFormatter();
186 175
187 // Create isolate. 176 // Create isolate.
188 _currentIsolate = true; 177 _currentIsolate = true;
189 dart_sdk._isolate_helper.startRootIsolate(() => {}, []); 178 dart_sdk._isolate_helper.startRootIsolate(() => {}, []);
190 } 179 }
191 180
192 library.main(); 181 library.main();
193 } 182 }
194 dart_library.start = start; 183 dart_library.start = start;
195 184
196 })(dart_library); 185 })(dart_library);
197 } 186 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698