OLD | NEW |
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 library _js_helper; | 5 library _js_helper; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS, | 8 import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS, |
9 JS, | 9 JS, |
10 JS_CALL_IN_ISOLATE, | 10 JS_CALL_IN_ISOLATE, |
11 JS_CURRENT_ISOLATE, | 11 JS_CURRENT_ISOLATE, |
12 JS_DART_OBJECT_CONSTRUCTOR, | 12 JS_DART_OBJECT_CONSTRUCTOR, |
13 JS_OPERATOR_IS_PREFIX, | 13 JS_OPERATOR_IS_PREFIX, |
14 JS_OPERATOR_AS_PREFIX, | 14 JS_OPERATOR_AS_PREFIX, |
15 RAW_DART_FUNCTION_REF; | 15 RAW_DART_FUNCTION_REF; |
16 import 'dart:_interceptors' show getInterceptor, | 16 import 'dart:_interceptors'; |
17 interceptedNames, | |
18 dispatchPropertyName, | |
19 makeDispatchRecord, | |
20 setDispatchProperty, | |
21 Interceptor, | |
22 JSMutableIndexable, | |
23 JSUnknown; | |
24 import "dart:_collection-dev" as _symbol_dev; | 17 import "dart:_collection-dev" as _symbol_dev; |
25 | 18 |
26 part 'constant_map.dart'; | 19 part 'constant_map.dart'; |
27 part 'native_helper.dart'; | 20 part 'native_helper.dart'; |
28 part 'regexp_helper.dart'; | 21 part 'regexp_helper.dart'; |
29 part 'string_helper.dart'; | 22 part 'string_helper.dart'; |
30 part 'js_rti.dart'; | 23 part 'js_rti.dart'; |
31 | 24 |
32 bool isJsArray(var value) { | 25 bool isJsArray(var value) { |
33 return value != null && JS('bool', r'(#.constructor === Array)', value); | 26 return value != null && JS('bool', r'(#.constructor === Array)', value); |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 if (jsFunction == null) { | 564 if (jsFunction == null) { |
572 throw new NoSuchMethodError(function, selectorName, arguments, {}); | 565 throw new NoSuchMethodError(function, selectorName, arguments, {}); |
573 } | 566 } |
574 // We bound 'this' to [function] because of how we compile | 567 // We bound 'this' to [function] because of how we compile |
575 // closures: escaped local variables are stored and accessed through | 568 // closures: escaped local variables are stored and accessed through |
576 // [function]. | 569 // [function]. |
577 return JS('var', '#.apply(#, #)', jsFunction, function, arguments); | 570 return JS('var', '#.apply(#, #)', jsFunction, function, arguments); |
578 } | 571 } |
579 | 572 |
580 static getConstructor(String className) { | 573 static getConstructor(String className) { |
| 574 // TODO(ahe): Generalize this and improve test coverage of |
| 575 // reflecting on intercepted classes. |
| 576 if (JS('bool', '# == "String"', className)) return const JSString(); |
| 577 if (JS('bool', '# == "int"', int)) return const JSInt(); |
| 578 if (JS('bool', '# == "double"', int)) return const JSDouble(); |
| 579 if (JS('bool', '# == "num"', int)) return const JSNumber(); |
| 580 if (JS('bool', '# == "bool"', int)) return const JSBool(); |
| 581 if (JS('bool', '# == "List"', int)) return const JSArray(); |
581 // TODO(ahe): How to safely access $? | 582 // TODO(ahe): How to safely access $? |
582 return JS('var', r'$[#]', className); | 583 return JS('var', r'$[#]', className); |
583 } | 584 } |
584 | 585 |
585 static bool identicalImplementation(a, b) { | 586 static bool identicalImplementation(a, b) { |
586 return JS('bool', '# == null', a) | 587 return JS('bool', '# == null', a) |
587 ? JS('bool', '# == null', b) | 588 ? JS('bool', '# == null', b) |
588 : JS('bool', '# === #', a, b); | 589 : JS('bool', '# === #', a, b); |
589 } | 590 } |
590 } | 591 } |
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 expectedArgumentNames); | 1407 expectedArgumentNames); |
1407 } | 1408 } |
1408 | 1409 |
1409 /** | 1410 /** |
1410 * Called by generated code when a static field's initializer references the | 1411 * Called by generated code when a static field's initializer references the |
1411 * field that is currently being initialized. | 1412 * field that is currently being initialized. |
1412 */ | 1413 */ |
1413 void throwCyclicInit(String staticName) { | 1414 void throwCyclicInit(String staticName) { |
1414 throw new RuntimeError("Cyclic initialization for static $staticName"); | 1415 throw new RuntimeError("Cyclic initialization for static $staticName"); |
1415 } | 1416 } |
OLD | NEW |