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) |
} |