Fix type error in js_dart2js.dart caught by DDC.
BUG=
R=vsm@google.com
Review-Url: https://codereview.chromium.org/2611423002 .
diff --git a/pkg/dev_compiler/lib/js/amd/dart_sdk.js b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
index 1802f10..9d6ddd8 100644
--- a/pkg/dev_compiler/lib/js/amd/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/amd/dart_sdk.js
@@ -882,7 +882,6 @@
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let ListToIsolate = () => (ListToIsolate = dart.constFn(dart.definiteFunctionType(isolate.Isolate, [core.List])))();
let dynamicTo_DartObject = () => (dynamicTo_DartObject = dart.constFn(dart.definiteFunctionType(js._DartObject, [dart.dynamic])))();
- let dynamicToJsObject = () => (dynamicToJsObject = dart.constFn(dart.definiteFunctionType(js.JsObject, [dart.dynamic])))();
let dynamicAnddynamicAndFnToObject = () => (dynamicAnddynamicAndFnToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic, dart.dynamic, dynamicTodynamic()])))();
let FToF = () => (FToF = dart.constFn(dart.definiteFunctionType(F => [F, [F]])))();
let FunctionToFunction = () => (FunctionToFunction = dart.constFn(dart.definiteFunctionType(core.Function, [core.Function])))();
@@ -52595,7 +52594,7 @@
});
dart.defineLazy(js, {
get context() {
- return js._wrapToDart(js._global);
+ return js.JsObject._check(js._wrapToDart(js._global));
}
});
const _jsObject = Symbol('_jsObject');
@@ -52608,22 +52607,22 @@
if (arguments$ === void 0) arguments$ = null;
let ctor = constructor[_jsObject];
if (arguments$ == null) {
- return js._wrapToDart(new ctor());
+ return js.JsObject._check(js._wrapToDart(new ctor()));
}
let unwrapped = core.List.from(arguments$[dartx.map](dart.dynamic)(js._convertToJS));
- return js._wrapToDart(new ctor(...unwrapped));
+ return js.JsObject._check(js._wrapToDart(new ctor(...unwrapped)));
}
static fromBrowserObject(object) {
if (typeof object == 'number' || typeof object == 'string' || typeof object == 'boolean' || object == null) {
dart.throw(new core.ArgumentError("object cannot be a num, string, bool, or null"));
}
- return js._wrapToDart(js._convertToJS(object));
+ return js.JsObject._check(js._wrapToDart(js._convertToJS(object)));
}
static jsify(object) {
if (!core.Map.is(object) && !core.Iterable.is(object)) {
dart.throw(new core.ArgumentError("object must be a Map or Iterable"));
}
- return js._wrapToDart(js.JsObject._convertDataTree(object));
+ return js.JsObject._check(js._wrapToDart(js.JsObject._convertDataTree(object)));
}
static _convertDataTree(data) {
let _convertedObjects = collection.HashMap.identity();
@@ -52951,9 +52950,9 @@
};
dart.fn(js._convertToDart, dynamicToObject());
js._wrapToDart = function(o) {
- return js.JsObject._check(js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper));
+ return js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper);
};
- dart.fn(js._wrapToDart, dynamicToJsObject());
+ dart.fn(js._wrapToDart, dynamicToObject());
js._wrapToDartHelper = function(o) {
if (typeof o == "function") {
return new js.JsFunction._fromJs(o);
@@ -52963,7 +52962,7 @@
}
return new js.JsObject._fromJs(o);
};
- dart.fn(js._wrapToDartHelper, dynamicToJsObject());
+ dart.fn(js._wrapToDartHelper, dynamicToObject());
dart.defineLazy(js, {
get _dartProxies() {
return new WeakMap();
diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
index 70e86d0..2b4c910 100644
--- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
@@ -882,7 +882,6 @@
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let ListToIsolate = () => (ListToIsolate = dart.constFn(dart.definiteFunctionType(isolate.Isolate, [core.List])))();
let dynamicTo_DartObject = () => (dynamicTo_DartObject = dart.constFn(dart.definiteFunctionType(js._DartObject, [dart.dynamic])))();
- let dynamicToJsObject = () => (dynamicToJsObject = dart.constFn(dart.definiteFunctionType(js.JsObject, [dart.dynamic])))();
let dynamicAnddynamicAndFnToObject = () => (dynamicAnddynamicAndFnToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic, dart.dynamic, dynamicTodynamic()])))();
let FToF = () => (FToF = dart.constFn(dart.definiteFunctionType(F => [F, [F]])))();
let FunctionToFunction = () => (FunctionToFunction = dart.constFn(dart.definiteFunctionType(core.Function, [core.Function])))();
@@ -52595,7 +52594,7 @@
});
dart.defineLazy(js, {
get context() {
- return js._wrapToDart(js._global);
+ return js.JsObject._check(js._wrapToDart(js._global));
}
});
const _jsObject = Symbol('_jsObject');
@@ -52608,22 +52607,22 @@
if (arguments$ === void 0) arguments$ = null;
let ctor = constructor[_jsObject];
if (arguments$ == null) {
- return js._wrapToDart(new ctor());
+ return js.JsObject._check(js._wrapToDart(new ctor()));
}
let unwrapped = core.List.from(arguments$[dartx.map](dart.dynamic)(js._convertToJS));
- return js._wrapToDart(new ctor(...unwrapped));
+ return js.JsObject._check(js._wrapToDart(new ctor(...unwrapped)));
}
static fromBrowserObject(object) {
if (typeof object == 'number' || typeof object == 'string' || typeof object == 'boolean' || object == null) {
dart.throw(new core.ArgumentError("object cannot be a num, string, bool, or null"));
}
- return js._wrapToDart(js._convertToJS(object));
+ return js.JsObject._check(js._wrapToDart(js._convertToJS(object)));
}
static jsify(object) {
if (!core.Map.is(object) && !core.Iterable.is(object)) {
dart.throw(new core.ArgumentError("object must be a Map or Iterable"));
}
- return js._wrapToDart(js.JsObject._convertDataTree(object));
+ return js.JsObject._check(js._wrapToDart(js.JsObject._convertDataTree(object)));
}
static _convertDataTree(data) {
let _convertedObjects = collection.HashMap.identity();
@@ -52951,9 +52950,9 @@
};
dart.fn(js._convertToDart, dynamicToObject());
js._wrapToDart = function(o) {
- return js.JsObject._check(js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper));
+ return js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper);
};
- dart.fn(js._wrapToDart, dynamicToJsObject());
+ dart.fn(js._wrapToDart, dynamicToObject());
js._wrapToDartHelper = function(o) {
if (typeof o == "function") {
return new js.JsFunction._fromJs(o);
@@ -52963,7 +52962,7 @@
}
return new js.JsObject._fromJs(o);
};
- dart.fn(js._wrapToDartHelper, dynamicToJsObject());
+ dart.fn(js._wrapToDartHelper, dynamicToObject());
dart.defineLazy(js, {
get _dartProxies() {
return new WeakMap();
diff --git a/pkg/dev_compiler/lib/js/es6/dart_sdk.js b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
index e067430..10c4a9a 100644
--- a/pkg/dev_compiler/lib/js/es6/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/es6/dart_sdk.js
@@ -880,7 +880,6 @@
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let ListToIsolate = () => (ListToIsolate = dart.constFn(dart.definiteFunctionType(isolate.Isolate, [core.List])))();
let dynamicTo_DartObject = () => (dynamicTo_DartObject = dart.constFn(dart.definiteFunctionType(js._DartObject, [dart.dynamic])))();
-let dynamicToJsObject = () => (dynamicToJsObject = dart.constFn(dart.definiteFunctionType(js.JsObject, [dart.dynamic])))();
let dynamicAnddynamicAndFnToObject = () => (dynamicAnddynamicAndFnToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic, dart.dynamic, dynamicTodynamic()])))();
let FToF = () => (FToF = dart.constFn(dart.definiteFunctionType(F => [F, [F]])))();
let FunctionToFunction = () => (FunctionToFunction = dart.constFn(dart.definiteFunctionType(core.Function, [core.Function])))();
@@ -52593,7 +52592,7 @@
});
dart.defineLazy(js, {
get context() {
- return js._wrapToDart(js._global);
+ return js.JsObject._check(js._wrapToDart(js._global));
}
});
const _jsObject = Symbol('_jsObject');
@@ -52606,22 +52605,22 @@
if (arguments$ === void 0) arguments$ = null;
let ctor = constructor[_jsObject];
if (arguments$ == null) {
- return js._wrapToDart(new ctor());
+ return js.JsObject._check(js._wrapToDart(new ctor()));
}
let unwrapped = core.List.from(arguments$[dartx.map](dart.dynamic)(js._convertToJS));
- return js._wrapToDart(new ctor(...unwrapped));
+ return js.JsObject._check(js._wrapToDart(new ctor(...unwrapped)));
}
static fromBrowserObject(object) {
if (typeof object == 'number' || typeof object == 'string' || typeof object == 'boolean' || object == null) {
dart.throw(new core.ArgumentError("object cannot be a num, string, bool, or null"));
}
- return js._wrapToDart(js._convertToJS(object));
+ return js.JsObject._check(js._wrapToDart(js._convertToJS(object)));
}
static jsify(object) {
if (!core.Map.is(object) && !core.Iterable.is(object)) {
dart.throw(new core.ArgumentError("object must be a Map or Iterable"));
}
- return js._wrapToDart(js.JsObject._convertDataTree(object));
+ return js.JsObject._check(js._wrapToDart(js.JsObject._convertDataTree(object)));
}
static _convertDataTree(data) {
let _convertedObjects = collection.HashMap.identity();
@@ -52949,9 +52948,9 @@
};
dart.fn(js._convertToDart, dynamicToObject());
js._wrapToDart = function(o) {
- return js.JsObject._check(js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper));
+ return js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper);
};
-dart.fn(js._wrapToDart, dynamicToJsObject());
+dart.fn(js._wrapToDart, dynamicToObject());
js._wrapToDartHelper = function(o) {
if (typeof o == "function") {
return new js.JsFunction._fromJs(o);
@@ -52961,7 +52960,7 @@
}
return new js.JsObject._fromJs(o);
};
-dart.fn(js._wrapToDartHelper, dynamicToJsObject());
+dart.fn(js._wrapToDartHelper, dynamicToObject());
dart.defineLazy(js, {
get _dartProxies() {
return new WeakMap();
diff --git a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
index 96c65a8..7820c1b 100644
--- a/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
+++ b/pkg/dev_compiler/lib/js/legacy/dart_sdk.js
@@ -883,7 +883,6 @@
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let ListToIsolate = () => (ListToIsolate = dart.constFn(dart.definiteFunctionType(isolate.Isolate, [core.List])))();
let dynamicTo_DartObject = () => (dynamicTo_DartObject = dart.constFn(dart.definiteFunctionType(js._DartObject, [dart.dynamic])))();
- let dynamicToJsObject = () => (dynamicToJsObject = dart.constFn(dart.definiteFunctionType(js.JsObject, [dart.dynamic])))();
let dynamicAnddynamicAndFnToObject = () => (dynamicAnddynamicAndFnToObject = dart.constFn(dart.definiteFunctionType(core.Object, [dart.dynamic, dart.dynamic, dynamicTodynamic()])))();
let FToF = () => (FToF = dart.constFn(dart.definiteFunctionType(F => [F, [F]])))();
let FunctionToFunction = () => (FunctionToFunction = dart.constFn(dart.definiteFunctionType(core.Function, [core.Function])))();
@@ -52596,7 +52595,7 @@
});
dart.defineLazy(js, {
get context() {
- return js._wrapToDart(js._global);
+ return js.JsObject._check(js._wrapToDart(js._global));
}
});
const _jsObject = Symbol('_jsObject');
@@ -52609,22 +52608,22 @@
if (arguments$ === void 0) arguments$ = null;
let ctor = constructor[_jsObject];
if (arguments$ == null) {
- return js._wrapToDart(new ctor());
+ return js.JsObject._check(js._wrapToDart(new ctor()));
}
let unwrapped = core.List.from(arguments$[dartx.map](dart.dynamic)(js._convertToJS));
- return js._wrapToDart(new ctor(...unwrapped));
+ return js.JsObject._check(js._wrapToDart(new ctor(...unwrapped)));
}
static fromBrowserObject(object) {
if (typeof object == 'number' || typeof object == 'string' || typeof object == 'boolean' || object == null) {
dart.throw(new core.ArgumentError("object cannot be a num, string, bool, or null"));
}
- return js._wrapToDart(js._convertToJS(object));
+ return js.JsObject._check(js._wrapToDart(js._convertToJS(object)));
}
static jsify(object) {
if (!core.Map.is(object) && !core.Iterable.is(object)) {
dart.throw(new core.ArgumentError("object must be a Map or Iterable"));
}
- return js._wrapToDart(js.JsObject._convertDataTree(object));
+ return js.JsObject._check(js._wrapToDart(js.JsObject._convertDataTree(object)));
}
static _convertDataTree(data) {
let _convertedObjects = collection.HashMap.identity();
@@ -52952,9 +52951,9 @@
};
dart.fn(js._convertToDart, dynamicToObject());
js._wrapToDart = function(o) {
- return js.JsObject._check(js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper));
+ return js._putIfAbsent(js._dartProxies, o, js._wrapToDartHelper);
};
- dart.fn(js._wrapToDart, dynamicToJsObject());
+ dart.fn(js._wrapToDart, dynamicToObject());
js._wrapToDartHelper = function(o) {
if (typeof o == "function") {
return new js.JsFunction._fromJs(o);
@@ -52964,7 +52963,7 @@
}
return new js.JsObject._fromJs(o);
};
- dart.fn(js._wrapToDartHelper, dynamicToJsObject());
+ dart.fn(js._wrapToDartHelper, dynamicToObject());
dart.defineLazy(js, {
get _dartProxies() {
return new WeakMap();
diff --git a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
index dfd1029..073b986 100644
--- a/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
+++ b/pkg/dev_compiler/lib/sdk/ddc_sdk.sum
Binary files differ
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart b/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
index ae590ad..eb15560 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
@@ -502,9 +502,9 @@
}
}
-JsObject _wrapToDart(o) => _putIfAbsent(_dartProxies, o, _wrapToDartHelper);
+Object _wrapToDart(o) => _putIfAbsent(_dartProxies, o, _wrapToDartHelper);
-JsObject _wrapToDartHelper(o) {
+Object _wrapToDartHelper(o) {
if (JS('bool', 'typeof # == "function"', o)) {
return new JsFunction._fromJs(o);
}
diff --git a/sdk/lib/js/dart2js/js_dart2js.dart b/sdk/lib/js/dart2js/js_dart2js.dart
index b08f7ac..fd612c0 100644
--- a/sdk/lib/js/dart2js/js_dart2js.dart
+++ b/sdk/lib/js/dart2js/js_dart2js.dart
@@ -629,7 +629,7 @@
}
}
-JsObject _wrapToDart(o) {
+Object _wrapToDart(o) {
if (JS('bool', 'typeof # == "function"', o)) {
return _getDartProxy(
o, DART_CLOSURE_PROPERTY_NAME, (o) => new JsFunction._fromJs(o));
diff --git a/tests/lib_strong/html/js_test.dart b/tests/lib_strong/html/js_test.dart
index 55b6eef..c55b926 100644
--- a/tests/lib_strong/html/js_test.dart
+++ b/tests/lib_strong/html/js_test.dart
@@ -649,6 +649,13 @@
context.deleteProperty('callback');
});
+ test('pass a Dart function to JS and back', () {
+ var dartFunction = () => 42;
+ context['dartFunction'] = dartFunction;
+ expect(identical(context['dartFunction'], dartFunction), isTrue);
+ context.deleteProperty('dartFunction');
+ });
+
test('callback as parameter', () {
expect(context.callMethod('getTypeOf', [context['razzle']]),
equals("function"));