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

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

Issue 1898163002: Generate cached_patches.dart using new Dartium swtich (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 .putIfAbsent(symbol, () => new _DeclarationSet()) 275 .putIfAbsent(symbol, () => new _DeclarationSet())
276 .add(declaration); 276 .add(declaration);
277 } 277 }
278 } 278 }
279 }); 279 });
280 } 280 }
281 } 281 }
282 282
283 _finalizeJsInterfaces() native "Js_finalizeJsInterfaces"; 283 _finalizeJsInterfaces() native "Js_finalizeJsInterfaces";
284 284
285 // Create the files for the generated Dart files from IDLs. These only change
286 // when browser's Dart files change (dart:*).
287 @Deprecated("Internal Use Only")
288 String createCachedPatchesFile() {
289 var patches = _generateInteropPatchFiles(['dart:html',
290 'dart:indexed_db',
291 'dart:web_gl',
292 'dart:web_sql',
293 'dart:svg',
294 'dart:web_audio']);
295 var sb = new StringBuffer();
296
297 sb.write("""
298
299 // START_OF_CACHED_PATCHES
300 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
301 // for details. All rights reserved. Use of this source code is governed by a
302 // BSD-style license that can be found in the LICENSE file.
303
304 // DO NOT EDIT GENERATED FILE.
305
306 library cached_patches;
307
308 var cached_patches = {""");
309
310 for (var baseIndex = 0; baseIndex < patches.length; baseIndex += 3) {
311 var uri = patches[baseIndex + 0];
312 var uri_js_interop = patches[baseIndex + 1];
313 var source = patches[baseIndex + 2];
314
315 if (uri != 'dart:js') {
316 sb.write('"$uri": ["$uri", "$uri_js_interop", """$source"""],');
317 }
318 }
319
320 sb.write("""};
321 // END_OF_CACHED_PATCHES
322 """);
323
324 return "$sb";
325 }
326
327 String _getJsName(mirrors.DeclarationMirror mirror) { 285 String _getJsName(mirrors.DeclarationMirror mirror) {
328 if (_atJsType != null) { 286 if (_atJsType != null) {
329 for (var annotation in mirror.metadata) { 287 for (var annotation in mirror.metadata) {
330 if (annotation.type.reflectedType == _atJsType) { 288 if (annotation.type.reflectedType == _atJsType) {
331 try { 289 try {
332 var name = annotation.reflectee.name; 290 var name = annotation.reflectee.name;
333 return name != null ? name : ""; 291 return name != null ? name : "";
334 } catch (e) {} 292 } catch (e) {}
335 } 293 }
336 } 294 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 } 450 }
493 451
494 bool _isExternal(mirrors.MethodMirror mirror) { 452 bool _isExternal(mirrors.MethodMirror mirror) {
495 // This try-catch block is a workaround for BUG:24834. 453 // This try-catch block is a workaround for BUG:24834.
496 try { 454 try {
497 return mirror.isExternal; 455 return mirror.isExternal;
498 } catch (e) {} 456 } catch (e) {}
499 return false; 457 return false;
500 } 458 }
501 459
502 List<String> _generateExternalMethods(List<String> libraryPaths) { 460 List<String> _generateExternalMethods(List<String> libraryPaths, bool useCachedP atches) {
503 var staticCodegen = <String>[]; 461 var staticCodegen = <String>[];
504 462
505 if (libraryPaths.length == 0) { 463 if (libraryPaths.length == 0) {
506 mirrors.currentMirrorSystem().libraries.forEach((uri, library) { 464 mirrors.currentMirrorSystem().libraries.forEach((uri, library) {
507 var library_name = "${uri.scheme}:${uri.path}"; 465 var library_name = "${uri.scheme}:${uri.path}";
508 if (cached_patches.containsKey(library_name)) { 466 if (useCachedPatches && cached_patches.containsKey(library_name)) {
509 // Use the pre-generated patch files for DOM dart:nnnn libraries. 467 // Use the pre-generated patch files for DOM dart:nnnn libraries.
510 var patch = cached_patches[library_name]; 468 var patch = cached_patches[library_name];
511 staticCodegen.addAll(patch); 469 staticCodegen.addAll(patch);
512 } else if (_hasJsName(library)) { 470 } else if (_hasJsName(library)) {
513 // Library marked with @JS 471 // Library marked with @JS
514 _generateLibraryCodegen(uri, library, staticCodegen); 472 _generateLibraryCodegen(uri, library, staticCodegen);
473 } else if (!useCachedPatches) {
474 // Can't use the cached patches file, instead this is a signal to genera te
475 // the patches for this file.
476 _generateLibraryCodegen(uri, library, staticCodegen);
515 } 477 }
516 }); // End of library foreach 478 }); // End of library foreach
517 } else { 479 } else {
518 // Used to generate cached_patches.dart file for all IDL generated dart: 480 // Used to generate cached_patches.dart file for all IDL generated dart:
519 // files to the WebKit DOM. 481 // files to the WebKit DOM.
520 for (var library_name in libraryPaths) { 482 for (var library_name in libraryPaths) {
521 var parts = library_name.split(':'); 483 var parts = library_name.split(':');
522 var uri = new Uri(scheme: parts[0], path: parts[1]); 484 var uri = new Uri(scheme: parts[0], path: parts[1]);
523 var library = mirrors.currentMirrorSystem().libraries[uri]; 485 var library = mirrors.currentMirrorSystem().libraries[uri];
524 _generateLibraryCodegen(uri, library, staticCodegen); 486 _generateLibraryCodegen(uri, library, staticCodegen);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 } 631 }
670 } 632 }
671 633
672 // Remember the @JS type to compare annotation type. 634 // Remember the @JS type to compare annotation type.
673 var _atJsType = -1; 635 var _atJsType = -1;
674 636
675 /** 637 /**
676 * Generates part files defining source code for JSObjectImpl, all DOM classes 638 * Generates part files defining source code for JSObjectImpl, all DOM classes
677 * classes. This codegen is needed so that type checks for all registered 639 * classes. This codegen is needed so that type checks for all registered
678 * JavaScript interop classes pass. 640 * JavaScript interop classes pass.
641 * If genCachedPatches is true then the patch files don't exist this is a specia l
642 * signal to generate and emit the patches to stdout to be captured and put into
643 * the file sdk/lib/js/dartium/cached_patches.dart
679 */ 644 */
680 List<String> _generateInteropPatchFiles(List<String> libraryPaths) { 645 List<String> _generateInteropPatchFiles(List<String> libraryPaths, genCachedPatc hes) {
681 // Cache the @JS Type. 646 // Cache the @JS Type.
682 if (_atJsType == -1) { 647 if (_atJsType == -1) {
683 var uri = new Uri(scheme: "package", path: "js/js.dart"); 648 var uri = new Uri(scheme: "package", path: "js/js.dart");
684 var jsLibrary = mirrors.currentMirrorSystem().libraries[uri]; 649 var jsLibrary = mirrors.currentMirrorSystem().libraries[uri];
685 if (jsLibrary != null) { 650 if (jsLibrary != null) {
686 // @ JS used somewhere. 651 // @ JS used somewhere.
687 var jsDeclaration = jsLibrary.declarations[new Symbol("JS")]; 652 var jsDeclaration = jsLibrary.declarations[new Symbol("JS")];
688 _atJsType = jsDeclaration.reflectedType; 653 _atJsType = jsDeclaration.reflectedType;
689 } else { 654 } else {
690 // @ JS not used in any library. 655 // @ JS not used in any library.
691 _atJsType = null; 656 _atJsType = null;
692 } 657 }
693 } 658 }
694 659
695 var ret = _generateExternalMethods(libraryPaths); 660 var ret = _generateExternalMethods(libraryPaths, genCachedPatches ? false : tr ue);
696 var libraryPrefixes = new Map<mirrors.LibraryMirror, String>(); 661 var libraryPrefixes = new Map<mirrors.LibraryMirror, String>();
697 var prefixNames = new Set<String>(); 662 var prefixNames = new Set<String>();
698 var sb = new StringBuffer(); 663 var sb = new StringBuffer();
699 664
700 var implements = <String>[]; 665 var implements = <String>[];
701 var implementsArray = <String>[]; 666 var implementsArray = <String>[];
702 var implementsDom = <String>[]; 667 var implementsDom = <String>[];
703 var listMirror = mirrors.reflectType(List); 668 var listMirror = mirrors.reflectType(List);
704 var functionMirror = mirrors.reflectType(Function); 669 var functionMirror = mirrors.reflectType(Function);
705 var jsObjectMirror = mirrors.reflectType(JSObject); 670 var jsObjectMirror = mirrors.reflectType(JSObject);
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 if (ret == null) { 1544 if (ret == null) {
1580 // TODO(jacobr): we could optimize this. 1545 // TODO(jacobr): we could optimize this.
1581 ret = JSFunction._createWithThis(f); 1546 ret = JSFunction._createWithThis(f);
1582 _interopCaptureThisExpando[f] = ret; 1547 _interopCaptureThisExpando[f] = ret;
1583 } 1548 }
1584 return ret; 1549 return ret;
1585 } 1550 }
1586 } 1551 }
1587 1552
1588 debugPrint(_) {} 1553 debugPrint(_) {}
OLDNEW
« no previous file with comments | « sdk/lib/js/dartium/cached_patches.dart ('k') | tools/dartium/generate_app/generate_cached_patches.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698