Index: pkg/dev_compiler/tool/input_sdk/private/js_helper.dart |
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart |
index 28cd859ebd87077efe41558ab01a796d0eaf4767..b8c96a537c652438517240536b69ea26e5876e01 100644 |
--- a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart |
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart |
@@ -8,15 +8,11 @@ import 'dart:collection'; |
import 'dart:_debugger' show stackTraceMapper; |
-import 'dart:_foreign_helper' show |
- JS, |
- JS_STRING_CONCAT; |
+import 'dart:_foreign_helper' show JS, JS_STRING_CONCAT; |
import 'dart:_interceptors'; |
-import 'dart:_internal' show |
- EfficientLengthIterable, |
- MappedIterable, |
- IterableElementError; |
+import 'dart:_internal' |
+ show EfficientLengthIterable, MappedIterable, IterableElementError; |
import 'dart:_native_typed_data'; |
@@ -75,12 +71,12 @@ class Primitives { |
return handleError(source); |
} |
- static int parseInt(String source, |
- int radix, |
- int handleError(String source)) { |
+ static int parseInt( |
+ String source, int radix, int handleError(String source)) { |
checkString(source); |
var re = JS('', r'/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i'); |
- var/*=JSArray<String>*/ match = JS('JSExtendableArray|Null', '#.exec(#)', re, source); |
+ var/*=JSArray<String>*/ match = |
+ JS('JSExtendableArray|Null', '#.exec(#)', re, source); |
int digitsIndex = 1; |
int hexIndex = 2; |
int decimalIndex = 3; |
@@ -150,8 +146,8 @@ class Primitives { |
} |
@NoInline() |
- static double _parseDoubleError(String source, |
- double handleError(String source)) { |
+ static double _parseDoubleError( |
+ String source, double handleError(String source)) { |
if (handleError == null) { |
throw new FormatException('Invalid double', source); |
} |
@@ -166,10 +162,11 @@ class Primitives { |
// - [+/-]Infinity |
// - a Dart double literal |
// We do allow leading or trailing whitespace. |
- if (!JS('bool', |
- r'/^\s*[+-]?(?:Infinity|NaN|' |
- r'(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(#)', |
- source)) { |
+ if (!JS( |
+ 'bool', |
+ r'/^\s*[+-]?(?:Infinity|NaN|' |
+ r'(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(#)', |
+ source)) { |
return _parseDoubleError(source, handleError); |
} |
var result = JS('num', r'parseFloat(#)', source); |
@@ -221,14 +218,15 @@ class Primitives { |
static Function timerTicks; |
static bool get isD8 { |
- return JS('bool', |
- 'typeof version == "function"' |
- ' && typeof os == "object" && "system" in os'); |
+ return JS( |
+ 'bool', |
+ 'typeof version == "function"' |
+ ' && typeof os == "object" && "system" in os'); |
} |
static bool get isJsshell { |
- return JS('bool', |
- 'typeof version == "function" && typeof system == "function"'); |
+ return JS( |
+ 'bool', 'typeof version == "function" && typeof system == "function"'); |
} |
static String currentUri() { |
@@ -251,9 +249,13 @@ class Primitives { |
String result = ''; |
for (int i = 0; i < end; i += kMaxApply) { |
int chunkEnd = (i + kMaxApply < end) ? i + kMaxApply : end; |
- result = JS('String', |
+ result = JS( |
+ 'String', |
r'# + String.fromCharCode.apply(null, #.slice(#, #))', |
- result, array, i, chunkEnd); |
+ result, |
+ array, |
+ i, |
+ chunkEnd); |
} |
return result; |
} |
@@ -261,7 +263,7 @@ class Primitives { |
static String stringFromCodePoints(/*=JSArray<int>*/ codePoints) { |
List<int> a = <int>[]; |
for (var i in codePoints) { |
- if (i is !int) throw argumentErrorValue(i); |
+ if (i is! int) throw argumentErrorValue(i); |
if (i <= 0xffff) { |
a.add(i); |
} else if (i <= 0x10ffff) { |
@@ -276,7 +278,7 @@ class Primitives { |
static String stringFromCharCodes(/*=JSArray<int>*/ charCodes) { |
for (var i in charCodes) { |
- if (i is !int) throw argumentErrorValue(i); |
+ if (i is! int) throw argumentErrorValue(i); |
if (i < 0) throw argumentErrorValue(i); |
if (i > 0xffff) return stringFromCodePoints(charCodes); |
} |
@@ -293,14 +295,17 @@ class Primitives { |
String result = ''; |
for (int i = start; i < end; i += kMaxApply) { |
int chunkEnd = (i + kMaxApply < end) ? i + kMaxApply : end; |
- result = JS('String', |
+ result = JS( |
+ 'String', |
r'# + String.fromCharCode.apply(null, #.subarray(#, #))', |
- result, charCodes, i, chunkEnd); |
+ result, |
+ charCodes, |
+ i, |
+ chunkEnd); |
} |
return result; |
} |
- |
static String stringFromCharCode(int charCode) { |
if (0 <= charCode) { |
if (charCode <= 0xffff) { |
@@ -310,7 +315,7 @@ class Primitives { |
var bits = charCode - 0x10000; |
var low = 0xDC00 | (bits & 0x3ff); |
var high = 0xD800 | (bits >> 10); |
- return JS('String', 'String.fromCharCode(#, #)', high, low); |
+ return JS('String', 'String.fromCharCode(#, #)', high, low); |
} |
} |
throw new RangeError.range(charCode, 0, 0x10ffff); |
@@ -334,19 +339,20 @@ class Primitives { |
// Internet Explorer 10+ emits the zone name without parenthesis: |
// Example: Thu Oct 31 14:07:44 PDT 2013 |
- match = JS('JSArray|Null', |
- // Thu followed by a space. |
- r'/^[A-Z,a-z]{3}\s' |
- // Oct 31 followed by space. |
- r'[A-Z,a-z]{3}\s\d+\s' |
- // Time followed by a space. |
- r'\d{2}:\d{2}:\d{2}\s' |
- // The time zone name followed by a space. |
- r'([A-Z]{3,5})\s' |
- // The year. |
- r'\d{4}$/' |
- '.exec(#.toString())', |
- d); |
+ match = JS( |
+ 'JSArray|Null', |
+ // Thu followed by a space. |
+ r'/^[A-Z,a-z]{3}\s' |
+ // Oct 31 followed by space. |
+ r'[A-Z,a-z]{3}\s\d+\s' |
+ // Time followed by a space. |
+ r'\d{2}:\d{2}:\d{2}\s' |
+ // The time zone name followed by a space. |
+ r'([A-Z]{3,5})\s' |
+ // The year. |
+ r'\d{4}$/' |
+ '.exec(#.toString())', |
+ d); |
if (match != null) return match[1]; |
// IE 9 and Opera don't provide the zone name. We fall back to emitting the |
@@ -364,7 +370,7 @@ class Primitives { |
} |
static num valueFromDecomposedDate(int years, int month, int day, int hours, |
- int minutes, int seconds, int milliseconds, bool isUtc) { |
+ int minutes, int seconds, int milliseconds, bool isUtc) { |
final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000; |
checkInt(years); |
checkInt(month); |
@@ -377,11 +383,11 @@ class Primitives { |
var jsMonth = month - 1; |
num value; |
if (isUtc) { |
- value = JS('num', r'Date.UTC(#, #, #, #, #, #, #)', |
- years, jsMonth, day, hours, minutes, seconds, milliseconds); |
+ value = JS('num', r'Date.UTC(#, #, #, #, #, #, #)', years, jsMonth, day, |
+ hours, minutes, seconds, milliseconds); |
} else { |
- value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()', |
- years, jsMonth, day, hours, minutes, seconds, milliseconds); |
+ value = JS('num', r'new Date(#, #, #, #, #, #, #).valueOf()', years, |
+ jsMonth, day, hours, minutes, seconds, milliseconds); |
} |
if (value.isNaN || |
value < -MAX_MILLISECONDS_SINCE_EPOCH || |
@@ -406,7 +412,7 @@ class Primitives { |
static lazyAsJsDate(DateTime receiver) { |
if (JS('bool', r'#.date === (void 0)', receiver)) { |
JS('void', r'#.date = new Date(#)', receiver, |
- receiver.millisecondsSinceEpoch); |
+ receiver.millisecondsSinceEpoch); |
} |
return JS('var', r'#.date', receiver); |
} |
@@ -417,56 +423,56 @@ class Primitives { |
static getYear(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getFullYear() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getFullYear() + 0)', lazyAsJsDate(receiver)); |
} |
static getMonth(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'#.getUTCMonth() + 1', lazyAsJsDate(receiver)) |
- : JS('int', r'#.getMonth() + 1', lazyAsJsDate(receiver)); |
+ ? JS('int', r'#.getUTCMonth() + 1', lazyAsJsDate(receiver)) |
+ : JS('int', r'#.getMonth() + 1', lazyAsJsDate(receiver)); |
} |
static getDay(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCDate() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getDate() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCDate() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getDate() + 0)', lazyAsJsDate(receiver)); |
} |
static getHours(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCHours() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getHours() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCHours() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getHours() + 0)', lazyAsJsDate(receiver)); |
} |
static getMinutes(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCMinutes() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getMinutes() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCMinutes() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getMinutes() + 0)', lazyAsJsDate(receiver)); |
} |
static getSeconds(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCSeconds() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getSeconds() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCSeconds() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getSeconds() + 0)', lazyAsJsDate(receiver)); |
} |
static getMilliseconds(DateTime receiver) { |
return (receiver.isUtc) |
- ? JS('int', r'(#.getUTCMilliseconds() + 0)', lazyAsJsDate(receiver)) |
- : JS('int', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver)); |
+ ? JS('int', r'(#.getUTCMilliseconds() + 0)', lazyAsJsDate(receiver)) |
+ : JS('int', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver)); |
} |
static getWeekday(DateTime receiver) { |
int weekday = (receiver.isUtc) |
- ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver)) |
- : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver)); |
+ ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver)) |
+ : JS('int', r'#.getDay() + 0', lazyAsJsDate(receiver)); |
// Adjust by one because JS weeks start on Sunday. |
return (weekday + 6) % 7 + 1; |
} |
static valueFromDateString(str) { |
- if (str is !String) throw argumentErrorValue(str); |
+ if (str is! String) throw argumentErrorValue(str); |
var value = JS('num', r'Date.parse(#)', str); |
if (value.isNaN) throw argumentErrorValue(str); |
return value; |
@@ -490,13 +496,14 @@ class Primitives { |
return getTraceFromException(JS('', r'#.$thrownJsError', error)); |
} |
} |
+ |
/** |
* Diagnoses an indexing error. Returns the ArgumentError or RangeError that |
* describes the problem. |
*/ |
@NoInline() |
Error diagnoseIndexError(indexable, index) { |
- if (index is !int) return new ArgumentError.value(index, 'index'); |
+ if (index is! int) return new ArgumentError.value(index, 'index'); |
int length = indexable.length; |
// The following returns the same error that would be thrown by calling |
// [RangeError.checkValidIndex] with no optional parameters provided. |
@@ -531,9 +538,8 @@ Error diagnoseRangeError(start, end, length) { |
return new ArgumentError.value(end, "end"); |
} |
-stringLastIndexOfUnchecked(receiver, element, start) |
- => JS('int', r'#.lastIndexOf(#, #)', receiver, element, start); |
- |
+stringLastIndexOfUnchecked(receiver, element, start) => |
+ JS('int', r'#.lastIndexOf(#, #)', receiver, element, start); |
/// 'factory' for constructing ArgumentError.value to keep the call sites small. |
@NoInline() |
@@ -547,22 +553,22 @@ checkNull(object) { |
} |
checkNum(value) { |
- if (value is !num) throw argumentErrorValue(value); |
+ if (value is! num) throw argumentErrorValue(value); |
return value; |
} |
checkInt(value) { |
- if (value is !int) throw argumentErrorValue(value); |
+ if (value is! int) throw argumentErrorValue(value); |
return value; |
} |
checkBool(value) { |
- if (value is !bool) throw argumentErrorValue(value); |
+ if (value is! bool) throw argumentErrorValue(value); |
return value; |
} |
checkString(value) { |
- if (value is !String) throw argumentErrorValue(value); |
+ if (value is! String) throw argumentErrorValue(value); |
return value; |
} |
@@ -574,7 +580,6 @@ throwAbstractClassInstantiationError(className) { |
throw new AbstractClassInstantiationError(className); |
} |
- |
@NoInline() |
throwConcurrentModificationError(collection) { |
throw new ConcurrentModificationError(collection); |
@@ -776,8 +781,7 @@ class JSName { |
* objects that support integer indexing. This interface is not |
* visible to anyone, and is only injected into special libraries. |
*/ |
-abstract class JavaScriptIndexingBehavior { |
-} |
+abstract class JavaScriptIndexingBehavior {} |
// TODO(lrn): These exceptions should be implemented in core. |
// When they are, remove the 'Implementation' here. |
@@ -792,7 +796,7 @@ class TypeErrorImplementation extends Error implements TypeError { |
// TODO(sra): Include [value] in message. |
TypeErrorImplementation(Object value, Object actualType, Object expectedType) |
: message = "Type '${actualType}' is not a subtype " |
- "of type '${expectedType}'"; |
+ "of type '${expectedType}'"; |
TypeErrorImplementation.fromMessage(String this.message); |
@@ -810,7 +814,7 @@ class CastErrorImplementation extends Error implements CastError { |
// TODO(sra): Include [value] in message. |
CastErrorImplementation(Object value, Object actualType, Object expectedType) |
: message = "CastError: Casting value of type '$actualType' to" |
- " incompatible type '$expectedType'"; |
+ " incompatible type '$expectedType'"; |
String toString() => message; |
} |
@@ -822,7 +826,7 @@ class StrongModeTypeError extends Error implements TypeError, StrongModeError { |
// TODO(sra): Include [value] in message. |
StrongModeTypeError(Object value, Object actualType, Object expectedType) |
: message = "Type '${actualType}' is not a subtype " |
- "of type '${expectedType}' in strong mode"; |
+ "of type '${expectedType}' in strong mode"; |
String toString() => message; |
} |
@@ -833,7 +837,7 @@ class StrongModeCastError extends Error implements CastError, StrongModeError { |
// TODO(sra): Include [value] in message. |
StrongModeCastError(Object value, Object actualType, Object expectedType) |
: message = "CastError: Casting value of type '$actualType' to" |
- " type '$expectedType' which is incompatible in strong mode"; |
+ " type '$expectedType' which is incompatible in strong mode"; |
String toString() => message; |
} |
@@ -885,7 +889,6 @@ String jsonEncodeNative(String string) { |
return JS("String", "JSON.stringify(#)", string); |
} |
- |
// TODO(jmesserly): this adapter is to work around |
// https://github.com/dart-lang/sdk/issues/28320 |
class SyncIterator<E> implements Iterator<E> { |