Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/lib/js_helper.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart |
| index 6dae54a419aa7bc9389316cf0fd57520654e820c..bae31a14c1b1475267c6573ec4154d06a7338f19 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart |
| @@ -302,7 +302,8 @@ index$slow(var a, var index) { |
| if (index < 0 || index >= a.length) { |
| throw new RangeError.value(index); |
| } |
| - return JS('Object', r'#[#]', a, index); |
| + // return JS('Object', r'#[#]', a, index); |
|
ngeoffray
2012/11/14 21:17:39
Remove commented line.
sra1
2012/11/15 00:09:10
Done.
|
| + return JS('', r'#[#]', a, index); |
| } |
| return UNINTERCEPTED(a[index]); |
| } |
| @@ -316,7 +317,7 @@ void indexSet$slow(var a, var index, var value) { |
| throw new RangeError.value(index); |
| } |
| checkMutable(a, 'indexed set'); |
| - JS('Object', r'#[#] = #', a, index, value); |
| + JS('void', r'#[#] = #', a, index, value); |
| return; |
| } |
| UNINTERCEPTED(a[index] = value); |
| @@ -347,7 +348,8 @@ class ListIterator<T> implements Iterator<T> { |
| bool get hasNext => i < JS('int', r'#.length', list); |
| T next() { |
| if (!hasNext) throw new StateError("No more elements"); |
| - var value = JS('Object', r'#[#]', list, i); |
| + // var value = JS('Object', r'#[#]', list, i); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| + var value = JS('', r'#[#]', list, i); |
| i += 1; |
| return value; |
| } |
| @@ -464,7 +466,7 @@ class Primitives { |
| static int parseInt(String string) { |
| checkString(string); |
| - var match = JS('List', |
| + var match = JS('=List', |
| r'/^\s*[+-]?(?:0(x)[a-f0-9]+|\d+)\s*$/i.exec(#)', |
| string); |
| if (match == null) { |
| @@ -522,11 +524,14 @@ class Primitives { |
| } |
| static List newList(length) { |
| - if (length == null) return JS('Object', r'new Array()'); |
| + // TODO(sra): For good concrete type analysis we need the JS-type to |
| + // specifically name the JavaScript Array implementation. 'List' matches |
| + // all the dart:html types that implement List<T>. |
| + if (length == null) return JS('=List', r'new Array()'); |
| if ((length is !int) || (length < 0)) { |
| throw new ArgumentError(length); |
| } |
| - var result = JS('Object', r'new Array(#)', length); |
| + var result = JS('=List', r'new Array(#)', length); |
| JS('void', r'#.fixed$length = #', result, true); |
| return result; |
| } |
| @@ -583,7 +588,8 @@ class Primitives { |
| } |
| static patchUpY2K(value, years, isUtc) { |
| - var date = JS('Object', r'new Date(#)', value); |
| + // var date = JS('Object', r'new Date(#)', value); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| + var date = JS('', r'new Date(#)', value); |
| if (isUtc) { |
| JS('num', r'#.setUTCFullYear(#)', date, years); |
| } else { |
| @@ -895,7 +901,8 @@ class MathNatives { |
| */ |
| $throw(ex) { |
| if (ex == null) ex = const NullPointerException(); |
| - var jsError = JS('Object', r'new Error()'); |
| + // var jsError = JS('Object', r'new Error()'); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| + var jsError = JS('var', r'new Error()'); |
| JS('void', r'#.name = #', jsError, ex); |
| JS('void', r'#.description = #', jsError, ex); |
| JS('void', r'#.dartException = #', jsError, ex); |
| @@ -910,7 +917,8 @@ $throw(ex) { |
| * JavaScript Error to which we have added a property 'dartException' |
| * which holds a Dart object. |
| */ |
| -toStringWrapper() => JS('Object', r'this.dartException').toString(); |
| +// toStringWrapper() => JS('Object', r'this.dartException').toString(); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| +toStringWrapper() => JS('', r'this.dartException').toString(); |
| makeLiteralListConst(list) { |
| JS('bool', r'#.immutable$list = #', list, true); |
| @@ -938,7 +946,8 @@ unwrapException(ex) { |
| // Note that we are checking if the object has the property. If it |
| // has, it could be set to null if the thrown value is null. |
| if (JS('bool', r'"dartException" in #', ex)) { |
| - return JS('Object', r'#.dartException', ex); |
| + // return JS('Object', r'#.dartException', ex); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| + return JS('', r'#.dartException', ex); |
| } |
| // Grab hold of the exception message. This field is available on |
| @@ -1110,6 +1119,23 @@ abstract class Dynamic_ { |
| } |
| /** |
| + * A metadata annotation describing the types instantiated by a native element. |
| + */ |
| +class Creates { |
| + final String types; |
| + const Creates(this.types); |
| +} |
| + |
| +/** |
| + * A metadata annotation describing the types returned or yielded by a native |
| + * element. |
| + */ |
| +class Returns { |
| + final String types; |
| + const Returns(this.types); |
| +} |
| + |
| +/** |
| * Represents the type of Null. The compiler treats this specially. |
| * TODO(lrn): Null should be defined in core. It's a class, like int. |
| * It just happens to act differently in assignability tests and, |
| @@ -1480,6 +1506,7 @@ Type getOrCreateCachedRuntimeType(String key) { |
| } |
| String getRuntimeTypeString(var object) { |
| - var typeInfo = JS('Object', r'#.builtin$typeInfo', object); |
| + //var typeInfo = JS('Object', r'#.builtin$typeInfo', object); |
|
ngeoffray
2012/11/14 21:17:39
ditto
sra1
2012/11/15 00:09:10
Done.
|
| + var typeInfo = JS('var', r'#.builtin$typeInfo', object); |
| return JS('String', r'#.runtimeType', typeInfo); |
| } |