| 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_CURRENT_ISOLATE_CONTEXT, | 12 JS_CURRENT_ISOLATE_CONTEXT, |
| 13 JS_DART_OBJECT_CONSTRUCTOR, | 13 JS_DART_OBJECT_CONSTRUCTOR, |
| 14 JS_IS_INDEXABLE_FIELD_NAME, | 14 JS_IS_INDEXABLE_FIELD_NAME, |
| 15 JS_OBJECT_CLASS_NAME, | 15 JS_OBJECT_CLASS_NAME, |
| 16 JS_OPERATOR_AS_PREFIX, | 16 JS_OPERATOR_AS_PREFIX, |
| 17 JS_OPERATOR_IS_PREFIX, | 17 JS_OPERATOR_IS_PREFIX, |
| 18 RAW_DART_FUNCTION_REF; | 18 RAW_DART_FUNCTION_REF; |
| 19 import 'dart:_interceptors'; | 19 import 'dart:_interceptors'; |
| 20 import "dart:_collection-dev" as _symbol_dev; | 20 import 'dart:_collection-dev' as _symbol_dev; |
| 21 import 'dart:_js_names' show mangledNames; |
| 21 | 22 |
| 22 part 'constant_map.dart'; | 23 part 'constant_map.dart'; |
| 23 part 'native_helper.dart'; | 24 part 'native_helper.dart'; |
| 24 part 'regexp_helper.dart'; | 25 part 'regexp_helper.dart'; |
| 25 part 'string_helper.dart'; | 26 part 'string_helper.dart'; |
| 26 part 'js_rti.dart'; | 27 part 'js_rti.dart'; |
| 27 | 28 |
| 28 bool isJsArray(var value) { | 29 bool isJsArray(var value) { |
| 29 return value != null && JS('bool', r'(#.constructor === Array)', value); | 30 return value != null && JS('bool', r'(#.constructor === Array)', value); |
| 30 } | 31 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 49 } else if (false == value) { | 50 } else if (false == value) { |
| 50 return 'false'; | 51 return 'false'; |
| 51 } else if (value == null) { | 52 } else if (value == null) { |
| 52 return 'null'; | 53 return 'null'; |
| 53 } | 54 } |
| 54 var res = value.toString(); | 55 var res = value.toString(); |
| 55 if (res is !String) throw new ArgumentError(value); | 56 if (res is !String) throw new ArgumentError(value); |
| 56 return res; | 57 return res; |
| 57 } | 58 } |
| 58 | 59 |
| 59 createInvocationMirror(name, internalName, type, arguments, argumentNames) { | 60 createInvocationMirror(String name, internalName, type, arguments, |
| 60 return new JSInvocationMirror(new _symbol_dev.Symbol.unvalidated(name), | 61 argumentNames) { |
| 62 return new JSInvocationMirror(name, |
| 61 internalName, | 63 internalName, |
| 62 type, | 64 type, |
| 63 arguments, | 65 arguments, |
| 66 argumentNames); |
| 67 } |
| 68 |
| 69 createUnmangledInvocationMirror(Symbol symbol, internalName, type, arguments, |
| 70 argumentNames) { |
| 71 return new JSInvocationMirror(symbol, |
| 72 internalName, |
| 73 type, |
| 74 arguments, |
| 64 argumentNames); | 75 argumentNames); |
| 65 } | 76 } |
| 66 | 77 |
| 67 class JSInvocationMirror implements Invocation { | 78 class JSInvocationMirror implements Invocation { |
| 68 static const METHOD = 0; | 79 static const METHOD = 0; |
| 69 static const GETTER = 1; | 80 static const GETTER = 1; |
| 70 static const SETTER = 2; | 81 static const SETTER = 2; |
| 71 | 82 |
| 72 final Symbol memberName; | 83 /// When [_memberName] is a String, it holds the mangled name of this |
| 84 /// invocation. When it is a Symbol, it holds the unmangled name. |
| 85 var /* String or Symbol */ _memberName; |
| 73 final String _internalName; | 86 final String _internalName; |
| 74 final int _kind; | 87 final int _kind; |
| 75 final List _arguments; | 88 final List _arguments; |
| 76 final List _namedArgumentNames; | 89 final List _namedArgumentNames; |
| 77 /** Map from argument name to index in _arguments. */ | 90 /** Map from argument name to index in _arguments. */ |
| 78 Map<String,dynamic> _namedIndices = null; | 91 Map<String,dynamic> _namedIndices = null; |
| 79 | 92 |
| 80 JSInvocationMirror(this.memberName, | 93 JSInvocationMirror(this._memberName, |
| 81 this._internalName, | 94 this._internalName, |
| 82 this._kind, | 95 this._kind, |
| 83 this._arguments, | 96 this._arguments, |
| 84 this._namedArgumentNames); | 97 this._namedArgumentNames); |
| 85 | 98 |
| 99 Symbol get memberName { |
| 100 if (_memberName is Symbol) return _memberName; |
| 101 String name = _memberName; |
| 102 String unmangledName = mangledNames[name]; |
| 103 if (unmangledName != null) { |
| 104 name = unmangledName.split(':')[0]; |
| 105 } |
| 106 _memberName = new _symbol_dev.Symbol.unvalidated(name); |
| 107 return _memberName; |
| 108 } |
| 109 |
| 86 bool get isMethod => _kind == METHOD; | 110 bool get isMethod => _kind == METHOD; |
| 87 bool get isGetter => _kind == GETTER; | 111 bool get isGetter => _kind == GETTER; |
| 88 bool get isSetter => _kind == SETTER; | 112 bool get isSetter => _kind == SETTER; |
| 89 bool get isAccessor => _kind != METHOD; | 113 bool get isAccessor => _kind != METHOD; |
| 90 | 114 |
| 91 List get positionalArguments { | 115 List get positionalArguments { |
| 92 if (isGetter) return null; | 116 if (isGetter) return null; |
| 93 var list = []; | 117 var list = []; |
| 94 var argumentCount = | 118 var argumentCount = |
| 95 _arguments.length - _namedArgumentNames.length; | 119 _arguments.length - _namedArgumentNames.length; |
| (...skipping 1353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1449 } | 1473 } |
| 1450 | 1474 |
| 1451 /** | 1475 /** |
| 1452 * Error thrown when a runtime error occurs. | 1476 * Error thrown when a runtime error occurs. |
| 1453 */ | 1477 */ |
| 1454 class RuntimeError implements Error { | 1478 class RuntimeError implements Error { |
| 1455 final message; | 1479 final message; |
| 1456 RuntimeError(this.message); | 1480 RuntimeError(this.message); |
| 1457 String toString() => "RuntimeError: $message"; | 1481 String toString() => "RuntimeError: $message"; |
| 1458 } | 1482 } |
| OLD | NEW |