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

Unified Diff: dart/sdk/lib/_internal/lib/js_mirrors.dart

Issue 20224003: Implement IsolateMirror. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address comments Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart ('k') | dart/tests/lib/lib.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/sdk/lib/_internal/lib/js_mirrors.dart
diff --git a/dart/sdk/lib/_internal/lib/js_mirrors.dart b/dart/sdk/lib/_internal/lib/js_mirrors.dart
index 68e83b085ad99cac61981e3b530f82e801448ab4..7beac1b977276fdc35186a881791421081fa0cfa 100644
--- a/dart/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/dart/sdk/lib/_internal/lib/js_mirrors.dart
@@ -7,7 +7,11 @@ library dart._js_mirrors;
import 'dart:async';
import 'dart:mirrors';
-import 'dart:_foreign_helper' show JS, JS_CURRENT_ISOLATE, JS_GET_NAME;
+import 'dart:_foreign_helper' show
+ JS,
+ JS_CURRENT_ISOLATE,
+ JS_CURRENT_ISOLATE_CONTEXT,
+ JS_GET_NAME;
import 'dart:_collection-dev' as _symbol_dev;
import 'dart:_js_helper' show
BoundClosure,
@@ -36,6 +40,8 @@ String getName(Symbol symbol) {
}
class JsMirrorSystem implements MirrorSystem {
+ final IsolateMirror isolate = new JsIsolateMirror();
+
TypeMirror get dynamicType => _dynamicType;
TypeMirror get voidType => _voidType;
@@ -72,18 +78,16 @@ class JsMirrorSystem implements MirrorSystem {
List<String> functions = data[3];
var metadataFunction = data[4];
var fields = data[5];
+ bool isRoot = data[6];
List metadata = (metadataFunction == null)
? null : JS('List', '#()', metadataFunction);
var libraries = result.putIfAbsent(name, () => <LibraryMirror>[]);
libraries.add(
new JsLibraryMirror(
- s(name), uri, classes, functions, metadata, fields));
+ s(name), uri, classes, functions, metadata, fields, isRoot));
}
return result;
}
-
- // TODO(ahe): Implement this.
- IsolateMirror get isolate => throw new UnimplementedError();
}
abstract class JsMirror implements Mirror {
@@ -113,6 +117,26 @@ abstract class JsMirror implements Mirror {
}
}
+// This class is somewhat silly in the current implementation.
+class JsIsolateMirror extends JsMirror implements IsolateMirror {
+ final _isolateContext = JS_CURRENT_ISOLATE_CONTEXT();
+
+ String get _prettyName => 'Isolate';
+
+ String get debugName {
+ String id = _isolateContext == null ? 'X' : _isolateContext.id.toString();
+ // Using name similar to what the VM uses.
+ return '${n(rootLibrary.simpleName)}-$id';
+ }
+
+ bool get isCurrent => JS_CURRENT_ISOLATE_CONTEXT() == _isolateContext;
+
+ LibraryMirror get rootLibrary {
+ return currentJsMirrorSystem.libraries.values.firstWhere(
+ (JsLibraryMirror library) => library._isRoot);
+ }
+}
+
abstract class JsDeclarationMirror extends JsMirror
implements DeclarationMirror {
final Symbol simpleName;
@@ -161,6 +185,7 @@ class JsLibraryMirror extends JsDeclarationMirror with JsObjectMirror
final List<String> _functions;
final List _metadata;
final String _compactFieldSpecification;
+ final bool _isRoot;
List<JsMethodMirror> _cachedFunctionMirrors;
List<JsVariableMirror> _cachedFields;
@@ -169,7 +194,8 @@ class JsLibraryMirror extends JsDeclarationMirror with JsObjectMirror
this._classes,
this._functions,
this._metadata,
- this._compactFieldSpecification)
+ this._compactFieldSpecification,
+ this._isRoot)
: super(simpleName);
String get _prettyName => 'LibraryMirror';
« no previous file with comments | « dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart ('k') | dart/tests/lib/lib.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698