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

Side by Side Diff: lib/compiler/implementation/compiler.dart

Issue 11336011: Revert "Change signature of noSuchMethod to take an InvocationMirror." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart2js; 5 part of dart2js;
6 6
7 /** 7 /**
8 * If true, print a warning for each method that was resolved, but not 8 * If true, print a warning for each method that was resolved, but not
9 * compiled. 9 * compiled.
10 */ 10 */
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 ClassElement dynamicClass; 121 ClassElement dynamicClass;
122 ClassElement boolClass; 122 ClassElement boolClass;
123 ClassElement numClass; 123 ClassElement numClass;
124 ClassElement intClass; 124 ClassElement intClass;
125 ClassElement doubleClass; 125 ClassElement doubleClass;
126 ClassElement stringClass; 126 ClassElement stringClass;
127 ClassElement functionClass; 127 ClassElement functionClass;
128 ClassElement nullClass; 128 ClassElement nullClass;
129 ClassElement listClass; 129 ClassElement listClass;
130 ClassElement mapClass; 130 ClassElement mapClass;
131 ClassElement jsInvocationMirrorClass;
132 Element assertMethod; 131 Element assertMethod;
133 Element identicalFunction; 132 Element identicalFunction;
134 Element functionApplyMethod; 133 Element functionApplyMethod;
135 Element invokeOnMethod;
136 134
137 Element get currentElement => _currentElement; 135 Element get currentElement => _currentElement;
138 withCurrentElement(Element element, f()) { 136 withCurrentElement(Element element, f()) {
139 Element old = currentElement; 137 Element old = currentElement;
140 _currentElement = element; 138 _currentElement = element;
141 try { 139 try {
142 return f(); 140 return f();
143 } on SpannableAssertionFailure catch (ex) { 141 } on SpannableAssertionFailure catch (ex) {
144 if (!hasCrashed) { 142 if (!hasCrashed) {
145 SourceSpan span = spanFromSpannable(ex.node); 143 SourceSpan span = spanFromSpannable(ex.node);
(...skipping 30 matching lines...) Expand all
176 closureMapping.ClosureTask closureToClassMapper; 174 closureMapping.ClosureTask closureToClassMapper;
177 TypeCheckerTask checker; 175 TypeCheckerTask checker;
178 ti.TypesTask typesTask; 176 ti.TypesTask typesTask;
179 Backend backend; 177 Backend backend;
180 ConstantHandler constantHandler; 178 ConstantHandler constantHandler;
181 EnqueueTask enqueuer; 179 EnqueueTask enqueuer;
182 180
183 static const SourceString MAIN = const SourceString('main'); 181 static const SourceString MAIN = const SourceString('main');
184 static const SourceString CALL_OPERATOR_NAME = const SourceString('call'); 182 static const SourceString CALL_OPERATOR_NAME = const SourceString('call');
185 static const SourceString NO_SUCH_METHOD = const SourceString('noSuchMethod'); 183 static const SourceString NO_SUCH_METHOD = const SourceString('noSuchMethod');
186 static const int NO_SUCH_METHOD_ARG_COUNT = 1;
187 static const SourceString INVOKE_ON = const SourceString('invokeOn');
188 static const SourceString RUNTIME_TYPE = const SourceString('runtimeType'); 184 static const SourceString RUNTIME_TYPE = const SourceString('runtimeType');
189 static const SourceString START_ROOT_ISOLATE = 185 static const SourceString START_ROOT_ISOLATE =
190 const SourceString('startRootIsolate'); 186 const SourceString('startRootIsolate');
191 bool enabledNoSuchMethod = false; 187 bool enabledNoSuchMethod = false;
192 bool enabledRuntimeType = false; 188 bool enabledRuntimeType = false;
193 bool enabledFunctionApply = false; 189 bool enabledFunctionApply = false;
194 bool enabledInvokeOn = false;
195 190
196 Stopwatch progress; 191 Stopwatch progress;
197 192
198 static const int PHASE_SCANNING = 0; 193 static const int PHASE_SCANNING = 0;
199 static const int PHASE_RESOLVING = 1; 194 static const int PHASE_RESOLVING = 1;
200 static const int PHASE_COMPILING = 2; 195 static const int PHASE_COMPILING = 2;
201 int phase; 196 int phase;
202 197
203 bool compilationFailed = false; 198 bool compilationFailed = false;
204 199
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 // TODO(ahe): Move this method to Enqueuer. 335 // TODO(ahe): Move this method to Enqueuer.
341 if (enabledNoSuchMethod) return; 336 if (enabledNoSuchMethod) return;
342 if (identical(element.getEnclosingClass(), objectClass)) { 337 if (identical(element.getEnclosingClass(), objectClass)) {
343 enqueuer.resolution.registerDynamicInvocationOf(element); 338 enqueuer.resolution.registerDynamicInvocationOf(element);
344 return; 339 return;
345 } 340 }
346 enabledNoSuchMethod = true; 341 enabledNoSuchMethod = true;
347 Selector selector = new Selector.noSuchMethod(); 342 Selector selector = new Selector.noSuchMethod();
348 enqueuer.resolution.registerInvocation(NO_SUCH_METHOD, selector); 343 enqueuer.resolution.registerInvocation(NO_SUCH_METHOD, selector);
349 enqueuer.codegen.registerInvocation(NO_SUCH_METHOD, selector); 344 enqueuer.codegen.registerInvocation(NO_SUCH_METHOD, selector);
350
351 Element createInvocationMirrorElement =
352 findHelper(const SourceString('createInvocationMirror'));
353 enqueuer.resolution.addToWorkList(createInvocationMirrorElement);
354 enqueuer.codegen.addToWorkList(createInvocationMirrorElement);
355 } 345 }
356 346
357 void enableIsolateSupport(LibraryElement element) { 347 void enableIsolateSupport(LibraryElement element) {
358 // TODO(ahe): Move this method to Enqueuer. 348 // TODO(ahe): Move this method to Enqueuer.
359 isolateLibrary = element.patch; 349 isolateLibrary = element.patch;
360 enqueuer.resolution.addToWorkList(isolateLibrary.find(START_ROOT_ISOLATE)); 350 enqueuer.resolution.addToWorkList(isolateLibrary.find(START_ROOT_ISOLATE));
361 enqueuer.resolution.addToWorkList( 351 enqueuer.resolution.addToWorkList(
362 isolateLibrary.find(const SourceString('_currentIsolate'))); 352 isolateLibrary.find(const SourceString('_currentIsolate')));
363 enqueuer.resolution.addToWorkList( 353 enqueuer.resolution.addToWorkList(
364 isolateLibrary.find(const SourceString('_callInIsolate'))); 354 isolateLibrary.find(const SourceString('_callInIsolate')));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 } 386 }
397 objectClass = lookupSpecialClass(const SourceString('Object')); 387 objectClass = lookupSpecialClass(const SourceString('Object'));
398 boolClass = lookupSpecialClass(const SourceString('bool')); 388 boolClass = lookupSpecialClass(const SourceString('bool'));
399 numClass = lookupSpecialClass(const SourceString('num')); 389 numClass = lookupSpecialClass(const SourceString('num'));
400 intClass = lookupSpecialClass(const SourceString('int')); 390 intClass = lookupSpecialClass(const SourceString('int'));
401 doubleClass = lookupSpecialClass(const SourceString('double')); 391 doubleClass = lookupSpecialClass(const SourceString('double'));
402 stringClass = lookupSpecialClass(const SourceString('String')); 392 stringClass = lookupSpecialClass(const SourceString('String'));
403 functionClass = lookupSpecialClass(const SourceString('Function')); 393 functionClass = lookupSpecialClass(const SourceString('Function'));
404 listClass = lookupSpecialClass(const SourceString('List')); 394 listClass = lookupSpecialClass(const SourceString('List'));
405 mapClass = lookupSpecialClass(const SourceString('Map')); 395 mapClass = lookupSpecialClass(const SourceString('Map'));
406 jsInvocationMirrorClass =
407 lookupSpecialClass(const SourceString('JSInvocationMirror'));
408 closureClass = lookupSpecialClass(const SourceString('Closure')); 396 closureClass = lookupSpecialClass(const SourceString('Closure'));
409 dynamicClass = lookupSpecialClass(const SourceString('Dynamic_')); 397 dynamicClass = lookupSpecialClass(const SourceString('Dynamic_'));
410 nullClass = lookupSpecialClass(const SourceString('Null')); 398 nullClass = lookupSpecialClass(const SourceString('Null'));
411 types = new Types(this, dynamicClass); 399 types = new Types(this, dynamicClass);
412 if (!coreLibValid) { 400 if (!coreLibValid) {
413 cancel('core library does not contain required classes'); 401 cancel('core library does not contain required classes');
414 } 402 }
415 } 403 }
416 404
417 void scanBuiltinLibraries() { 405 void scanBuiltinLibraries() {
(...skipping 12 matching lines...) Expand all
430 addForeignFunctions(interceptorsLibrary); 418 addForeignFunctions(interceptorsLibrary);
431 419
432 assertMethod = jsHelperLibrary.find(const SourceString('assertHelper')); 420 assertMethod = jsHelperLibrary.find(const SourceString('assertHelper'));
433 identicalFunction = coreLibrary.find(const SourceString('identical')); 421 identicalFunction = coreLibrary.find(const SourceString('identical'));
434 422
435 initializeSpecialClasses(); 423 initializeSpecialClasses();
436 424
437 functionClass.ensureResolved(this); 425 functionClass.ensureResolved(this);
438 functionApplyMethod = 426 functionApplyMethod =
439 functionClass.lookupLocalMember(const SourceString('apply')); 427 functionClass.lookupLocalMember(const SourceString('apply'));
440 jsInvocationMirrorClass.ensureResolved(this);
441 invokeOnMethod = jsInvocationMirrorClass.lookupLocalMember(
442 const SourceString('invokeOn'));
443 } 428 }
444 429
445 void loadCoreImplLibrary() { 430 void loadCoreImplLibrary() {
446 Uri coreImplUri = new Uri.fromComponents(scheme: 'dart', path: 'coreimpl'); 431 Uri coreImplUri = new Uri.fromComponents(scheme: 'dart', path: 'coreimpl');
447 coreImplLibrary = libraryLoader.loadLibrary(coreImplUri, null, coreImplUri); 432 coreImplLibrary = libraryLoader.loadLibrary(coreImplUri, null, coreImplUri);
448 } 433 }
449 434
450 void importHelperLibrary(LibraryElement library) { 435 void importHelperLibrary(LibraryElement library) {
451 if (jsHelperLibrary != null) { 436 if (jsHelperLibrary != null) {
452 libraryLoader.importLibrary(library, jsHelperLibrary, null); 437 libraryLoader.importLibrary(library, jsHelperLibrary, null);
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 // TODO(johnniwinther): Use [spannable] and [message] to provide better 890 // TODO(johnniwinther): Use [spannable] and [message] to provide better
906 // information on assertion errors. 891 // information on assertion errors.
907 if (condition is Function){ 892 if (condition is Function){
908 condition = condition(); 893 condition = condition();
909 } 894 }
910 if (spannable == null || !condition) { 895 if (spannable == null || !condition) {
911 throw new SpannableAssertionFailure(spannable, message); 896 throw new SpannableAssertionFailure(spannable, message);
912 } 897 }
913 return true; 898 return true;
914 } 899 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698