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

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: Fix various issues discovered during own review. 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
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..8af4ff8c35bf5aa899b27155add88dd948794c0b 100644
--- a/dart/runtime/lib/mirrors_impl.dart
+++ b/dart/runtime/lib/mirrors_impl.dart
@@ -9,20 +9,39 @@ bool _isSimpleValue(var value) {
return (value == null || value is num || value is String || value is bool);
}
-Map _filterMap(Map old_map, bool filter(key, value)) {
- Map new_map = new Map();
+Map _filterMap(Map<Symbol, dynamic> old_map, bool filter(Symbol key, value)) {
+ Map new_map = new Map<Symbol, dynamic>();
old_map.forEach((key, value) {
- if (filter(key, value)) {
- new_map[key] = value;
- }
- });
+ if (filter(key, value)) {
+ new_map[key] = value;
+ }
+ });
return new_map;
}
+String _n(Symbol symbol) => _collection_dev.Symbol.getName(symbol);
+
+Symbol _s(String name) {
+ if (name == null) return null;
+ return new _collection_dev.Symbol.unvalidated(name);
+}
+
+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 +50,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 +63,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)
Søren Gjesse 2013/04/15 14:08:31 Four space indent - more below.
ahe 2013/04/15 14:29:55 Done.
+ : _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 +161,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');
@@ -155,29 +177,29 @@ Future<InstanceMirror> invokeAsync(String memberName,
Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
try {
completer.complete(
- _invoke(this, memberName, positionalArguments));
+ _invoke(this, _n(memberName), positionalArguments));
} catch (exception, s) {
completer.completeError(exception, s);
}
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 +326,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 +346,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,13 +356,15 @@ 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) {
- if (typeName == 'dynamic') {
+ if (typeName == const Symbol('dynamic')) {
return mirrors.dynamicType;
- } else if (typeName == 'void') {
+ } else if (typeName == const Symbol('void')) {
return mirrors.voidType;
} else {
throw new UnimplementedError(
@@ -355,35 +379,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;
}
@@ -396,7 +419,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
return _owner;
}
- bool get isPrivate => simpleName.startsWith('_');
+ bool get isPrivate => _n(simpleName).startsWith('_');
final bool isTopLevel = true;
@@ -436,14 +459,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 +475,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 +484,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 +493,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 +502,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 +522,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 +537,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);
}
@@ -569,28 +592,31 @@ class _LocalFunctionTypeMirrorImpl extends _LocalClassMirrorImpl
class _LazyTypeVariableMirror {
- _LazyTypeVariableMirror(this._variableName, this._owner) {}
+ _LazyTypeVariableMirror(String variableName, this._owner)
+ : this._variableName = _s(variableName);
TypeVariableMirror resolve(MirrorSystem mirrors) {
ClassMirror owner = _owner.resolve(mirrors);
return owner.typeVariables[_variableName];
}
- final String _variableName;
+ final Symbol _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);
- String _qualifiedName = null;
- String get qualifiedName {
+ final Symbol simpleName;
+
+ Symbol _qualifiedName = null;
+ Symbol get qualifiedName {
if (_qualifiedName == null) {
- _qualifiedName = '${owner.qualifiedName}.${simpleName}';
+ _qualifiedName = _computeQualifiedName(owner, simpleName);
}
return _qualifiedName;
}
@@ -626,15 +652,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 +697,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 +737,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 +753,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 +761,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 +769,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 +777,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 +790,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 +802,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;
}
@@ -791,7 +824,8 @@ class _LocalMethodMirrorImpl extends _LocalMirrorImpl
}
bool get isPrivate {
- return simpleName.startsWith('_') || constructorName.startsWith('_');
+ return _n(simpleName).startsWith('_') ||
+ _n(constructorName).startsWith('_');
}
bool get isTopLevel => owner is LibraryMirror;
@@ -825,21 +859,21 @@ class _LocalMethodMirrorImpl extends _LocalMirrorImpl
final bool isSetter;
final bool isConstructor;
- var _constructorName = null;
- String get constructorName {
+ Symbol _constructorName = null;
+ Symbol get constructorName {
if (_constructorName == null) {
if (!isConstructor) {
- _constructorName = '';
+ _constructorName = _s('');
} else {
- var parts = simpleName.split('.');
+ var parts = _n(simpleName).split('.');
if (parts.length > 2) {
throw new MirrorException(
'Internal error in MethodMirror.constructorName: '
'malformed name <$simpleName>');
} else if (parts.length == 2) {
- _constructorName = parts[1];
+ _constructorName = _s(parts[1]);
} else {
- _constructorName = '';
+ _constructorName = _s('');
}
}
}
@@ -856,18 +890,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;
}
@@ -881,7 +916,7 @@ class _LocalVariableMirrorImpl extends _LocalMirrorImpl
}
bool get isPrivate {
- return simpleName.startsWith('_');
+ return _n(simpleName).startsWith('_');
}
bool get isTopLevel {

Powered by Google App Engine
This is Rietveld 408576698