| OLD | NEW |
| 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:_async_await_error_codes' as async_error_codes; | 7 import 'dart:_async_await_error_codes' as async_error_codes; |
| 8 | 8 |
| 9 import 'dart:_js_embedded_names' show | 9 import 'dart:_js_embedded_names' show |
| 10 DEFERRED_LIBRARY_URIS, | 10 DEFERRED_LIBRARY_URIS, |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 return JS('String', r'"" + (#)', value); | 203 return JS('String', r'"" + (#)', value); |
| 204 } | 204 } |
| 205 } else if (true == value) { | 205 } else if (true == value) { |
| 206 return 'true'; | 206 return 'true'; |
| 207 } else if (false == value) { | 207 } else if (false == value) { |
| 208 return 'false'; | 208 return 'false'; |
| 209 } else if (value == null) { | 209 } else if (value == null) { |
| 210 return 'null'; | 210 return 'null'; |
| 211 } | 211 } |
| 212 var res = value.toString(); | 212 var res = value.toString(); |
| 213 if (res is !String) throw _argumentError(value); | 213 if (res is !String) throw argumentErrorValue(value); |
| 214 return res; | 214 return res; |
| 215 } | 215 } |
| 216 | 216 |
| 217 createInvocationMirror(String name, internalName, kind, arguments, | 217 createInvocationMirror(String name, internalName, kind, arguments, |
| 218 argumentNames) { | 218 argumentNames) { |
| 219 return new JSInvocationMirror(name, | 219 return new JSInvocationMirror(name, |
| 220 internalName, | 220 internalName, |
| 221 kind, | 221 kind, |
| 222 arguments, | 222 arguments, |
| 223 argumentNames); | 223 argumentNames); |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 result = JS('String', | 874 result = JS('String', |
| 875 r'# + String.fromCharCode.apply(null, #.slice(#, #))', | 875 r'# + String.fromCharCode.apply(null, #.slice(#, #))', |
| 876 result, array, i, chunkEnd); | 876 result, array, i, chunkEnd); |
| 877 } | 877 } |
| 878 return result; | 878 return result; |
| 879 } | 879 } |
| 880 | 880 |
| 881 static String stringFromCodePoints(codePoints) { | 881 static String stringFromCodePoints(codePoints) { |
| 882 List<int> a = <int>[]; | 882 List<int> a = <int>[]; |
| 883 for (var i in codePoints) { | 883 for (var i in codePoints) { |
| 884 if (i is !int) throw _argumentError(i); | 884 if (i is !int) throw argumentErrorValue(i); |
| 885 if (i <= 0xffff) { | 885 if (i <= 0xffff) { |
| 886 a.add(i); | 886 a.add(i); |
| 887 } else if (i <= 0x10ffff) { | 887 } else if (i <= 0x10ffff) { |
| 888 a.add(0xd800 + ((((i - 0x10000) >> 10) & 0x3ff))); | 888 a.add(0xd800 + ((((i - 0x10000) >> 10) & 0x3ff))); |
| 889 a.add(0xdc00 + (i & 0x3ff)); | 889 a.add(0xdc00 + (i & 0x3ff)); |
| 890 } else { | 890 } else { |
| 891 throw _argumentError(i); | 891 throw argumentErrorValue(i); |
| 892 } | 892 } |
| 893 } | 893 } |
| 894 return _fromCharCodeApply(a); | 894 return _fromCharCodeApply(a); |
| 895 } | 895 } |
| 896 | 896 |
| 897 static String stringFromCharCodes(charCodes) { | 897 static String stringFromCharCodes(charCodes) { |
| 898 for (var i in charCodes) { | 898 for (var i in charCodes) { |
| 899 if (i is !int) throw _argumentError(i); | 899 if (i is !int) throw argumentErrorValue(i); |
| 900 if (i < 0) throw _argumentError(i); | 900 if (i < 0) throw argumentErrorValue(i); |
| 901 if (i > 0xffff) return stringFromCodePoints(charCodes); | 901 if (i > 0xffff) return stringFromCodePoints(charCodes); |
| 902 } | 902 } |
| 903 return _fromCharCodeApply(charCodes); | 903 return _fromCharCodeApply(charCodes); |
| 904 } | 904 } |
| 905 | 905 |
| 906 // [start] and [end] are validated. | 906 // [start] and [end] are validated. |
| 907 static String stringFromNativeUint8List( | 907 static String stringFromNativeUint8List( |
| 908 NativeUint8List charCodes, int start, int end) { | 908 NativeUint8List charCodes, int start, int end) { |
| 909 const kMaxApply = 500; | 909 const kMaxApply = 500; |
| 910 if (end <= kMaxApply && start == 0 && end == charCodes.length) { | 910 if (end <= kMaxApply && start == 0 && end == charCodes.length) { |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1079 | 1079 |
| 1080 static getWeekday(receiver) { | 1080 static getWeekday(receiver) { |
| 1081 int weekday = (receiver.isUtc) | 1081 int weekday = (receiver.isUtc) |
| 1082 ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver)) | 1082 ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver)) |
| 1083 : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver)); | 1083 : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver)); |
| 1084 // Adjust by one because JS weeks start on Sunday. | 1084 // Adjust by one because JS weeks start on Sunday. |
| 1085 return (weekday + 6) % 7 + 1; | 1085 return (weekday + 6) % 7 + 1; |
| 1086 } | 1086 } |
| 1087 | 1087 |
| 1088 static valueFromDateString(str) { | 1088 static valueFromDateString(str) { |
| 1089 if (str is !String) throw _argumentError(str); | 1089 if (str is !String) throw argumentErrorValue(str); |
| 1090 var value = JS('num', r'Date.parse(#)', str); | 1090 var value = JS('num', r'Date.parse(#)', str); |
| 1091 if (value.isNaN) throw _argumentError(str); | 1091 if (value.isNaN) throw argumentErrorValue(str); |
| 1092 return value; | 1092 return value; |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 static getProperty(object, key) { | 1095 static getProperty(object, key) { |
| 1096 if (object == null || object is bool || object is num || object is String) { | 1096 if (object == null || object is bool || object is num || object is String) { |
| 1097 throw _argumentError(object); | 1097 throw argumentErrorValue(object); |
| 1098 } | 1098 } |
| 1099 return JS('var', '#[#]', object, key); | 1099 return JS('var', '#[#]', object, key); |
| 1100 } | 1100 } |
| 1101 | 1101 |
| 1102 static void setProperty(object, key, value) { | 1102 static void setProperty(object, key, value) { |
| 1103 if (object == null || object is bool || object is num || object is String) { | 1103 if (object == null || object is bool || object is num || object is String) { |
| 1104 throw _argumentError(object); | 1104 throw argumentErrorValue(object); |
| 1105 } | 1105 } |
| 1106 JS('void', '#[#] = #', object, key, value); | 1106 JS('void', '#[#] = #', object, key, value); |
| 1107 } | 1107 } |
| 1108 | 1108 |
| 1109 static functionNoSuchMethod(function, | 1109 static functionNoSuchMethod(function, |
| 1110 List positionalArguments, | 1110 List positionalArguments, |
| 1111 Map<String, dynamic> namedArguments) { | 1111 Map<String, dynamic> namedArguments) { |
| 1112 int argumentCount = 0; | 1112 int argumentCount = 0; |
| 1113 List arguments = []; | 1113 List arguments = []; |
| 1114 List namedArgumentList = []; | 1114 List namedArgumentList = []; |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 } | 1383 } |
| 1384 } | 1384 } |
| 1385 | 1385 |
| 1386 /** | 1386 /** |
| 1387 * Called by generated code to throw an illegal-argument exception, | 1387 * Called by generated code to throw an illegal-argument exception, |
| 1388 * for example, if a non-integer index is given to an optimized | 1388 * for example, if a non-integer index is given to an optimized |
| 1389 * indexed access. | 1389 * indexed access. |
| 1390 */ | 1390 */ |
| 1391 @NoInline() | 1391 @NoInline() |
| 1392 iae(argument) { | 1392 iae(argument) { |
| 1393 throw _argumentError(argument); | 1393 throw argumentErrorValue(argument); |
| 1394 } | 1394 } |
| 1395 | 1395 |
| 1396 /** | 1396 /** |
| 1397 * Called by generated code to throw an index-out-of-range exception, for | 1397 * Called by generated code to throw an index-out-of-range exception, for |
| 1398 * example, if a bounds check fails in an optimized indexed access. This may | 1398 * example, if a bounds check fails in an optimized indexed access. This may |
| 1399 * also be called when the index is not an integer, in which case it throws an | 1399 * also be called when the index is not an integer, in which case it throws an |
| 1400 * illegal-argument exception instead, like [iae], or when the receiver is null. | 1400 * illegal-argument exception instead, like [iae], or when the receiver is null. |
| 1401 */ | 1401 */ |
| 1402 @NoInline() | 1402 @NoInline() |
| 1403 ioore(receiver, index) { | 1403 ioore(receiver, index) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1422 return new RangeError.value(index, 'index'); | 1422 return new RangeError.value(index, 'index'); |
| 1423 } | 1423 } |
| 1424 | 1424 |
| 1425 | 1425 |
| 1426 stringLastIndexOfUnchecked(receiver, element, start) | 1426 stringLastIndexOfUnchecked(receiver, element, start) |
| 1427 => JS('int', r'#.lastIndexOf(#, #)', receiver, element, start); | 1427 => JS('int', r'#.lastIndexOf(#, #)', receiver, element, start); |
| 1428 | 1428 |
| 1429 | 1429 |
| 1430 /// 'factory' for constructing ArgumentError.value to keep the call sites small. | 1430 /// 'factory' for constructing ArgumentError.value to keep the call sites small. |
| 1431 @NoInline() | 1431 @NoInline() |
| 1432 ArgumentError _argumentError(object) { | 1432 ArgumentError argumentErrorValue(object) { |
| 1433 return new ArgumentError.value(object); | 1433 return new ArgumentError.value(object); |
| 1434 } | 1434 } |
| 1435 | 1435 |
| 1436 checkNull(object) { | 1436 checkNull(object) { |
| 1437 if (object == null) throw _argumentError(object); | 1437 if (object == null) throw argumentErrorValue(object); |
| 1438 return object; | 1438 return object; |
| 1439 } | 1439 } |
| 1440 | 1440 |
| 1441 checkNum(value) { | 1441 checkNum(value) { |
| 1442 if (value is !num) throw _argumentError(value); | 1442 if (value is !num) throw argumentErrorValue(value); |
| 1443 return value; | 1443 return value; |
| 1444 } | 1444 } |
| 1445 | 1445 |
| 1446 checkInt(value) { | 1446 checkInt(value) { |
| 1447 if (value is !int) throw _argumentError(value); | 1447 if (value is !int) throw argumentErrorValue(value); |
| 1448 return value; | 1448 return value; |
| 1449 } | 1449 } |
| 1450 | 1450 |
| 1451 checkBool(value) { | 1451 checkBool(value) { |
| 1452 if (value is !bool) throw _argumentError(value); | 1452 if (value is !bool) throw argumentErrorValue(value); |
| 1453 return value; | 1453 return value; |
| 1454 } | 1454 } |
| 1455 | 1455 |
| 1456 checkString(value) { | 1456 checkString(value) { |
| 1457 if (value is !String) throw _argumentError(value); | 1457 if (value is !String) throw argumentErrorValue(value); |
| 1458 return value; | 1458 return value; |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 /** | 1461 /** |
| 1462 * Wrap the given Dart object and record a stack trace. | 1462 * Wrap the given Dart object and record a stack trace. |
| 1463 * | 1463 * |
| 1464 * The code in [unwrapException] deals with getting the original Dart | 1464 * The code in [unwrapException] deals with getting the original Dart |
| 1465 * object out of the wrapper again. | 1465 * object out of the wrapper again. |
| 1466 */ | 1466 */ |
| 1467 @NoInline() | 1467 @NoInline() |
| (...skipping 2661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4129 // This is a function that will return a helper function that does the | 4129 // This is a function that will return a helper function that does the |
| 4130 // iteration of the sync*. | 4130 // iteration of the sync*. |
| 4131 // | 4131 // |
| 4132 // Each invocation should give a body with fresh state. | 4132 // Each invocation should give a body with fresh state. |
| 4133 final dynamic /* js function */ _outerHelper; | 4133 final dynamic /* js function */ _outerHelper; |
| 4134 | 4134 |
| 4135 SyncStarIterable(this._outerHelper); | 4135 SyncStarIterable(this._outerHelper); |
| 4136 | 4136 |
| 4137 Iterator get iterator => new SyncStarIterator(JS('', '#()', _outerHelper)); | 4137 Iterator get iterator => new SyncStarIterator(JS('', '#()', _outerHelper)); |
| 4138 } | 4138 } |
| OLD | NEW |