| Index: runtime/lib/mirrors_impl.dart
|
| ===================================================================
|
| --- runtime/lib/mirrors_impl.dart (revision 9527)
|
| +++ runtime/lib/mirrors_impl.dart (working copy)
|
| @@ -19,22 +19,19 @@
|
| return new_map;
|
| }
|
|
|
| -abstract class _LocalMirrorImpl implements Mirror {
|
| - // Local mirrors always return the same IsolateMirror. This field
|
| - // is more interesting once we implement remote mirrors.
|
| - IsolateMirror get isolate() { return _Mirrors.currentIsolateMirror(); }
|
| -}
|
| +class _LocalMirrorSystemImpl implements MirrorSystem {
|
| + _LocalMirrorSystemImpl(this.rootLibrary, this._libraries, this.isolate) {}
|
|
|
| -class _LocalIsolateMirrorImpl extends _LocalMirrorImpl
|
| - implements IsolateMirror {
|
| - _LocalIsolateMirrorImpl(this.debugName, this.rootLibrary, this._libraries) {}
|
| -
|
| - final String debugName;
|
| final LibraryMirror rootLibrary;
|
| final Map<String, LibraryMirror> _libraries;
|
| + final IsolateMirror isolate;
|
|
|
| Map<String, LibraryMirror> libraries() { return _libraries; }
|
|
|
| + Mirror mirrorOf(Object reflectee) {
|
| + return _Mirrors.mirrorOf(reflectee);
|
| + }
|
| +
|
| InterfaceMirror _sharedDynamic = null;
|
|
|
| InterfaceMirror _dynamicMirror() {
|
| @@ -58,6 +55,24 @@
|
| }
|
|
|
| String toString() {
|
| + return "MirrorSystem for isolate '$debugName'";
|
| + }
|
| +}
|
| +
|
| +abstract class _LocalMirrorImpl implements Mirror {
|
| + // Local mirrors always return the same MirrorSystem. This field
|
| + // is more interesting once we implement remote mirrors.
|
| + MirrorSystem get mirrors() { return _Mirrors.currentMirrorSystem(); }
|
| +}
|
| +
|
| +class _LocalIsolateMirrorImpl extends _LocalMirrorImpl
|
| + implements IsolateMirror {
|
| + _LocalIsolateMirrorImpl(this.debugName) {}
|
| +
|
| + final String debugName;
|
| + final bool isCurrent = true;
|
| +
|
| + String toString() {
|
| return "IsolateMirror on '$debugName'";
|
| }
|
| }
|
| @@ -174,7 +189,7 @@
|
| var _class;
|
| InterfaceMirror getClass() {
|
| if (_class is _LazyInterfaceMirror) {
|
| - _class = _class.resolve(isolate);
|
| + _class = _class.resolve(mirrors);
|
| }
|
| return _class;
|
| }
|
| @@ -207,18 +222,18 @@
|
| class _LazyInterfaceMirror {
|
| _LazyInterfaceMirror(this.libraryName, this.interfaceName) {}
|
|
|
| - InterfaceMirror resolve(IsolateMirror isolate) {
|
| + InterfaceMirror resolve(MirrorSystem mirrors) {
|
| if (libraryName === null) {
|
| if (interfaceName == 'Dynamic') {
|
| - return isolate._dynamicMirror();
|
| + return mirrors._dynamicMirror();
|
| } else if (interfaceName == 'void') {
|
| - return isolate._dynamicMirror();
|
| + return mirrors._dynamicMirror();
|
| } else {
|
| throw new NotImplementedException(
|
| "Mirror for type '$interfaceName' not implemented");
|
| }
|
| }
|
| - return isolate.libraries()[libraryName].members()[interfaceName];
|
| + return mirrors.libraries()[libraryName].members()[interfaceName];
|
| }
|
|
|
| final String libraryName;
|
| @@ -242,7 +257,7 @@
|
| var _library;
|
| LibraryMirror get library() {
|
| if (_library is _LazyLibraryMirror) {
|
| - _library = _library.resolve(isolate);
|
| + _library = _library.resolve(mirrors);
|
| }
|
| return _library;
|
| }
|
| @@ -250,7 +265,7 @@
|
| var _superclass;
|
| InterfaceMirror superclass() {
|
| if (_superclass is _LazyInterfaceMirror) {
|
| - _superclass = _superclass.resolve(isolate);
|
| + _superclass = _superclass.resolve(mirrors);
|
| }
|
| return _superclass;
|
| }
|
| @@ -261,7 +276,7 @@
|
| _superinterfaces[0] is _LazyInterfaceMirror) {
|
| List<InterfaceMirror> resolved = new List<InterfaceMirror>();
|
| for (int i = 0; i < _superinterfaces.length; i++) {
|
| - resolved.add(_superinterfaces[i].resolve(isolate));
|
| + resolved.add(_superinterfaces[i].resolve(mirrors));
|
| }
|
| _superinterfaces = resolved;
|
| }
|
| @@ -271,7 +286,7 @@
|
| var _defaultFactory;
|
| InterfaceMirror defaultFactory() {
|
| if (_defaultFactory is _LazyInterfaceMirror) {
|
| - _defaultFactory = _defaultFactory.resolve(isolate);
|
| + _defaultFactory = _defaultFactory.resolve(mirrors);
|
| }
|
| return _defaultFactory;
|
| }
|
| @@ -306,8 +321,8 @@
|
| class _LazyLibraryMirror {
|
| _LazyLibraryMirror(this.libraryName) {}
|
|
|
| - LibraryMirror resolve(IsolateMirror isolate) {
|
| - return isolate.libraries()[libraryName];
|
| + LibraryMirror resolve(MirrorSystem mirrors) {
|
| + return mirrors.libraries()[libraryName];
|
| }
|
|
|
| final String libraryName;
|
| @@ -377,7 +392,7 @@
|
| var _owner;
|
| Mirror get owner() {
|
| if (_owner is! Mirror) {
|
| - _owner = _owner.resolve(isolate);
|
| + _owner = _owner.resolve(mirrors);
|
| }
|
| return _owner;
|
| }
|
| @@ -419,7 +434,7 @@
|
| var _owner;
|
| Mirror get owner() {
|
| if (_owner is! Mirror) {
|
| - _owner = _owner.resolve(isolate);
|
| + _owner = _owner.resolve(mirrors);
|
| }
|
| return _owner;
|
| }
|
| @@ -440,31 +455,31 @@
|
| // Does a port refer to our local isolate?
|
| static bool isLocalPort(SendPort port) native 'Mirrors_isLocalPort';
|
|
|
| - static IsolateMirror _currentIsolateMirror = null;
|
| + static MirrorSystem _currentMirrorSystem = null;
|
|
|
| - // Creates a new local IsolateMirror.
|
| - static IsolateMirror makeLocalIsolateMirror()
|
| - native 'Mirrors_makeLocalIsolateMirror';
|
| + // Creates a new local MirrorSystem.
|
| + static MirrorSystem makeLocalMirrorSystem()
|
| + native 'Mirrors_makeLocalMirrorSystem';
|
|
|
| - // The IsolateMirror for the current isolate.
|
| - static IsolateMirror currentIsolateMirror() {
|
| - if (_currentIsolateMirror === null) {
|
| - _currentIsolateMirror = makeLocalIsolateMirror();
|
| + // The MirrorSystem for the current isolate.
|
| + static MirrorSystem currentMirrorSystem() {
|
| + if (_currentMirrorSystem === null) {
|
| + _currentMirrorSystem = makeLocalMirrorSystem();
|
| }
|
| - return _currentIsolateMirror;
|
| + return _currentMirrorSystem;
|
| }
|
|
|
| - static Future<IsolateMirror> isolateMirrorOf(SendPort port) {
|
| - Completer<IsolateMirror> completer = new Completer<IsolateMirror>();
|
| + static Future<MirrorSystem> mirrorSystemOf(SendPort port) {
|
| + Completer<MirrorSystem> completer = new Completer<MirrorSystem>();
|
| if (isLocalPort(port)) {
|
| - // Make a local isolate mirror.
|
| + // Make a local mirror system.
|
| try {
|
| - completer.complete(currentIsolateMirror());
|
| + completer.complete(currentMirrorSystem());
|
| } catch (var exception) {
|
| completer.completeException(exception);
|
| }
|
| } else {
|
| - // Make a remote isolate mirror.
|
| + // Make a remote mirror system
|
| throw new NotImplementedException('Remote mirrors not yet implemented');
|
| }
|
| return completer.future;
|
| @@ -474,7 +489,7 @@
|
| static InstanceMirror makeLocalInstanceMirror(Object reflectee)
|
| native 'Mirrors_makeLocalInstanceMirror';
|
|
|
| - // The IsolateMirror for the current isolate.
|
| + // Creates a new local mirror for some Object.
|
| static InstanceMirror mirrorOf(Object reflectee) {
|
| return makeLocalInstanceMirror(reflectee);
|
| }
|
|
|