| Index: runtime/lib/mirrors_impl.dart
|
| diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
|
| index 310c9f7b48b997589ce658ab2ed42fdff2009365..cf5c54a781f1d0b5d8c68267463b5b3255da46f8 100644
|
| --- a/runtime/lib/mirrors_impl.dart
|
| +++ b/runtime/lib/mirrors_impl.dart
|
| @@ -355,6 +355,33 @@ class _LocalInstanceMirror extends _LocalObjectMirror
|
| return reflect(this._invoke(_reflectee, _n(memberName), arguments, names));
|
| }
|
|
|
| + static Map _getFieldClosures = new Map.identity();
|
| + static Map _setFieldClosures = new Map.identity();
|
| +
|
| + InstanceMirror getField(Symbol memberName) {
|
| + var f = _getFieldClosures[memberName];
|
| + if (f == null) {
|
| + f = _makeGetter(_n(memberName), _ScratchClass);
|
| + _getFieldClosures[memberName] = f;
|
| + }
|
| + return reflect(f(_reflectee));
|
| + }
|
| +
|
| + InstanceMirror setField(Symbol memberName, value) {
|
| + var f = _setFieldClosures[memberName];
|
| + if (f == null) {
|
| + f = _makeSetter(_n(memberName), _ScratchClass);
|
| + _setFieldClosures[memberName] = f;
|
| + }
|
| + return reflect(f(_reflectee, value));
|
| + }
|
| +
|
| + static _makeGetter(selector, scratchClass)
|
| + native "Mirrors_makeGetter";
|
| +
|
| + static _makeSetter(selector, scratchClass)
|
| + native "Mirrors_makeSetter";
|
| +
|
| _invoke(reflectee, functionName, arguments, argumentNames)
|
| native 'InstanceMirror_invoke';
|
|
|
| @@ -368,6 +395,8 @@ class _LocalInstanceMirror extends _LocalObjectMirror
|
| native 'InstanceMirror_computeType';
|
| }
|
|
|
| +class _ScratchClass {}
|
| +
|
| class _LocalClosureMirror extends _LocalInstanceMirror
|
| implements ClosureMirror {
|
| _LocalClosureMirror(reflectee) : super(reflectee);
|
|
|