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

Unified Diff: dart/runtime/lib/mirrors_impl.dart

Issue 14173005: Update dart:mirrors to use Symbol. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add question about LibraryMirror.url Created 7 years, 8 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 | « no previous file | dart/runtime/lib/symbol_patch.dart » ('j') | dart/runtime/lib/symbol_patch.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/runtime/lib/mirrors_impl.dart
diff --git a/dart/runtime/lib/mirrors_impl.dart b/dart/runtime/lib/mirrors_impl.dart
index 6588649ba53bcea4296bdd5612118ba83cc62431..20015d1d4e69e517e5dd46e7955c4fce3841a7e7 100644
--- a/dart/runtime/lib/mirrors_impl.dart
+++ b/dart/runtime/lib/mirrors_impl.dart
@@ -19,10 +19,52 @@ Map _filterMap(Map old_map, bool filter(key, value)) {
return new_map;
}
+// DO NOT SUBMIT: Find better solution for dealing with privacy.
+class _PrivateSymbol implements Symbol {
ahe 2013/04/11 20:12:27 This part is work in progress. My intention is to
+ final String _name;
+
+ const _PrivateSymbol(this._name);
+
+ bool operator ==(other) {
+ return other is _PrivateSymbol && _name == other._name;
+ }
+
+ int get hashCode {
+ const arbitraryPrime = 664597;
+ return 0x1fffffff & (arbitraryPrime * _name.hashCode);
+ }
+}
+
+String _n(Symbol symbol) {
ahe 2013/04/11 20:12:27 I should probably find a better name for this meth
+ if (symbol is _PrivateSymbol) {
+ return symbol._name;
+ } else {
+ return Symbol.getName(symbol);
+ }
+}
+
+Symbol _s(String name) {
+ if (name == null) return null;
+ if (name.startsWith('_')) return new _PrivateSymbol(name);
+ return new Symbol((name == '<TODO:unnamed>') ? '' : name);
ahe 2013/04/11 20:12:27 I need to be able to turn validation of Symbols of
+}
+
+Symbol _computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
+ if (owner == null) return simpleName;
+ return _s('${_n(owner.qualifiedName)}.${_n(simpleName)}');
+}
+
+Map<Symbol, dynamic> _convertStringToSymbolMap(Map<String, dynamic> map) {
+ if (map == null) return null;
+ Map<Symbol, dynamic> result = new Map<Symbol, dynamic>();
+ map.forEach((name, value) => result[_s(name)] = value);
+ return result;
+}
+
String _makeSignatureString(TypeMirror returnType,
List<ParameterMirror> parameters) {
StringBuffer buf = new StringBuffer();
- buf.write(returnType.qualifiedName);
+ buf.write(_n(returnType.qualifiedName));
buf.write(' (');
bool found_optional_param = false;
for (int i = 0; i < parameters.length; i++) {
@@ -31,7 +73,7 @@ String _makeSignatureString(TypeMirror returnType,
buf.write('[');
found_optional_param = true;
}
- buf.write(param.type.qualifiedName);
+ buf.write(_n(param.type.qualifiedName));
if (i < (parameters.length - 1)) {
buf.write(', ');
}
@@ -44,10 +86,13 @@ String _makeSignatureString(TypeMirror returnType,
}
class _LocalMirrorSystemImpl implements MirrorSystem {
- _LocalMirrorSystemImpl(this.libraries, this.isolate)
- : _functionTypes = new Map<String, FunctionTypeMirror>() {}
+ // TODO(ahe): [libraries] should be Map<Uri, LibraryMirror>.
+ // Change parameter back to "this.libraries" when native code is changed.
+ _LocalMirrorSystemImpl(Map<String, LibraryMirror> libraries, this.isolate)
+ : _functionTypes = new Map<String, FunctionTypeMirror>(),
+ this.libraries = _convertStringToSymbolMap(libraries);
- final Map<String, LibraryMirror> libraries;
+ final Map<Symbol, LibraryMirror> libraries;
final IsolateMirror isolate;
TypeMirror _dynamicType = null;
@@ -139,10 +184,10 @@ abstract class _LocalVMObjectMirrorImpl extends _LocalMirrorImpl {
abstract class _LocalObjectMirrorImpl extends _LocalVMObjectMirrorImpl
implements ObjectMirror {
_LocalObjectMirrorImpl(ref) : super(ref) {}
-
-Future<InstanceMirror> invokeAsync(String memberName,
- List positionalArguments,
- [Map<String,dynamic> namedArguments]) {
+
+ Future<InstanceMirror> invokeAsync(Symbol memberName,
+ List positionalArguments,
+ [Map<Symbol, dynamic> namedArguments]) {
if (namedArguments != null) {
throw new UnimplementedError(
'named argument support is not implemented');
@@ -162,22 +207,22 @@ Future<InstanceMirror> invokeAsync(String memberName,
return completer.future;
}
- Future<InstanceMirror> getFieldAsync(String fieldName) {
+ Future<InstanceMirror> getFieldAsync(Symbol fieldName) {
Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
try {
- completer.complete(_getField(this, fieldName));
+ completer.complete(_getField(this, _n(fieldName)));
} catch (exception, s) {
completer.completeError(exception, s);
}
return completer.future;
}
- Future<InstanceMirror> setFieldAsync(String fieldName, Object arg) {
+ Future<InstanceMirror> setFieldAsync(Symbol fieldName, Object arg) {
_validateArgument(0, arg);
Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
try {
- completer.complete(_setField(this, fieldName, arg));
+ completer.complete(_setField(this, _n(fieldName), arg));
} catch (exception, s) {
completer.completeError(exception, s);
}
@@ -304,7 +349,7 @@ class _LocalClosureMirrorImpl extends _LocalInstanceMirrorImpl
}
Future<InstanceMirror> applyAsync(List<Object> positionalArguments,
- [Map<String,Object> namedArguments]) {
+ [Map<Symbol, Object> namedArguments]) {
if (namedArguments != null) {
throw new UnimplementedError(
'named argument support is not implemented');
@@ -324,7 +369,7 @@ class _LocalClosureMirrorImpl extends _LocalInstanceMirrorImpl
return completer.future;
}
- Future<InstanceMirror> findInContext(String name) {
+ Future<InstanceMirror> findInContext(Symbol name) {
throw new UnimplementedError(
'ClosureMirror.findInContext() is not implemented');
}
@@ -334,7 +379,9 @@ class _LocalClosureMirrorImpl extends _LocalInstanceMirrorImpl
}
class _LazyTypeMirror {
- _LazyTypeMirror(this.libraryName, this.typeName) {}
+ _LazyTypeMirror(String libraryName, String typeName)
+ : this.libraryName = _s(libraryName),
+ this.typeName = _s(typeName);
TypeMirror resolve(MirrorSystem mirrors) {
if (libraryName == null) {
@@ -355,35 +402,34 @@ class _LazyTypeMirror {
return resolved;
}
- final String libraryName;
- final String typeName;
+ final Symbol libraryName;
+ final Symbol typeName;
}
class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
implements ClassMirror {
_LocalClassMirrorImpl(ref,
- this.simpleName,
+ String simpleName,
this.isClass,
this._owner,
this._superclass,
this._superinterfaces,
this._defaultFactory,
- this.members,
- this.constructors,
- this.typeVariables) : super(ref) {}
-
- final String simpleName;
-
- String _qualifiedName = null;
- String get qualifiedName {
- if (_owner != null) {
- if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
- }
- } else {
- // The owner of a ClassMirror is null in certain odd cases, like
- // 'void', 'dynamic' and function type mirrors.
- _qualifiedName = simpleName;
+ Map<String, Mirror> members,
+ Map<String, Mirror> constructors,
+ Map<String, Mirror> typeVariables)
+ : this.simpleName = _s(simpleName),
+ this.members = _convertStringToSymbolMap(members),
+ this.constructors = _convertStringToSymbolMap(constructors),
+ this.typeVariables = _convertStringToSymbolMap(typeVariables),
+ super(ref);
+
+ final Symbol simpleName;
+
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
+ if (_qualifiedName == null) {
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
@@ -436,14 +482,14 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _defaultFactory;
}
- final Map<String, Mirror> members;
+ final Map<Symbol, Mirror> members;
- Map<String, MethodMirror> _methods = null;
- Map<String, MethodMirror> _getters = null;
- Map<String, MethodMirror> _setters = null;
- Map<String, VariableMirror> _variables = null;
+ Map<Symbol, MethodMirror> _methods = null;
+ Map<Symbol, MethodMirror> _getters = null;
+ Map<Symbol, MethodMirror> _setters = null;
+ Map<Symbol, VariableMirror> _variables = null;
- Map<String, MethodMirror> get methods {
+ Map<Symbol, MethodMirror> get methods {
if (_methods == null) {
_methods = _filterMap(
members,
@@ -452,7 +498,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _methods;
}
- Map<String, MethodMirror> get getters {
+ Map<Symbol, MethodMirror> get getters {
if (_getters == null) {
_getters = _filterMap(
members,
@@ -461,7 +507,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _getters;
}
- Map<String, MethodMirror> get setters {
+ Map<Symbol, MethodMirror> get setters {
if (_setters == null) {
_setters = _filterMap(
members,
@@ -470,7 +516,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _setters;
}
- Map<String, VariableMirror> get variables {
+ Map<Symbol, VariableMirror> get variables {
if (_variables == null) {
_variables = _filterMap(
members,
@@ -479,10 +525,10 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _variables;
}
- Map<String, MethodMirror> constructors;
- Map<String, TypeVariableMirror> typeVariables;
+ Map<Symbol, MethodMirror> constructors;
+ Map<Symbol, TypeVariableMirror> typeVariables;
- Map<String, TypeMirror> get typeArguments {
+ Map<Symbol, TypeMirror> get typeArguments {
throw new UnimplementedError(
'ClassMirror.typeArguments is not implemented');
}
@@ -499,9 +545,9 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
String toString() => "ClassMirror on '$simpleName'";
- Future<InstanceMirror> newInstanceAsync(String constructorName,
+ Future<InstanceMirror> newInstanceAsync(Symbol constructorName,
List positionalArguments,
- [Map<String,dynamic> namedArguments]) {
+ [Map<Symbol, dynamic> namedArguments]) {
if (namedArguments != null) {
throw new UnimplementedError(
'named argument support is not implemented');
@@ -514,7 +560,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
try {
completer.complete(
- _invokeConstructor(this, constructorName, positionalArguments));
+ _invokeConstructor(this, _n(constructorName), positionalArguments));
} catch (exception) {
completer.completeError(exception);
}
@@ -576,21 +622,24 @@ class _LazyTypeVariableMirror {
return owner.typeVariables[_variableName];
}
+ // TODO(ahe): Symbol?
final String _variableName;
final _LazyTypeMirror _owner;
}
class _LocalTypeVariableMirrorImpl extends _LocalMirrorImpl
implements TypeVariableMirror {
- _LocalTypeVariableMirrorImpl(this.simpleName,
+ _LocalTypeVariableMirrorImpl(String simpleName,
this._owner,
- this._upperBound) {}
- final String simpleName;
+ this._upperBound)
+ : this.simpleName = _s(simpleName);
+
+ final Symbol simpleName;
- String _qualifiedName = null;
- String get qualifiedName {
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
@@ -626,15 +675,17 @@ class _LocalTypeVariableMirrorImpl extends _LocalMirrorImpl
class _LocalTypedefMirrorImpl extends _LocalMirrorImpl
implements TypedefMirror {
- _LocalTypedefMirrorImpl(this.simpleName,
+ _LocalTypedefMirrorImpl(String simpleName,
this._owner,
- this._referent) {}
- final String simpleName;
+ this._referent)
+ : this.simpleName = _s(simpleName);
+
+ final Symbol simpleName;
- String _qualifiedName = null;
- String get qualifiedName {
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
@@ -669,26 +720,30 @@ class _LocalTypedefMirrorImpl extends _LocalMirrorImpl
class _LazyLibraryMirror {
- _LazyLibraryMirror(this.libraryName) {}
+ _LazyLibraryMirror(String libraryName)
+ : this.libraryName = _s(libraryName);
LibraryMirror resolve(MirrorSystem mirrors) {
return mirrors.libraries[libraryName];
}
- final String libraryName;
+ final Symbol libraryName;
}
class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
implements LibraryMirror {
_LocalLibraryMirrorImpl(ref,
- this.simpleName,
+ String simpleName,
this.url,
- this.members) : super(ref) {}
+ Map<String, Mirror> members)
+ : this.simpleName = _s(simpleName),
+ this.members = _convertStringToSymbolMap(members),
+ super(ref);
- final String simpleName;
+ final Symbol simpleName;
// The simple name and the qualified name are the same for a library.
- String get qualifiedName => simpleName;
+ Symbol get qualifiedName => simpleName;
// Always null for libraries.
final DeclarationMirror owner = null;
@@ -705,15 +760,15 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
}
final String url;
- final Map<String, Mirror> members;
+ final Map<Symbol, Mirror> members;
- Map<String, ClassMirror> _classes = null;
- Map<String, MethodMirror> _functions = null;
- Map<String, MethodMirror> _getters = null;
- Map<String, MethodMirror> _setters = null;
- Map<String, VariableMirror> _variables = null;
+ Map<Symbol, ClassMirror> _classes = null;
+ Map<Symbol, MethodMirror> _functions = null;
+ Map<Symbol, MethodMirror> _getters = null;
+ Map<Symbol, MethodMirror> _setters = null;
+ Map<Symbol, VariableMirror> _variables = null;
- Map<String, ClassMirror> get classes {
+ Map<Symbol, ClassMirror> get classes {
if (_classes == null) {
_classes = _filterMap(members,
(key, value) => (value is ClassMirror));
@@ -721,7 +776,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
return _classes;
}
- Map<String, MethodMirror> get functions {
+ Map<Symbol, MethodMirror> get functions {
if (_functions == null) {
_functions = _filterMap(members,
(key, value) => (value is MethodMirror));
@@ -729,7 +784,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
return _functions;
}
- Map<String, MethodMirror> get getters {
+ Map<Symbol, MethodMirror> get getters {
if (_getters == null) {
_getters = _filterMap(functions,
(key, value) => (value.isGetter));
@@ -737,7 +792,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
return _getters;
}
- Map<String, MethodMirror> get setters {
+ Map<Symbol, MethodMirror> get setters {
if (_setters == null) {
_setters = _filterMap(functions,
(key, value) => (value.isSetter));
@@ -745,7 +800,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
return _setters;
}
- Map<String, VariableMirror> get variables {
+ Map<Symbol, VariableMirror> get variables {
if (_variables == null) {
_variables = _filterMap(members,
(key, value) => (value is VariableMirror));
@@ -758,7 +813,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
class _LocalMethodMirrorImpl extends _LocalMirrorImpl
implements MethodMirror {
- _LocalMethodMirrorImpl(this.simpleName,
+ _LocalMethodMirrorImpl(String simpleName,
this._owner,
this.parameters,
this._returnType,
@@ -770,14 +825,15 @@ class _LocalMethodMirrorImpl extends _LocalMirrorImpl
this.isConstConstructor,
this.isGenerativeConstructor,
this.isRedirectingConstructor,
- this.isFactoryConstructor) {}
+ this.isFactoryConstructor)
+ : this.simpleName = _s(simpleName);
- final String simpleName;
+ final Symbol simpleName;
- String _qualifiedName = null;
- String get qualifiedName {
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
@@ -826,7 +882,7 @@ class _LocalMethodMirrorImpl extends _LocalMirrorImpl
final bool isConstructor;
var _constructorName = null;
- String get constructorName {
+ Symbol get constructorName {
if (_constructorName == null) {
if (!isConstructor) {
_constructorName = '';
@@ -856,18 +912,19 @@ class _LocalMethodMirrorImpl extends _LocalMirrorImpl
class _LocalVariableMirrorImpl extends _LocalMirrorImpl
implements VariableMirror {
- _LocalVariableMirrorImpl(this.simpleName,
+ _LocalVariableMirrorImpl(String simpleName,
this._owner,
this._type,
this.isStatic,
- this.isFinal) {}
+ this.isFinal)
+ : this.simpleName = _s(simpleName);
- final String simpleName;
+ final Symbol simpleName;
- String _qualifiedName = null;
- String get qualifiedName {
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
« no previous file with comments | « no previous file | dart/runtime/lib/symbol_patch.dart » ('j') | dart/runtime/lib/symbol_patch.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698