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

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

Issue 11640021: Re-apply "Clean up the patch file for the isolate library by introducing a new buitlin library: iso… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years 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 final bool checkDeprecationInSdk; 121 final bool checkDeprecationInSdk;
122 122
123 bool disableInlining = false; 123 bool disableInlining = false;
124 124
125 final Tracer tracer; 125 final Tracer tracer;
126 126
127 CompilerTask measuredTask; 127 CompilerTask measuredTask;
128 Element _currentElement; 128 Element _currentElement;
129 LibraryElement coreLibrary; 129 LibraryElement coreLibrary;
130 LibraryElement isolateLibrary; 130 LibraryElement isolateLibrary;
131 LibraryElement isolateHelperLibrary;
131 LibraryElement jsHelperLibrary; 132 LibraryElement jsHelperLibrary;
132 LibraryElement interceptorsLibrary; 133 LibraryElement interceptorsLibrary;
133 LibraryElement foreignLibrary; 134 LibraryElement foreignLibrary;
134 LibraryElement mainApp; 135 LibraryElement mainApp;
135 136
136 ClassElement objectClass; 137 ClassElement objectClass;
137 ClassElement closureClass; 138 ClassElement closureClass;
138 ClassElement dynamicClass; 139 ClassElement dynamicClass;
139 ClassElement boolClass; 140 ClassElement boolClass;
140 ClassElement numClass; 141 ClassElement numClass;
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 396
396 createInvocationMirrorElement = 397 createInvocationMirrorElement =
397 findHelper(CREATE_INVOCATION_MIRROR); 398 findHelper(CREATE_INVOCATION_MIRROR);
398 enqueuer.resolution.addToWorkList(createInvocationMirrorElement); 399 enqueuer.resolution.addToWorkList(createInvocationMirrorElement);
399 enqueuer.codegen.addToWorkList(createInvocationMirrorElement); 400 enqueuer.codegen.addToWorkList(createInvocationMirrorElement);
400 } 401 }
401 402
402 void enableIsolateSupport(LibraryElement element) { 403 void enableIsolateSupport(LibraryElement element) {
403 // TODO(ahe): Move this method to Enqueuer. 404 // TODO(ahe): Move this method to Enqueuer.
404 isolateLibrary = element.patch; 405 isolateLibrary = element.patch;
405 enqueuer.resolution.addToWorkList(isolateLibrary.find(START_ROOT_ISOLATE));
406 enqueuer.resolution.addToWorkList( 406 enqueuer.resolution.addToWorkList(
407 isolateLibrary.find(const SourceString('_currentIsolate'))); 407 isolateHelperLibrary.find(START_ROOT_ISOLATE));
408 enqueuer.resolution.addToWorkList( 408 enqueuer.resolution.addToWorkList(
409 isolateLibrary.find(const SourceString('_callInIsolate'))); 409 isolateHelperLibrary.find(const SourceString('_currentIsolate')));
410 enqueuer.codegen.addToWorkList(isolateLibrary.find(START_ROOT_ISOLATE)); 410 enqueuer.resolution.addToWorkList(
411 isolateHelperLibrary.find(const SourceString('_callInIsolate')));
412 enqueuer.codegen.addToWorkList(
413 isolateHelperLibrary.find(START_ROOT_ISOLATE));
411 } 414 }
412 415
413 bool hasIsolateSupport() => isolateLibrary != null; 416 bool hasIsolateSupport() => isolateLibrary != null;
414 417
415 /** 418 /**
416 * This method is called before [library] import and export scopes have been 419 * This method is called before [library] import and export scopes have been
417 * set up. 420 * set up.
418 */ 421 */
419 void onLibraryScanned(LibraryElement library, Uri uri) { 422 void onLibraryScanned(LibraryElement library, Uri uri) {
420 if (dynamicClass != null) { 423 if (dynamicClass != null) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 types = new Types(this, dynamicClass); 459 types = new Types(this, dynamicClass);
457 if (!missingClasses.isEmpty) { 460 if (!missingClasses.isEmpty) {
458 cancel('core library does not contain required classes: $missingClasses'); 461 cancel('core library does not contain required classes: $missingClasses');
459 } 462 }
460 } 463 }
461 464
462 void scanBuiltinLibraries() { 465 void scanBuiltinLibraries() {
463 jsHelperLibrary = scanBuiltinLibrary('_js_helper'); 466 jsHelperLibrary = scanBuiltinLibrary('_js_helper');
464 interceptorsLibrary = scanBuiltinLibrary('_interceptors'); 467 interceptorsLibrary = scanBuiltinLibrary('_interceptors');
465 foreignLibrary = scanBuiltinLibrary('_foreign_helper'); 468 foreignLibrary = scanBuiltinLibrary('_foreign_helper');
469 isolateHelperLibrary = scanBuiltinLibrary('_isolate_helper');
470 // The helper library does not use the native language extension,
471 // so we manually set the native classes this library defines.
472 // TODO(ngeoffray): Enable annotations on these classes.
473 ClassElement cls =
474 isolateHelperLibrary.find(const SourceString('_WorkerStub'));
475 cls.setNative('"*Worker"');
466 476
467 // The core library was loaded and patched before jsHelperLibrary was 477 // The core library was loaded and patched before jsHelperLibrary was
468 // initialized, so it wasn't imported into those two libraries during 478 // initialized, so it wasn't imported into those two libraries during
469 // patching. 479 // patching.
470 importHelperLibrary(coreLibrary); 480 importHelperLibrary(coreLibrary);
471 importHelperLibrary(interceptorsLibrary); 481 importHelperLibrary(interceptorsLibrary);
472 482
473 importForeignLibrary(jsHelperLibrary); 483 importForeignLibrary(jsHelperLibrary);
474 importForeignLibrary(interceptorsLibrary); 484 importForeignLibrary(interceptorsLibrary);
475 485
486 importForeignLibrary(isolateHelperLibrary);
487 importHelperLibrary(isolateHelperLibrary);
488
476 assertMethod = jsHelperLibrary.find(const SourceString('assertHelper')); 489 assertMethod = jsHelperLibrary.find(const SourceString('assertHelper'));
477 identicalFunction = coreLibrary.find(const SourceString('identical')); 490 identicalFunction = coreLibrary.find(const SourceString('identical'));
478 491
479 initializeSpecialClasses(); 492 initializeSpecialClasses();
480 493
481 functionClass.ensureResolved(this); 494 functionClass.ensureResolved(this);
482 functionApplyMethod = 495 functionApplyMethod =
483 functionClass.lookupLocalMember(const SourceString('apply')); 496 functionClass.lookupLocalMember(const SourceString('apply'));
484 jsInvocationMirrorClass.ensureResolved(this); 497 jsInvocationMirrorClass.ensureResolved(this);
485 invokeOnMethod = jsInvocationMirrorClass.lookupLocalMember( 498 invokeOnMethod = jsInvocationMirrorClass.lookupLocalMember(
486 const SourceString('invokeOn')); 499 const SourceString('invokeOn'));
487 } 500 }
488 501
489 void importHelperLibrary(LibraryElement library) { 502 void importHelperLibrary(LibraryElement library) {
490 if (jsHelperLibrary != null) { 503 if (jsHelperLibrary != null) {
491 libraryLoader.importLibrary(library, jsHelperLibrary, null); 504 libraryLoader.importLibrary(library, jsHelperLibrary, null);
492 } 505 }
493 } 506 }
494 507
495 /** 508 /**
496 * Get an [Uri] pointing to a patch for the dart: library with 509 * Get an [Uri] pointing to a patch for the dart: library with
497 * the given path. Returns null if there is no patch. 510 * the given path. Returns null if there is no patch.
498 */ 511 */
499 Uri resolvePatchUri(String dartLibraryPath); 512 Uri resolvePatchUri(String dartLibraryPath);
500 513
501 /** Define the JS helper functions in the given library. */ 514 /** Define the JS helper functions in the given library. */
502 void importForeignLibrary(LibraryElement library) { 515 void importForeignLibrary(LibraryElement library) {
503 if (jsHelperLibrary != null) { 516 if (foreignLibrary != null) {
504 libraryLoader.importLibrary(library, foreignLibrary, null); 517 libraryLoader.importLibrary(library, foreignLibrary, null);
505 } 518 }
506 } 519 }
507 520
521 void importIsolateHelperLibrary(LibraryElement library) {
522 if (isolateHelperLibrary != null) {
523 libraryLoader.importLibrary(library, isolateHelperLibrary, null);
524 }
525 }
526
508 // TODO(karlklose,floitsch): move this to the javascript backend. 527 // TODO(karlklose,floitsch): move this to the javascript backend.
509 /** Enable the 'JS' helper for a library if needed. */ 528 /** Enable the 'JS' helper for a library if needed. */
510 void maybeEnableJSHelper(LibraryElement library) { 529 void maybeEnableJSHelper(LibraryElement library) {
511 String libraryName = library.uri.toString(); 530 String libraryName = library.uri.toString();
512 bool nativeTest = library.entryCompilationUnit.script.name.contains( 531 bool nativeTest = library.entryCompilationUnit.script.name.contains(
513 'dart/tests/compiler/dart2js_native'); 532 'dart/tests/compiler/dart2js_native');
514 if (nativeTest 533 if (nativeTest
515 || libraryName == 'dart:mirrors' 534 || libraryName == 'dart:mirrors'
516 || libraryName == 'dart:isolate'
517 || libraryName == 'dart:math' 535 || libraryName == 'dart:math'
518 || libraryName == 'dart:html' 536 || libraryName == 'dart:html'
519 || libraryName == 'dart:html_common' 537 || libraryName == 'dart:html_common'
520 || libraryName == 'dart:indexed_db' 538 || libraryName == 'dart:indexed_db'
521 || libraryName == 'dart:svg' 539 || libraryName == 'dart:svg'
522 || libraryName == 'dart:web_audio') { 540 || libraryName == 'dart:web_audio') {
523 if (nativeTest 541 if (nativeTest
524 || libraryName == 'dart:html' 542 || libraryName == 'dart:html'
525 || libraryName == 'dart:html_common' 543 || libraryName == 'dart:html_common'
526 || libraryName == 'dart:indexed_db' 544 || libraryName == 'dart:indexed_db'
527 || libraryName == 'dart:svg') { 545 || libraryName == 'dart:svg') {
528 // dart:html and dart:svg need access to convertDartClosureToJS and 546 // dart:html and dart:svg need access to convertDartClosureToJS and
529 // annotation classes. 547 // annotation classes.
530 // dart:mirrors needs access to the Primitives class. 548 // dart:mirrors needs access to the Primitives class.
531 importHelperLibrary(library); 549 importHelperLibrary(library);
532 } 550 }
533 library.addToScope( 551 library.addToScope(
534 foreignLibrary.findLocal(const SourceString('JS')), this); 552 foreignLibrary.findLocal(const SourceString('JS')), this);
535 Element jsIndexingBehaviorInterface = 553 Element jsIndexingBehaviorInterface =
536 findHelper(const SourceString('JavaScriptIndexingBehavior')); 554 findHelper(const SourceString('JavaScriptIndexingBehavior'));
537 if (jsIndexingBehaviorInterface != null) { 555 if (jsIndexingBehaviorInterface != null) {
538 library.addToScope(jsIndexingBehaviorInterface, this); 556 library.addToScope(jsIndexingBehaviorInterface, this);
539 } 557 }
540 } 558 }
541 } 559 }
542 560
561 void maybeEnableIsolateHelper(LibraryElement library) {
562 String libraryName = library.uri.toString();
563 if (libraryName == 'dart:isolate'
564 || libraryName == 'dart:html') {
565 importIsolateHelperLibrary(library);
566 }
567 }
568
543 void runCompiler(Uri uri) { 569 void runCompiler(Uri uri) {
544 log('compiling $uri ($BUILD_ID)'); 570 log('compiling $uri ($BUILD_ID)');
545 scanBuiltinLibraries(); 571 scanBuiltinLibraries();
546 mainApp = libraryLoader.loadLibrary(uri, null, uri); 572 mainApp = libraryLoader.loadLibrary(uri, null, uri);
547 libraries.forEach((_, library) { 573 libraries.forEach((_, library) {
548 maybeEnableJSHelper(library); 574 maybeEnableJSHelper(library);
575 maybeEnableIsolateHelper(library);
549 }); 576 });
550 final Element main = mainApp.find(MAIN); 577 final Element main = mainApp.find(MAIN);
551 if (main == null) { 578 if (main == null) {
552 reportFatalError('Could not find $MAIN', mainApp); 579 reportFatalError('Could not find $MAIN', mainApp);
553 } else { 580 } else {
554 if (!main.isFunction()) reportFatalError('main is not a function', main); 581 if (!main.isFunction()) reportFatalError('main is not a function', main);
555 FunctionElement mainMethod = main; 582 FunctionElement mainMethod = main;
556 FunctionSignature parameters = mainMethod.computeSignature(this); 583 FunctionSignature parameters = mainMethod.computeSignature(this);
557 parameters.forEachParameter((Element parameter) { 584 parameters.forEachParameter((Element parameter) {
558 reportFatalError('main cannot have parameters', parameter); 585 reportFatalError('main cannot have parameters', parameter);
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 // TODO(johnniwinther): Use [spannable] and [message] to provide better 981 // TODO(johnniwinther): Use [spannable] and [message] to provide better
955 // information on assertion errors. 982 // information on assertion errors.
956 if (condition is Function){ 983 if (condition is Function){
957 condition = condition(); 984 condition = condition();
958 } 985 }
959 if (spannable == null || !condition) { 986 if (spannable == null || !condition) {
960 throw new SpannableAssertionFailure(spannable, message); 987 throw new SpannableAssertionFailure(spannable, message);
961 } 988 }
962 return true; 989 return true;
963 } 990 }
OLDNEW
« no previous file with comments | « runtime/lib/isolate_patch.dart ('k') | sdk/lib/_internal/compiler/implementation/elements/elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698