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

Unified Diff: lib/runtime/dart_runtime.js

Issue 1145243013: Check for duplicate library names (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Address comments Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/runtime/dart/typed_data.js ('k') | lib/src/codegen/html_codegen.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/runtime/dart_runtime.js
diff --git a/lib/runtime/dart_runtime.js b/lib/runtime/dart_runtime.js
index 468ac5dd7aabdfe7c4bef2a83ea2643f3b83f548..8ca447fae1c3ebe3a1a2d78923bea2f9441c3e59 100644
--- a/lib/runtime/dart_runtime.js
+++ b/lib/runtime/dart_runtime.js
@@ -50,6 +50,10 @@ var dart, _js_helper, _js_primitives, dartx;
}
dart.dput = dput;
+ function throwRuntimeError(message) {
+ throw Error(message);
+ }
+
// TODO(jmesserly): this should call noSuchMethod, not throw.
function throwNoSuchMethod(obj, name, args, opt_func) {
if (obj === void 0) obj = opt_func;
@@ -426,15 +430,15 @@ var dart, _js_helper, _js_primitives, dartx;
/** Checks that `x` is not null or undefined. */
function notNull(x) {
- if (x == null) throw 'expected not-null value';
+ if (x == null) throwRuntimeError('expected not-null value');
return x;
}
dart.notNull = notNull;
function _typeName(type) {
- if (type === void 0) throw "Undefined type";
+ if (type === void 0) throwRuntimeError('Undefined type');
var name = type.name;
- if (!name) throw 'Unexpected type: ' + type;
+ if (!name) throwRuntimeError('Unexpected type: ' + type);
return name;
}
@@ -722,7 +726,7 @@ var dart, _js_helper, _js_primitives, dartx;
function lazyGetter() {
// Clear the init function to detect circular initialization.
let f = init;
- if (f === null) throw 'circular initialization for field ' + name;
+ if (f === null) throwRuntimeError('circular initialization for field ' + name);
init = null;
// Compute and store the value.
@@ -943,8 +947,7 @@ var dart, _js_helper, _js_primitives, dartx;
dart.map = map;
function assert(condition) {
- // TODO(jmesserly): throw assertion error.
- if (!condition) throw 'assertion failed';
+ if (!condition) throw new core.AssertionError();
}
dart.assert = assert;
@@ -978,12 +981,12 @@ var dart, _js_helper, _js_primitives, dartx;
/** Memoize a generic type constructor function. */
function generic(typeConstructor) {
let length = typeConstructor.length;
- if (length < 1) throw Error('must have at least one generic type argument');
+ if (length < 1) throwRuntimeError('must have at least one generic type argument');
let resultMap = new Map();
function makeGenericType(/*...arguments*/) {
if (arguments.length != length && arguments.length != 0) {
- throw Error('requires ' + length + ' or 0 type arguments');
+ throwRuntimeError('requires ' + length + ' or 0 type arguments');
}
let args = slice.call(arguments);
// TODO(leafp): This should really be core.Object for
@@ -996,7 +999,7 @@ var dart, _js_helper, _js_primitives, dartx;
for (let i = 0; i < length; i++) {
let arg = args[i];
if (arg == null) {
- throw Error('type arguments should not be null: ' + typeConstructor);
+ throwRuntimeError('type arguments should not be null: ' + typeConstructor);
}
let map = value;
value = map.get(arg);
@@ -1279,32 +1282,88 @@ var dart, _js_helper, _js_primitives, dartx;
dart.global = window || global;
dart.JsSymbol = Symbol;
- function import_(value) {
+ // All libraries, including those that have referenced (lazyImport),
+ // but not yet loaded.
+ var libraries = new Map();
+
+ // Completed libraries.
+ var loadedLibraries = new Set();
+
+ // Import a library by name.
+ // This is exported for REPL / JS interop convenience.
+ function import_(name) {
+ let loaded = loadedLibraries.has(name);
+ let value = libraries[name];
// TODO(vsm): Change this to a hard throw.
// For now, we're missing some libraries. E.g., dart:js:
// https://github.com/dart-lang/dev_compiler/issues/168
- if (!value) {
- console.log('missing required module');
+ if (!loaded) {
+ console.warn('Missing required module: ' + name);
+ } else if (!value) {
+ throwRuntimeError('Library import error: ' + name)
}
return value;
}
dart.import = import_;
-
- function lazyImport(value) {
- return defineLibrary(value, {});
+
+ function initializeLibraryStub(name) {
+ // Create the library object if necessary.
+ if (!libraries[name]) {
+ libraries[name] = {};
+ }
+ return libraries[name];
+ }
+ const lazyImport = initializeLibraryStub;
+
+ function defineLibrary(name, defaultValue) {
+ if (loadedLibraries.has(name)) {
+ throwRuntimeError('Library is already defined: ' + name);
+ }
+ var value;
+ if (defaultValue) {
+ var oldValue = libraries[name];
+ if (oldValue && oldValue != defaultValue) {
+ throwRuntimeError(
+ `Library ${name} cannot be redefined to ${defaultValue}`);
+ }
+ libraries[name] = value = defaultValue;
+ } else {
+ value = initializeLibraryStub(name);
+ }
+ loadedLibraries.add(name);
+ return value;
}
- dart.lazyImport = lazyImport;
- function defineLibrary(value, defaultValue) {
- return value ? value : defaultValue;
+ function library(name, defaultValue, imports, lazyImports, module) {
+ var args = [];
+ var lib = defineLibrary(name, defaultValue);
+ args.push(lib);
+ for (var i = 0; i < imports.length; ++i) {
+ lib = import_(imports[i]);
+ args.push(lib);
+ }
+ for (var i = 0; i < lazyImports.length; ++i) {
+ lib = lazyImport(lazyImports[i]);
+ args.push(lib);
+ }
+ module.apply(null, args);
}
- dart.defineLibrary = defineLibrary;
+ dart.library = library;
- // TODO(jmesserly): hack to bootstrap the SDK
- _js_helper = _js_helper || {};
- _js_helper.checkNum = notNull;
+ function start(libraryName) {
+ let lib = import_(libraryName);
+ _isolate_helper.startRootIsolate(lib.main, []);
+ }
+ dart.start = start;
- _js_primitives = _js_primitives || {};
+ let core = lazyImport('dart/core');
+ let collection = lazyImport('dart/collection');
+ let async = lazyImport('dart/async');
+ let _interceptors = lazyImport('dart/_interceptors');
+ let _isolate_helper = lazyImport('dart/_isolate_helper');
+ let _js_helper = lazyImport('dart/_js_helper');
+ _js_helper.checkNum = notNull;
+ let _js_primitives = lazyImport('dart/_js_primitives');
_js_primitives.printString = (s) => console.log(s);
// TODO(vsm): DOM facades?
« no previous file with comments | « lib/runtime/dart/typed_data.js ('k') | lib/src/codegen/html_codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698