Index: client/dom/generated/wrapping_dom.js |
diff --git a/client/dom/generated/wrapping_dom.js b/client/dom/generated/wrapping_dom.js |
index 53674ebed9d6e0a3db0218a0d26e2358a46d6bf7..e3ad06816c57ad736836f1db0cb47680e4f15287 100644 |
--- a/client/dom/generated/wrapping_dom.js |
+++ b/client/dom/generated/wrapping_dom.js |
@@ -26757,16 +26757,8 @@ function __dom_wrap_primitive(ptr) { |
return (ptr === null) ? (void 0) : ptr; |
} |
- |
-function __dom_finish_unwrap_function(fn, unwrapped) { |
- fn.$dom = unwrapped; |
- var isolatetoken = __dom_isolate_token(); |
- __dom_set_cached('dart_wrapper', unwrapped, isolatetoken, fn); |
- return unwrapped; |
-} |
- |
/** @suppress {duplicate} */ |
-function __dom_unwrap(obj) { |
+function __dom_unwrap(obj, dropargs) { |
if (obj == null) { |
return (void 0); |
} |
@@ -26774,12 +26766,31 @@ function __dom_unwrap(obj) { |
return obj.$dom; |
} |
if (obj instanceof Function) { // BUGBUG: function from other IFrame |
- var unwrapped = function () { |
- var args = Array.prototype.slice.call(arguments); |
- return $dartcall(obj, args.map(__dom_wrap)); |
+ var isolatetoken = __dom_isolate_token(); |
+ var unwrapped = __dom_get_cached('dart_unwrapped', obj, isolatetoken); |
+ if (unwrapped) { |
+ return unwrapped; |
+ } |
+ var isolate = isolate$current; |
+ unwrapped = function () { |
+ var old = isolate$current; |
+ isolate$current = isolate; |
+ try { |
+ if (dropargs) { |
+ return $dartcall(obj, []); |
+ } else { |
+ var args = Array.prototype.slice.call(arguments); |
+ return $dartcall(obj, args.map(__dom_wrap)); |
+ } |
+ } finally { |
+ isolate$current = old; |
+ // TODO(vsm): This really needs to go elsewhere. |
+ isolate$runEventLoop(); |
+ } |
// BUGBUG? Should the result be unwrapped? Or is it always void/bool ? |
}; |
- return __dom_finish_unwrap_function(obj, unwrapped); |
+ __dom_set_cached('dart_unwrapped', obj, isolatetoken, unwrapped); |
+ return unwrapped; |
} |
return obj; |
} |
@@ -26788,9 +26799,7 @@ function __dom_unwrap_TimeoutHandler_function(fn) { |
// Some browsers (e.g. FF) pass data to the timeout function, others do not. |
// Dart's TimeoutHandler takes no arguments, so drop any arguments passed to |
// the unwrapped callback. |
- return __dom_finish_unwrap_function( |
- fn, |
- function() { return $dartcall(fn, []); }); |
+ return __dom_unwrap(fn, true); |
} |
// Declared in src/GlobalProperties.dart |