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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/enqueue.dart

Issue 17599008: Stop passing the selector name separately to methods in the enqueuer. Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 5 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 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 class EnqueueTask extends CompilerTask { 7 class EnqueueTask extends CompilerTask {
8 final ResolutionEnqueuer resolution; 8 final ResolutionEnqueuer resolution;
9 final CodegenEnqueuer codegen; 9 final CodegenEnqueuer codegen;
10 10
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 } 288 }
289 } 289 }
290 processClass(cls); 290 processClass(cls);
291 for (Link<DartType> supertypes = cls.allSupertypes; 291 for (Link<DartType> supertypes = cls.allSupertypes;
292 !supertypes.isEmpty; supertypes = supertypes.tail) { 292 !supertypes.isEmpty; supertypes = supertypes.tail) {
293 processClass(supertypes.head.element); 293 processClass(supertypes.head.element);
294 } 294 }
295 }); 295 });
296 } 296 }
297 297
298 void registerNewSelector(SourceString name, 298 void registerNewSelector(Selector selector,
299 Selector selector,
300 Map<SourceString, Set<Selector>> selectorsMap) { 299 Map<SourceString, Set<Selector>> selectorsMap) {
301 if (name != selector.name) { 300 SourceString name = selector.name;
302 String message = "$name != ${selector.name} (${selector.kind})";
303 compiler.internalError("Wrong selector name: $message.");
304 }
305 Set<Selector> selectors = 301 Set<Selector> selectors =
306 selectorsMap.putIfAbsent(name, () => new Set<Selector>()); 302 selectorsMap.putIfAbsent(name, () => new Set<Selector>());
307 if (!selectors.contains(selector)) { 303 if (!selectors.contains(selector)) {
308 selectors.add(selector); 304 selectors.add(selector);
309 handleUnseenSelector(name, selector); 305 handleUnseenSelector(name, selector);
310 } 306 }
311 } 307 }
312 308
313 void registerInvocation(SourceString methodName, Selector selector) { 309 void registerInvocation(Selector selector) {
314 task.measure(() { 310 task.measure(() {
315 registerNewSelector(methodName, selector, universe.invokedNames); 311 registerNewSelector(selector, universe.invokedNames);
316 }); 312 });
317 } 313 }
318 314
319 void registerInvokedGetter(SourceString getterName, Selector selector) { 315 void registerInvokedGetter(Selector selector) {
320 task.measure(() { 316 task.measure(() {
321 registerNewSelector(getterName, selector, universe.invokedGetters); 317 registerNewSelector(selector, universe.invokedGetters);
322 }); 318 });
323 } 319 }
324 320
325 void registerInvokedSetter(SourceString setterName, Selector selector) { 321 void registerInvokedSetter(Selector selector) {
326 task.measure(() { 322 task.measure(() {
327 registerNewSelector(setterName, selector, universe.invokedSetters); 323 registerNewSelector(selector, universe.invokedSetters);
328 }); 324 });
329 } 325 }
330 326
331 /// Called when [:const Symbol(name):] is seen. 327 /// Called when [:const Symbol(name):] is seen.
332 void registerConstSymbol(String name, TreeElements elements) { 328 void registerConstSymbol(String name, TreeElements elements) {
333 // If dart:mirrors is loaded, a const symbol may be used to call a 329 // If dart:mirrors is loaded, a const symbol may be used to call a
334 // static/top-level method or accessor, instantiate a class, call 330 // static/top-level method or accessor, instantiate a class, call
335 // an instance method or accessor with the given name. 331 // an instance method or accessor with the given name.
336 if (!compiler.mirrorsEnabled) return; 332 if (!compiler.mirrorsEnabled) return;
337 333
(...skipping 19 matching lines...) Expand all
357 } else if (element.impliesType()) { 353 } else if (element.impliesType()) {
358 // Don't enqueue classes, typedefs, and type variables. 354 // Don't enqueue classes, typedefs, and type variables.
359 } else if (Elements.isStaticOrTopLevel(element)) { 355 } else if (Elements.isStaticOrTopLevel(element)) {
360 registerStaticUse(element.declaration); 356 registerStaticUse(element.declaration);
361 } else if (element.isInstanceMember()) { 357 } else if (element.isInstanceMember()) {
362 if (element.isFunction()) { 358 if (element.isFunction()) {
363 int arity = 359 int arity =
364 element.asFunctionElement().requiredParameterCount(compiler); 360 element.asFunctionElement().requiredParameterCount(compiler);
365 Selector selector = 361 Selector selector =
366 new Selector.call(element.name, element.getLibrary(), arity); 362 new Selector.call(element.name, element.getLibrary(), arity);
367 registerInvocation(element.name, selector); 363 registerInvocation(selector);
368 } else if (element.isSetter()) { 364 } else if (element.isSetter()) {
369 Selector selector = 365 Selector selector =
370 new Selector.setter(element.name, element.getLibrary()); 366 new Selector.setter(element.name, element.getLibrary());
371 registerInvokedSetter(element.name, selector); 367 registerInvokedSetter(selector);
372 } else if (element.isGetter()) { 368 } else if (element.isGetter()) {
373 Selector selector = 369 Selector selector =
374 new Selector.getter(element.name, element.getLibrary()); 370 new Selector.getter(element.name, element.getLibrary());
375 registerInvokedGetter(element.name, selector); 371 registerInvokedGetter(selector);
376 } else if (element.isField()) { 372 } else if (element.isField()) {
377 Selector selector = 373 Selector selector =
378 new Selector.setter(element.name, element.getLibrary()); 374 new Selector.setter(element.name, element.getLibrary());
379 registerInvokedSetter(element.name, selector); 375 registerInvokedSetter(selector);
380 selector = new Selector.getter(element.name, element.getLibrary()); 376 selector = new Selector.getter(element.name, element.getLibrary());
381 registerInvokedGetter(element.name, selector); 377 registerInvokedGetter(selector);
382 } 378 }
383 } 379 }
384 } 380 }
385 381
386 /// Called when [:new Symbol(...):] is seen. 382 /// Called when [:new Symbol(...):] is seen.
387 void registerNewSymbol(TreeElements elements) { 383 void registerNewSymbol(TreeElements elements) {
388 } 384 }
389 385
390 void enqueueEverything() { 386 void enqueueEverything() {
391 if (hasEnqueuedEverything) return; 387 if (hasEnqueuedEverything) return;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 compiler.backend.registerStaticUse(element, this); 473 compiler.backend.registerStaticUse(element, this);
478 } 474 }
479 475
480 void registerGetOfStaticFunction(FunctionElement element) { 476 void registerGetOfStaticFunction(FunctionElement element) {
481 registerStaticUse(element); 477 registerStaticUse(element);
482 registerInstantiatedClass(compiler.closureClass, 478 registerInstantiatedClass(compiler.closureClass,
483 compiler.globalDependencies); 479 compiler.globalDependencies);
484 universe.staticFunctionsNeedingGetter.add(element); 480 universe.staticFunctionsNeedingGetter.add(element);
485 } 481 }
486 482
487 void registerDynamicInvocation(SourceString methodName, Selector selector) { 483 void registerDynamicInvocation(Selector selector) {
488 assert(selector != null); 484 assert(selector != null);
489 registerInvocation(methodName, selector); 485 registerInvocation(selector);
490 } 486 }
491 487
492 void registerSelectorUse(Selector selector) { 488 void registerSelectorUse(Selector selector) {
493 if (selector.isGetter()) { 489 if (selector.isGetter()) {
494 registerInvokedGetter(selector.name, selector); 490 registerInvokedGetter(selector);
495 } else if (selector.isSetter()) { 491 } else if (selector.isSetter()) {
496 registerInvokedSetter(selector.name, selector); 492 registerInvokedSetter(selector);
497 } else { 493 } else {
498 registerInvocation(selector.name, selector); 494 registerInvocation(selector);
499 } 495 }
500 } 496 }
501 497
502 void registerDynamicGetter(SourceString methodName, Selector selector) { 498 void registerDynamicGetter(Selector selector) {
503 registerInvokedGetter(methodName, selector); 499 registerInvokedGetter(selector);
504 } 500 }
505 501
506 void registerDynamicSetter(SourceString methodName, Selector selector) { 502 void registerDynamicSetter(Selector selector) {
507 registerInvokedSetter(methodName, selector); 503 registerInvokedSetter(selector);
508 } 504 }
509 505
510 void registerFieldGetter(Element element) { 506 void registerFieldGetter(Element element) {
511 universe.fieldGetters.add(element); 507 universe.fieldGetters.add(element);
512 } 508 }
513 509
514 void registerFieldSetter(Element element) { 510 void registerFieldSetter(Element element) {
515 universe.fieldSetters.add(element); 511 universe.fieldSetters.add(element);
516 } 512 }
517 513
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 addToWorkList(compiler.isolateHelperLibrary.find( 676 addToWorkList(compiler.isolateHelperLibrary.find(
681 const SourceString('_callInIsolate'))); 677 const SourceString('_callInIsolate')));
682 } 678 }
683 679
684 void enableNoSuchMethod(Element element) { 680 void enableNoSuchMethod(Element element) {
685 if (compiler.enabledNoSuchMethod) return; 681 if (compiler.enabledNoSuchMethod) return;
686 if (compiler.backend.isDefaultNoSuchMethodImplementation(element)) return; 682 if (compiler.backend.isDefaultNoSuchMethodImplementation(element)) return;
687 683
688 Selector selector = compiler.noSuchMethodSelector; 684 Selector selector = compiler.noSuchMethodSelector;
689 compiler.enabledNoSuchMethod = true; 685 compiler.enabledNoSuchMethod = true;
690 registerInvocation(Compiler.NO_SUCH_METHOD, selector); 686 registerInvocation(selector);
691 687
692 compiler.createInvocationMirrorElement = 688 compiler.createInvocationMirrorElement =
693 compiler.findHelper(Compiler.CREATE_INVOCATION_MIRROR); 689 compiler.findHelper(Compiler.CREATE_INVOCATION_MIRROR);
694 addToWorkList(compiler.createInvocationMirrorElement); 690 addToWorkList(compiler.createInvocationMirrorElement);
695 } 691 }
696 692
697 void forEach(f(WorkItem work)) { 693 void forEach(f(WorkItem work)) {
698 while (!queue.isEmpty) { 694 while (!queue.isEmpty) {
699 // TODO(johnniwinther): Find an optimal process order for resolution. 695 // TODO(johnniwinther): Find an optimal process order for resolution.
700 f(queue.removeLast()); 696 f(queue.removeLast());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 while(!queue.isEmpty) { 759 while(!queue.isEmpty) {
764 // TODO(johnniwinther): Find an optimal process order for codegen. 760 // TODO(johnniwinther): Find an optimal process order for codegen.
765 f(queue.removeLast()); 761 f(queue.removeLast());
766 } 762 }
767 } 763 }
768 764
769 void _logSpecificSummary(log(message)) { 765 void _logSpecificSummary(log(message)) {
770 log('Compiled ${generatedCode.length} methods.'); 766 log('Compiled ${generatedCode.length} methods.');
771 } 767 }
772 } 768 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698