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

Side by Side Diff: sdk/lib/js/dartium/js_dartium.dart

Issue 1871573002: Breaking Change: Support @JS at library level (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Updated to WebKit updated tests Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 /** 5 /**
6 * Support for interoperating with JavaScript. 6 * Support for interoperating with JavaScript.
7 * 7 *
8 * This library provides access to JavaScript objects from Dart, allowing 8 * This library provides access to JavaScript objects from Dart, allowing
9 * Dart code to get and set properties, and call methods of JavaScript objects 9 * Dart code to get and set properties, and call methods of JavaScript objects
10 * and invoke JavaScript functions. The library takes care of converting 10 * and invoke JavaScript functions. The library takes care of converting
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 return false; 499 return false;
500 } 500 }
501 501
502 List<String> _generateExternalMethods(List<String> libraryPaths) { 502 List<String> _generateExternalMethods(List<String> libraryPaths) {
503 var staticCodegen = <String>[]; 503 var staticCodegen = <String>[];
504 504
505 if (libraryPaths.length == 0) { 505 if (libraryPaths.length == 0) {
506 mirrors.currentMirrorSystem().libraries.forEach((uri, library) { 506 mirrors.currentMirrorSystem().libraries.forEach((uri, library) {
507 var library_name = "${uri.scheme}:${uri.path}"; 507 var library_name = "${uri.scheme}:${uri.path}";
508 if (cached_patches.containsKey(library_name)) { 508 if (cached_patches.containsKey(library_name)) {
509 // Use the pre-generated patch files for DOM dart:nnnn libraries.
509 var patch = cached_patches[library_name]; 510 var patch = cached_patches[library_name];
510 staticCodegen.addAll(patch); 511 staticCodegen.addAll(patch);
511 } else { 512 } else if (_hasJsName(library)) {
513 // Library marked with @JS
512 _generateLibraryCodegen(uri, library, staticCodegen); 514 _generateLibraryCodegen(uri, library, staticCodegen);
513 } 515 }
514 }); // End of library foreach 516 }); // End of library foreach
515 } else { 517 } else {
516 // Used to generate cached_patches.dart file for all IDL generated dart: 518 // Used to generate cached_patches.dart file for all IDL generated dart:
517 // files to the WebKit DOM. 519 // files to the WebKit DOM.
518 for (var library_name in libraryPaths) { 520 for (var library_name in libraryPaths) {
519 var parts = library_name.split(':'); 521 var parts = library_name.split(':');
520 var uri = new Uri(scheme: parts[0], path: parts[1]); 522 var uri = new Uri(scheme: parts[0], path: parts[1]);
521 var library = mirrors.currentMirrorSystem().libraries[uri]; 523 var library = mirrors.currentMirrorSystem().libraries[uri];
522 _generateLibraryCodegen(uri, library, staticCodegen); 524 _generateLibraryCodegen(uri, library, staticCodegen);
523 } 525 }
524 } 526 }
525 527
526 return staticCodegen; 528 return staticCodegen;
527 } 529 }
528 530
529 _generateLibraryCodegen(uri, library, staticCodegen) { 531 _generateLibraryCodegen(uri, library, staticCodegen) {
530 // Is it a dart generated library? 532 // Is it a dart generated library?
531 var dartLibrary = uri.scheme == 'dart'; 533 var dartLibrary = uri.scheme == 'dart';
532 534
533 var sb = new StringBuffer(); 535 var sb = new StringBuffer();
534 String jsLibraryName = _getJsName(library); 536 String jsLibraryName = _getJsName(library);
535 library.declarations.forEach((name, declaration) { 537
538 // Sort by patch file by its declaration name.
539 var sortedDeclKeys = library.declarations.keys.toList();
540 sortedDeclKeys.sort((a, b) => mirrors.MirrorSystem.getName(a).compareTo(mirr ors.MirrorSystem.getName(b)));
541
542 sortedDeclKeys.forEach((name) {
543 var declaration = library.declarations[name];
536 if (declaration is mirrors.MethodMirror) { 544 if (declaration is mirrors.MethodMirror) {
537 if ((_hasJsName(declaration) || jsLibraryName != null) && 545 if ((_hasJsName(declaration) || jsLibraryName != null) &&
538 _isExternal(declaration)) { 546 _isExternal(declaration)) {
539 addMemberHelper(declaration, jsLibraryName, sb); 547 addMemberHelper(declaration, jsLibraryName, sb);
540 } 548 }
541 } else if (declaration is mirrors.ClassMirror) { 549 } else if (declaration is mirrors.ClassMirror) {
542 mirrors.ClassMirror clazz = declaration; 550 mirrors.ClassMirror clazz = declaration;
543 var isDom = dartLibrary ? hasDomName(clazz) : false; 551 var isDom = dartLibrary ? hasDomName(clazz) : false;
544 var isJsInterop = _hasJsName(clazz); 552 var isJsInterop = _hasJsName(clazz);
545 if (isDom || isJsInterop) { 553 if (isDom || isJsInterop) {
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 if (ret == null) { 1579 if (ret == null) {
1572 // TODO(jacobr): we could optimize this. 1580 // TODO(jacobr): we could optimize this.
1573 ret = JSFunction._createWithThis(f); 1581 ret = JSFunction._createWithThis(f);
1574 _interopCaptureThisExpando[f] = ret; 1582 _interopCaptureThisExpando[f] = ret;
1575 } 1583 }
1576 return ret; 1584 return ret;
1577 } 1585 }
1578 } 1586 }
1579 1587
1580 debugPrint(_) {} 1588 debugPrint(_) {}
OLDNEW
« no previous file with comments | « sdk/lib/js/dartium/cached_patches.dart ('k') | tests/html/js_typed_interop_anonymous2_exp_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698