| Index: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
|
| index 344c592fcd546a3ab4a87e9176c17d80cf61456d..dc776c86d689a9ee2e75840b9895e580f8f76cdb 100644
|
| --- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
|
| +++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
|
| @@ -74,6 +74,8 @@ lazyFn(closure, computeType) {
|
| final _runtimeType = JS('', 'Symbol("_runtimeType")');
|
| final isNamedConstructor = JS('', 'Symbol("isNamedConstructor")');
|
|
|
| +final _moduleName = JS('', 'Symbol("_moduleName")');
|
| +
|
| _checkPrimitiveType(obj) {
|
| // TODO(jmesserly): JS is used to prevent type literal wrapping. Is there a
|
| // better way we can handle this? (sra: It is super dodgy that the values
|
| @@ -187,9 +189,9 @@ unwrapType(WrappedType obj) => obj._wrappedType;
|
|
|
| _getRuntimeType(value) => JS('', '#[#]', value, _runtimeType);
|
| getIsNamedConstructor(value) => JS('', '#[#]', value, isNamedConstructor);
|
| -// TODO(bmilligan): Define the symbol in rtti.dart instead of dart_library.js
|
| -// and get rid of the call to dart_library in the JS here.
|
| -getDartLibraryName(value) => JS('', '#[dart_library.dartLibraryName]', value);
|
| +
|
| +/// Return the module name for a raw library object.
|
| +getModuleName(value) => JS('', '#[#]', value, _moduleName);
|
|
|
| /// Tag the runtime type of [value] to be type [t].
|
| void tag(value, t) {
|
| @@ -204,3 +206,22 @@ void tagLazy(value, compute) {
|
| JS('', '#(#, #, { get: # })', defineLazyProperty, value, _runtimeType,
|
| compute);
|
| }
|
| +
|
| +var _loadedModules = JS('', 'new Map()');
|
| +
|
| +List getModuleNames() {
|
| + return JS('', 'Array.from(#.keys())', _loadedModules);
|
| +}
|
| +
|
| +/// Return all library objects in the specified module.
|
| +getModuleLibraries(String name) {
|
| + var module = JS('', '#.get(#)', _loadedModules, name);
|
| + if (module == null) return null;
|
| + JS('', '#[#] = #', module, _moduleName, name);
|
| + return module;
|
| +}
|
| +
|
| +/// Track all libraries
|
| +void trackLibraries(String moduleName, libraries) {
|
| + JS('', '#.set(#, #)', _loadedModules, moduleName, libraries);
|
| +}
|
|
|