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

Side by Side Diff: test/generated_sdk/lib/_internal/compiler/js_lib/js_helper.dart

Issue 1071393007: fuse List and js Array together and a few other misc fixes. (Closed) Base URL: git@github.com:dart-lang/dart-dev-compiler.git@master
Patch Set: ptal Created 5 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
« no previous file with comments | « test/dart_codegen/expect/core/uri.dart ('k') | test/generated_sdk/lib/core/list.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 library _js_helper; 5 library _js_helper;
6 6
7 import 'dart:_js_embedded_names' show 7 import 'dart:_js_embedded_names' show
8 ALL_CLASSES, 8 ALL_CLASSES,
9 GET_ISOLATE_TAG, 9 GET_ISOLATE_TAG,
10 INTERCEPTED_NAMES, 10 INTERCEPTED_NAMES,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 JS_SIGNATURE_NAME, 55 JS_SIGNATURE_NAME,
56 JS_STRING_CONCAT, 56 JS_STRING_CONCAT,
57 RAW_DART_FUNCTION_REF; 57 RAW_DART_FUNCTION_REF;
58 58
59 import 'dart:_interceptors'; 59 import 'dart:_interceptors';
60 import 'dart:_internal' as _symbol_dev; 60 import 'dart:_internal' as _symbol_dev;
61 import 'dart:_internal' show MappedIterable; 61 import 'dart:_internal' show MappedIterable;
62 62
63 import 'dart:_js_names' show 63 import 'dart:_js_names' show
64 extractKeys, 64 extractKeys,
65 mangledNames, 65 mangledNames;
66 unmangleGlobalNameIfPreservedAnyways,
67 unmangleAllIdentifiersIfPreservedAnyways;
68 66
69 part 'annotations.dart'; 67 part 'annotations.dart';
70 part 'constant_map.dart'; 68 part 'constant_map.dart';
71 part 'native_helper.dart'; 69 part 'native_helper.dart';
72 part 'regexp_helper.dart'; 70 part 'regexp_helper.dart';
73 part 'string_helper.dart'; 71 part 'string_helper.dart';
74 part 'js_rti.dart'; 72 part 'js_rti.dart';
75 73
74 // TODO(jacobr): remove.
75 String unmangleGlobalNameIfPreservedAnyways(String str) => str;
76 // TODO(jacobr): remove.
77 String unmangleAllIdentifiersIfPreservedAnyways(String str) => str;
78
76 class _Patch { 79 class _Patch {
77 const _Patch(); 80 const _Patch();
78 } 81 }
79 82
80 const _Patch patch = const _Patch(); 83 const _Patch patch = const _Patch();
81 84
82 85
83 /// Marks the internal map in dart2js, so that internal libraries can is-check 86 /// Marks the internal map in dart2js, so that internal libraries can is-check
84 // them. 87 // them.
85 abstract class InternalMap { 88 abstract class InternalMap {
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 return result; 677 return result;
675 } 678 }
676 return handleError(source); 679 return handleError(source);
677 } 680 }
678 return result; 681 return result;
679 } 682 }
680 683
681 /** [: r"$".codeUnitAt(0) :] */ 684 /** [: r"$".codeUnitAt(0) :] */
682 static const int DOLLAR_CHAR_VALUE = 36; 685 static const int DOLLAR_CHAR_VALUE = 36;
683 686
687 // TODO(jmesserly): remove this method.
688 static constructorNameFallback = JS('Function', r'''
689 function getTagFallback(o) {
690 var constructor = o.constructor;
691 if (typeof constructor == "function") {
692 var name = constructor.name;
693 // If the name is a non-empty string, we use that as the type name of this
694 // object. There are various cases where that does not work, so we have t o
695 // detect them and fall through to the toString() based implementation.
696
697 if (typeof name == "string" &&
698
699 // Sometimes the string is empty. This test also catches minified
700 // shadow dom polyfil wrapper for Window on Firefox where the faked
701 // constructor name does not 'stick'. The shortest real DOM object
702 // names have three characters (e.g. URL, CSS).
703 name.length > 2 &&
704
705 // On Firefox we often get "Object" as the constructor name, even for
706 // more specialized DOM objects.
707 name !== "Object" &&
708
709 // This can happen in Opera.
710 name !== "Function.prototype") {
711 return name;
712 }
713 }
714 var s = Object.prototype.toString.call(o);
715 return s.substring(8, s.length - 1);
716 }''');
717
684 /// Creates a string containing the complete type for the class [className] 718 /// Creates a string containing the complete type for the class [className]
685 /// with the given type arguments. 719 /// with the given type arguments.
686 /// 720 ///
687 /// In minified mode, uses the unminified names if available. 721 /// In minified mode, uses the unminified names if available.
688 static String formatType(String className, List typeArguments) { 722 static String formatType(String className, List typeArguments) {
689 return unmangleAllIdentifiersIfPreservedAnyways 723 return unmangleAllIdentifiersIfPreservedAnyways
690 ('$className${joinArguments(typeArguments, 0)}'); 724 ('$className${joinArguments(typeArguments, 0)}');
691 } 725 }
692 726
693 /// Returns the type of [object] as a string (including type arguments). 727 /// Returns the type of [object] as a string (including type arguments).
694 /// 728 ///
695 /// In minified mode, uses the unminified names if available. 729 /// In minified mode, uses the unminified names if available.
696 static String objectTypeName(Object object) { 730 static String objectTypeName(Object object) {
697 String name = constructorNameFallback(getInterceptor(object)); 731 String name = JS('String', '#(#)', constructorNameFallback, object);
698 if (name == 'Object') { 732 if (name == 'Object') {
699 // Try to decompile the constructor by turning it into a string and get 733 // Try to decompile the constructor by turning it into a string and get
700 // the name out of that. If the decompiled name is a string containing an 734 // the name out of that. If the decompiled name is a string containing an
701 // identifier, we use that instead of the very generic 'Object'. 735 // identifier, we use that instead of the very generic 'Object'.
702 var decompiled = 736 var decompiled =
703 JS('var', r'#.match(/^\s*function\s*(\S*)\s*\(/)[1]', 737 JS('var', r'#.match(/^\s*function\s*(\S*)\s*\(/)[1]',
704 JS('var', r'String(#.constructor)', object)); 738 JS('var', r'String(#.constructor)', object));
705 if (decompiled is String) 739 if (decompiled is String)
706 if (JS('bool', r'/^\w+$/.test(#)', decompiled)) 740 if (JS('bool', r'/^\w+$/.test(#)', decompiled))
707 name = decompiled; 741 name = decompiled;
708 } 742 }
709 // TODO(kasperl): If the namer gave us a fresh global name, we may 743 // TODO(kasperl): If the namer gave us a fresh global name, we may
710 // want to remove the numeric suffix that makes it unique too. 744 // want to remove the numeric suffix that makes it unique too.
745 // TODO(jacobr): commented this out as it seems bogus and it breaks as
746 // codeUnitAt is not yet supported.
747 /*
711 if (name.length > 1 && identical(name.codeUnitAt(0), DOLLAR_CHAR_VALUE)) { 748 if (name.length > 1 && identical(name.codeUnitAt(0), DOLLAR_CHAR_VALUE)) {
712 name = name.substring(1); 749 name = name.substring(1);
713 } 750 }
751 */
714 return formatType(name, getRuntimeTypeInfo(object)); 752 return formatType(name, getRuntimeTypeInfo(object));
715 } 753 }
716 754
717 /// In minified mode, uses the unminified names if available. 755 /// In minified mode, uses the unminified names if available.
718 static String objectToString(Object object) { 756 static String objectToString(Object object) {
719 String name = objectTypeName(object); 757 String name = objectTypeName(object);
720 return "Instance of '$name'"; 758 return "Instance of '$name'";
721 } 759 }
722 760
723 static num dateNow() => JS('int', r'Date.now()'); 761 static num dateNow() => JS('int', r'Date.now()');
(...skipping 2708 matching lines...) Expand 10 before | Expand all | Expand 10 after
3432 throw new MainError("No top-level function named 'main'."); 3470 throw new MainError("No top-level function named 'main'.");
3433 } 3471 }
3434 3472
3435 void badMain() { 3473 void badMain() {
3436 throw new MainError("'main' is not a function."); 3474 throw new MainError("'main' is not a function.");
3437 } 3475 }
3438 3476
3439 void mainHasTooManyParameters() { 3477 void mainHasTooManyParameters() {
3440 throw new MainError("'main' expects too many parameters."); 3478 throw new MainError("'main' expects too many parameters.");
3441 } 3479 }
OLDNEW
« no previous file with comments | « test/dart_codegen/expect/core/uri.dart ('k') | test/generated_sdk/lib/core/list.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698