Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: src/promise.js

Issue 1098663002: Promise assimilation fix. Base URL: git://github.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/webkit/fast/js/Promise-coerce.js » ('j') | test/webkit/fast/js/Promise-coerce.js » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/promise.js
diff --git a/src/promise.js b/src/promise.js
index 443a3b8c01a15d2d8cd4de98e4dfb10219fcb511..1724aa3f9fb51d06aa2a673f93ad48c663c9f7a5 100644
--- a/src/promise.js
+++ b/src/promise.js
@@ -106,7 +106,7 @@ var lastMicrotaskId = 0;
var result = handler(value);
if (result === deferred.promise)
throw MakeTypeError('promise_cyclic', [result]);
- else if (IsPromise(result))
+ else if (IsUnforgedPromise(result))
%_CallFunction(result, deferred.resolve, deferred.reject, PromiseChain);
else
deferred.resolve(result);
@@ -151,6 +151,17 @@ var lastMicrotaskId = 0;
return IS_SPEC_OBJECT(x) && HAS_DEFINED_PRIVATE(x, promiseStatus);
}
+ IsUnforgedPromise = function IsUnforgedPromise(x) {
arv (Not doing code reviews) 2015/04/17 14:32:06 Does this need to be exported?
yhirano 2015/04/30 05:05:16 Deleted.
+ if (!IsPromise(x)) {
+ return false;
+ }
+ try {
+ return x.then === PromiseThen;
arv (Not doing code reviews) 2015/04/17 14:32:06 This needs a test to ensure that the getter is inv
arv (Not doing code reviews) 2015/04/17 14:32:06 Which section of the ES6 spec defines this? I cann
yhirano 2015/04/30 05:05:16 Deleted.
yhirano 2015/04/30 05:05:16 Deleted.
+ } catch (e) {
+ return false;
+ }
+ }
+
PromiseCreate = function PromiseCreate() {
return new $Promise(PromiseNopResolver)
}
« no previous file with comments | « no previous file | test/webkit/fast/js/Promise-coerce.js » ('j') | test/webkit/fast/js/Promise-coerce.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698