Index: lib/compiler/implementation/compiler.dart |
diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart |
index 4d587cbccf17751bb32b95de3f3d8e7f06412087..0f5fa175133601bfff948f08cb1ba97eaa6bcd58 100644 |
--- a/lib/compiler/implementation/compiler.dart |
+++ b/lib/compiler/implementation/compiler.dart |
@@ -128,9 +128,11 @@ abstract class Compiler implements DiagnosticListener { |
ClassElement nullClass; |
ClassElement listClass; |
ClassElement mapClass; |
+ ClassElement jsInvocationMirrorClass; |
Element assertMethod; |
Element identicalFunction; |
Element functionApplyMethod; |
+ Element invokeOnMethod; |
Element get currentElement => _currentElement; |
withCurrentElement(Element element, f()) { |
@@ -181,12 +183,15 @@ abstract class Compiler implements DiagnosticListener { |
static const SourceString MAIN = const SourceString('main'); |
static const SourceString CALL_OPERATOR_NAME = const SourceString('call'); |
static const SourceString NO_SUCH_METHOD = const SourceString('noSuchMethod'); |
+ static const int NO_SUCH_METHOD_ARG_COUNT = 1; |
+ static const SourceString INVOKE_ON = const SourceString('invokeOn'); |
static const SourceString RUNTIME_TYPE = const SourceString('runtimeType'); |
static const SourceString START_ROOT_ISOLATE = |
const SourceString('startRootIsolate'); |
bool enabledNoSuchMethod = false; |
bool enabledRuntimeType = false; |
bool enabledFunctionApply = false; |
+ bool enabledInvokeOn = false; |
Stopwatch progress; |
@@ -343,6 +348,11 @@ abstract class Compiler implements DiagnosticListener { |
Selector selector = new Selector.noSuchMethod(); |
enqueuer.resolution.registerInvocation(NO_SUCH_METHOD, selector); |
enqueuer.codegen.registerInvocation(NO_SUCH_METHOD, selector); |
+ |
+ Element createInvocationMirrorElement = |
+ findHelper(const SourceString('createInvocationMirror')); |
+ enqueuer.resolution.addToWorkList(createInvocationMirrorElement); |
+ enqueuer.codegen.addToWorkList(createInvocationMirrorElement); |
} |
void enableIsolateSupport(LibraryElement element) { |
@@ -394,6 +404,8 @@ abstract class Compiler implements DiagnosticListener { |
functionClass = lookupSpecialClass(const SourceString('Function')); |
listClass = lookupSpecialClass(const SourceString('List')); |
mapClass = lookupSpecialClass(const SourceString('Map')); |
+ jsInvocationMirrorClass = |
+ lookupSpecialClass(const SourceString('JSInvocationMirror')); |
closureClass = lookupSpecialClass(const SourceString('Closure')); |
dynamicClass = lookupSpecialClass(const SourceString('Dynamic_')); |
nullClass = lookupSpecialClass(const SourceString('Null')); |
@@ -426,6 +438,9 @@ abstract class Compiler implements DiagnosticListener { |
functionClass.ensureResolved(this); |
functionApplyMethod = |
functionClass.lookupLocalMember(const SourceString('apply')); |
+ jsInvocationMirrorClass.ensureResolved(this); |
+ invokeOnMethod = jsInvocationMirrorClass.lookupLocalMember( |
+ const SourceString('invokeOn')); |
} |
void loadCoreImplLibrary() { |