Index: lib/compiler/implementation/compiler.dart |
diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart |
index e80dbaaf4351193c931f2b83f5ce8f27e36180bd..efa2ec3cb088655793375348d9e9658ca50a8a9b 100644 |
--- a/lib/compiler/implementation/compiler.dart |
+++ b/lib/compiler/implementation/compiler.dart |
@@ -131,9 +131,11 @@ abstract class Compiler implements DiagnosticListener { |
ClassElement nullClass; |
ClassElement listClass; |
ClassElement mapClass; |
+ ClassElement invocationMirrorClass; |
Element assertMethod; |
Element identicalFunction; |
Element functionApplyMethod; |
+ Element invokeOnMethod; |
Element get currentElement => _currentElement; |
withCurrentElement(Element element, f()) { |
@@ -177,12 +179,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; |
@@ -324,6 +329,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) { |
@@ -375,6 +385,8 @@ abstract class Compiler implements DiagnosticListener { |
functionClass = lookupSpecialClass(const SourceString('Function')); |
listClass = lookupSpecialClass(const SourceString('List')); |
mapClass = lookupSpecialClass(const SourceString('Map')); |
+ invocationMirrorClass = |
+ lookupSpecialClass(const SourceString('InvocationMirror')); |
closureClass = lookupSpecialClass(const SourceString('Closure')); |
dynamicClass = lookupSpecialClass(const SourceString('Dynamic_')); |
nullClass = lookupSpecialClass(const SourceString('Null')); |
@@ -407,6 +419,9 @@ abstract class Compiler implements DiagnosticListener { |
functionClass.ensureResolved(this); |
functionApplyMethod = |
functionClass.lookupLocalMember(const SourceString('apply')); |
+ invocationMirrorClass.ensureResolved(this); |
+ invokeOnMethod = |
+ invocationMirrorClass.lookupLocalMember(const SourceString('invokeOn')); |
} |
void loadCoreImplLibrary() { |