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

Unified Diff: pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart

Issue 2623053004: Fix noSuchMethod handling of methods that are also extension methods. Fix noSuchMethod handling of … (Closed)
Patch Set: respond to code review comments and mission creap Created 3 years, 11 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: pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
index 856009661428ad901676bb45967c5ab67bbcd2e4..5e03059edeec9e9887cb5fd814e768c672807659 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
@@ -31,7 +31,8 @@ InstanceMirror reflect(reflectee) {
TypeMirror reflectType(Type key) {
var unwrapped = _unwrap(key);
- var property = JS('', 'Object.getOwnPropertyDescriptor(#, #)', unwrapped, _typeMirror);
+ var property =
+ JS('', 'Object.getOwnPropertyDescriptor(#, #)', unwrapped, _typeMirror);
if (property != null) {
return JS('', '#.value', property);
}
@@ -85,7 +86,24 @@ dynamic _getMember(Symbol symbol) {
if (privateSymbol != null) {
return privateSymbol;
}
- return getName(symbol);
+ var name = getName(symbol);
Jacob 2017/01/21 01:11:30 only relevant change in this file. Rest is just th
+ // TODO(jacobr): this code is duplicated in code_generator.dart
+ switch (name) {
+ case '[]':
+ name = '_get';
+ break;
+ case '[]=':
+ name = '_set';
+ break;
+ case 'unary-':
+ name = '_negate';
+ break;
+ case 'constructor':
+ case 'prototype':
+ name = '_$name';
+ break;
+ }
+ return name;
}
String _getNameForESSymbol(member) {
@@ -184,8 +202,7 @@ dynamic _unwrap(obj) => JS('', '#.unwrapType(#)', _dart, obj);
dynamic _wrap(obj) => JS('', '#.wrapType(#)', _dart, obj);
-dynamic _runtimeType(obj) =>
- _wrap(JS('', '#.getReifiedType(#)', _dart, obj));
+dynamic _runtimeType(obj) => _wrap(JS('', '#.getReifiedType(#)', _dart, obj));
_unimplemented(Type t, Invocation i) {
throw new UnimplementedError('$t.${getName(i.memberName)} unimplemented');
@@ -205,23 +222,18 @@ class JsMirror implements Mirror {
}
}
-class JsCombinatorMirror extends JsMirror implements CombinatorMirror {
-}
+class JsCombinatorMirror extends JsMirror implements CombinatorMirror {}
-class JsDeclarationMirror extends JsMirror implements DeclarationMirror {
-}
+class JsDeclarationMirror extends JsMirror implements DeclarationMirror {}
-class JsIsolateMirror extends JsMirror implements IsolateMirror {
-}
+class JsIsolateMirror extends JsMirror implements IsolateMirror {}
-class JsLibraryDependencyMirror extends JsMirror implements LibraryDependencyMirror {
-}
+class JsLibraryDependencyMirror extends JsMirror
+ implements LibraryDependencyMirror {}
-class JsObjectMirror extends JsMirror implements ObjectMirror {
-}
+class JsObjectMirror extends JsMirror implements ObjectMirror {}
class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
-
// Reflected object
final reflectee;
bool get hasReflectee => true;
@@ -235,7 +247,7 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
JsInstanceMirror._(this.reflectee);
- bool operator==(Object other) {
+ bool operator ==(Object other) {
return (other is JsInstanceMirror) && identical(reflectee, other.reflectee);
}
@@ -246,8 +258,8 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
}
// Returns a String for public members or an ES6 symbol for private members.
- _getAccessor(dynamic reflectee, Symbol symbol, [List<dynamic> args,
- Map<Symbol, dynamic> namedArgs]) {
+ _getAccessor(dynamic reflectee, Symbol symbol,
+ [List<dynamic> args, Map<Symbol, dynamic> namedArgs]) {
return _getMember(symbol);
}
@@ -280,8 +292,7 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
class JsClosureMirror extends JsInstanceMirror implements ClosureMirror {
JsClosureMirror._(reflectee) : super._(reflectee);
- InstanceMirror apply(List<dynamic> args,
- [Map<Symbol, dynamic> namedArgs]) {
+ InstanceMirror apply(List<dynamic> args, [Map<Symbol, dynamic> namedArgs]) {
if (namedArgs != null) {
args = new List.from(args);
args.add(_toJsMap(namedArgs));
@@ -310,13 +321,14 @@ class JsClassMirror extends JsMirror implements ClassMirror {
var unwrapped = _unwrap(_cls);
// Only get metadata directly embedded on this class, not its
// superclasses.
- var fn = JS('Function',
- 'Object.hasOwnProperty.call(#, dart.metadata) ? #[dart.metadata] : null',
- unwrapped, unwrapped);
+ var fn = JS(
+ 'Function',
+ 'Object.hasOwnProperty.call(#, dart.metadata) ? #[dart.metadata] : null',
+ unwrapped,
+ unwrapped);
_metadata = (fn == null)
? const <InstanceMirror>[]
- : new List<InstanceMirror>.unmodifiable(
- fn().map((i) => reflect(i)));
+ : new List<InstanceMirror>.unmodifiable(fn().map((i) => reflect(i)));
}
return _metadata;
}
@@ -330,14 +342,16 @@ class JsClassMirror extends JsMirror implements ClassMirror {
var constructors = _getConstructors(unwrapped);
constructors.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._constructor(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._constructor(this, symbol, ft);
});
if (constructors.isEmpty) {
// Add a default
var name = 'new';
var ft = _defaultConstructorType(_unwrap(_cls));
var symbol = new Symbol(name);
- _declarations[symbol] = new JsMethodMirror._constructor(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._constructor(this, symbol, ft);
}
var fields = _getFields(unwrapped);
fields.forEach((symbol, t) {
@@ -346,24 +360,28 @@ class JsClassMirror extends JsMirror implements ClassMirror {
metadata = t.skip(1).toList();
t = t[0];
}
- _declarations[symbol] = new JsVariableMirror._(symbol, _wrap(t), metadata);
+ _declarations[symbol] =
+ new JsVariableMirror._(symbol, _wrap(t), metadata);
});
var methods = _getMethods(unwrapped);
methods.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var getters = _getGetters(unwrapped);
getters.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var setters = _getSetters(unwrapped);
setters.forEach((symbol, ft) {
var name = getName(symbol) + '=';
// Create a separate symbol for the setter.
symbol = new _internal.Symbol.es6(name, _getESSymbol(symbol));
- _declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var staticFields = _getStaticFields(unwrapped);
staticFields.forEach((symbol, t) {
@@ -373,24 +391,29 @@ class JsClassMirror extends JsMirror implements ClassMirror {
metadata = t.skip(1).toList();
t = t[0];
}
- _declarations[symbol] = new JsVariableMirror._(symbol, _wrap(t), metadata);
+ _declarations[symbol] =
+ new JsVariableMirror._(symbol, _wrap(t), metadata);
});
var statics = _getStatics(unwrapped);
statics.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._staticMethod(this, symbol, ft);
});
var staticGetters = _getStaticGetters(unwrapped);
staticGetters.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._staticMethod(this, symbol, ft);
});
var staticSetters = _getStaticSetters(unwrapped);
staticSetters.forEach((symbol, ft) {
var name = getName(symbol);
- _declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
+ _declarations[symbol] =
+ new JsMethodMirror._staticMethod(this, symbol, ft);
});
- _declarations = new Map<Symbol, DeclarationMirror>.unmodifiable(_declarations);
+ _declarations =
+ new Map<Symbol, DeclarationMirror>.unmodifiable(_declarations);
}
return _declarations;
}
@@ -401,9 +424,10 @@ class JsClassMirror extends JsMirror implements ClassMirror {
simpleName = new Symbol(JS('String', '#.name', _unwrap(cls))) {
var typeArgs = _getGenericArgs(_unwrap(cls));
if (typeArgs == null) {
- _typeArguments = const[];
+ _typeArguments = const [];
} else {
- _typeArguments = new List.unmodifiable(typeArgs.map((t) => reflectType(_wrap(t))));
+ _typeArguments =
+ new List.unmodifiable(typeArgs.map((t) => reflectType(_wrap(t))));
}
}
@@ -413,8 +437,8 @@ class JsClassMirror extends JsMirror implements ClassMirror {
var name = getName(constructorName);
assert(namedArgs == null || namedArgs.isEmpty);
var instance = (name == 'new' || name == '')
- ? JS('', 'new #(...#)', _unwrap(_cls), args)
- : JS('', 'new (#.#)(...#)', _unwrap(_cls), name, args);
+ ? JS('', 'new #(...#)', _unwrap(_cls), args)
+ : JS('', 'new (#.#)(...#)', _unwrap(_cls), name, args);
return reflect(instance);
}
@@ -445,7 +469,8 @@ class JsClassMirror extends JsMirror implements ClassMirror {
}
List<ClassMirror> get superinterfaces {
- _Lazy<List<Type>> interfaceThunk = JS('', '#[dart.implements]', _unwrap(_cls));
+ _Lazy<List<Type>> interfaceThunk =
+ JS('', '#[dart.implements]', _unwrap(_cls));
if (interfaceThunk == null) {
return [];
} else {
@@ -455,7 +480,9 @@ class JsClassMirror extends JsMirror implements ClassMirror {
}
bool get hasReflectedType => true;
- Type get reflectedType { return _cls; }
+ Type get reflectedType {
+ return _cls;
+ }
bool get isOriginalDeclaration => _raw == null;
@@ -467,7 +494,8 @@ class JsClassMirror extends JsMirror implements ClassMirror {
if (_raw == null) {
return this;
}
- throw new UnimplementedError("ClassMirror.originalDeclaration unimplemented");
+ throw new UnimplementedError(
+ "ClassMirror.originalDeclaration unimplemented");
}
ClassMirror get superclass {
@@ -490,7 +518,7 @@ class JsClassMirror extends JsMirror implements ClassMirror {
}
if (mixins.length > 1) {
throw new UnsupportedError("ClassMirror.mixin not yet supported for "
- "classes ($_cls) with multiple mixins");
+ "classes ($_cls) with multiple mixins");
}
_mixin = reflectType(_wrap(mixins[0]));
return _mixin;
@@ -546,18 +574,27 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
Symbol get simpleName => _symbol;
JsMethodMirror._constructor(JsClassMirror cls, Symbol symbol, ftype)
- : _symbol = symbol, _name = getName(symbol), isConstructor = true, isStatic = false {
- _createParameterMirrorList(ftype);
+ : _symbol = symbol,
+ _name = getName(symbol),
+ isConstructor = true,
+ isStatic = false {
+ _createParameterMirrorList(ftype);
}
JsMethodMirror._instanceMethod(JsClassMirror cls, Symbol symbol, ftype)
- : _symbol = symbol, _name = getName(symbol), isConstructor = false, isStatic = false {
- _createParameterMirrorList(ftype);
+ : _symbol = symbol,
+ _name = getName(symbol),
+ isConstructor = false,
+ isStatic = false {
+ _createParameterMirrorList(ftype);
}
JsMethodMirror._staticMethod(JsClassMirror cls, Symbol symbol, ftype)
- : _symbol = symbol, _name = getName(symbol), isConstructor = false, isStatic = true {
- _createParameterMirrorList(ftype);
+ : _symbol = symbol,
+ _name = getName(symbol),
+ isConstructor = false,
+ isStatic = true {
+ _createParameterMirrorList(ftype);
}
// TODO(vsm): Support named constructors.
@@ -600,7 +637,8 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
var type = args[i];
var metadata = ftype.metadata[i];
// TODO(vsm): Recover the param name.
- var param = new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
+ var param =
+ new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
params[i] = param;
}
@@ -608,7 +646,8 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
var type = opts[i];
var metadata = ftype.metadata[args.length + i];
// TODO(vsm): Recover the param name.
- var param = new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
+ var param =
+ new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
params[i + args.length] = param;
}

Powered by Google App Engine
This is Rietveld 408576698