| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/base/utils/random-number-generator.h" | 5 #include "src/base/utils/random-number-generator.h" |
| 6 #include "src/builtins/builtins-promise.h" | 6 #include "src/builtins/builtins-promise.h" |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/code-stub-assembler.h" | 8 #include "src/code-stub-assembler.h" |
| 9 #include "src/compiler/node.h" | 9 #include "src/compiler/node.h" |
| 10 #include "src/isolate.h" | 10 #include "src/isolate.h" |
| 11 #include "src/promise-utils.h" | |
| 12 #include "test/cctest/compiler/code-assembler-tester.h" | 11 #include "test/cctest/compiler/code-assembler-tester.h" |
| 13 #include "test/cctest/compiler/function-tester.h" | 12 #include "test/cctest/compiler/function-tester.h" |
| 14 | 13 |
| 15 namespace v8 { | 14 namespace v8 { |
| 16 namespace internal { | 15 namespace internal { |
| 17 | 16 |
| 18 using compiler::CodeAssemblerTester; | 17 using compiler::CodeAssemblerTester; |
| 19 using compiler::FunctionTester; | 18 using compiler::FunctionTester; |
| 20 using compiler::Node; | 19 using compiler::Node; |
| 21 using compiler::CodeAssemblerLabel; | 20 using compiler::CodeAssemblerLabel; |
| (...skipping 1976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1998 CHECK(!code.is_null()); | 1997 CHECK(!code.is_null()); |
| 1999 | 1998 |
| 2000 FunctionTester ft(code, kNumParams); | 1999 FunctionTester ft(code, kNumParams); |
| 2001 Handle<Object> result = | 2000 Handle<Object> result = |
| 2002 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); | 2001 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); |
| 2003 CHECK(result->IsContext()); | 2002 CHECK(result->IsContext()); |
| 2004 Handle<Context> context_js = Handle<Context>::cast(result); | 2003 Handle<Context> context_js = Handle<Context>::cast(result); |
| 2005 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); | 2004 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); |
| 2006 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); | 2005 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); |
| 2007 CHECK_EQ(*isolate->native_context(), context_js->native_context()); | 2006 CHECK_EQ(*isolate->native_context(), context_js->native_context()); |
| 2008 CHECK_EQ(Smi::FromInt(0), context_js->get(PromiseUtils::kAlreadyVisitedSlot)); | 2007 CHECK_EQ(Smi::FromInt(0), |
| 2009 CHECK(context_js->get(PromiseUtils::kPromiseSlot)->IsJSPromise()); | 2008 context_js->get(PromiseBuiltinsAssembler::kAlreadyVisitedSlot)); |
| 2009 CHECK(context_js->get(PromiseBuiltinsAssembler::kPromiseSlot)->IsJSPromise()); |
| 2010 CHECK_EQ(isolate->heap()->false_value(), | 2010 CHECK_EQ(isolate->heap()->false_value(), |
| 2011 context_js->get(PromiseUtils::kDebugEventSlot)); | 2011 context_js->get(PromiseBuiltinsAssembler::kDebugEventSlot)); |
| 2012 } | 2012 } |
| 2013 | 2013 |
| 2014 TEST(CreatePromiseResolvingFunctions) { | 2014 TEST(CreatePromiseResolvingFunctions) { |
| 2015 Isolate* isolate(CcTest::InitIsolateOnce()); | 2015 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 2016 | 2016 |
| 2017 const int kNumParams = 1; | 2017 const int kNumParams = 1; |
| 2018 CodeAssemblerTester data(isolate, kNumParams); | 2018 CodeAssemblerTester data(isolate, kNumParams); |
| 2019 PromiseBuiltinsAssembler m(data.state()); | 2019 PromiseBuiltinsAssembler m(data.state()); |
| 2020 | 2020 |
| 2021 Node* const context = m.Parameter(kNumParams + 2); | 2021 Node* const context = m.Parameter(kNumParams + 2); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2169 m.Return(executor_context); | 2169 m.Return(executor_context); |
| 2170 | 2170 |
| 2171 Handle<Code> code = data.GenerateCode(); | 2171 Handle<Code> code = data.GenerateCode(); |
| 2172 CHECK(!code.is_null()); | 2172 CHECK(!code.is_null()); |
| 2173 | 2173 |
| 2174 FunctionTester ft(code, kNumParams); | 2174 FunctionTester ft(code, kNumParams); |
| 2175 Handle<Object> result_obj = | 2175 Handle<Object> result_obj = |
| 2176 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); | 2176 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); |
| 2177 CHECK(result_obj->IsContext()); | 2177 CHECK(result_obj->IsContext()); |
| 2178 Handle<Context> context_js = Handle<Context>::cast(result_obj); | 2178 Handle<Context> context_js = Handle<Context>::cast(result_obj); |
| 2179 CHECK_EQ(GetPromiseCapabilityExecutor::kContextLength, context_js->length()); | 2179 CHECK_EQ(PromiseBuiltinsAssembler::kCapabilitiesContextLength, |
| 2180 context_js->length()); |
| 2180 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); | 2181 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); |
| 2181 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); | 2182 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); |
| 2182 CHECK_EQ(*isolate->native_context(), context_js->native_context()); | 2183 CHECK_EQ(*isolate->native_context(), context_js->native_context()); |
| 2183 CHECK(context_js->get(GetPromiseCapabilityExecutor::kCapabilitySlot) | 2184 CHECK(context_js->get(PromiseBuiltinsAssembler::kCapabilitySlot) |
| 2184 ->IsJSPromiseCapability()); | 2185 ->IsJSPromiseCapability()); |
| 2185 } | 2186 } |
| 2186 | 2187 |
| 2187 TEST(NewPromiseCapability) { | 2188 TEST(NewPromiseCapability) { |
| 2188 Isolate* isolate(CcTest::InitIsolateOnce()); | 2189 Isolate* isolate(CcTest::InitIsolateOnce()); |
| 2189 | 2190 |
| 2190 { // Builtin Promise | 2191 { // Builtin Promise |
| 2191 const int kNumParams = 1; | 2192 const int kNumParams = 1; |
| 2192 CodeAssemblerTester data(isolate, kNumParams); | 2193 CodeAssemblerTester data(isolate, kNumParams); |
| 2193 PromiseBuiltinsAssembler m(data.state()); | 2194 PromiseBuiltinsAssembler m(data.state()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2220 | 2221 |
| 2221 Handle<JSFunction> callbacks[] = { | 2222 Handle<JSFunction> callbacks[] = { |
| 2222 handle(JSFunction::cast(result->resolve())), | 2223 handle(JSFunction::cast(result->resolve())), |
| 2223 handle(JSFunction::cast(result->reject()))}; | 2224 handle(JSFunction::cast(result->reject()))}; |
| 2224 | 2225 |
| 2225 for (auto&& callback : callbacks) { | 2226 for (auto&& callback : callbacks) { |
| 2226 Handle<Context> context(Context::cast(callback->context())); | 2227 Handle<Context> context(Context::cast(callback->context())); |
| 2227 CHECK_EQ(isolate->native_context()->closure(), context->closure()); | 2228 CHECK_EQ(isolate->native_context()->closure(), context->closure()); |
| 2228 CHECK_EQ(isolate->heap()->the_hole_value(), context->extension()); | 2229 CHECK_EQ(isolate->heap()->the_hole_value(), context->extension()); |
| 2229 CHECK_EQ(*isolate->native_context(), context->native_context()); | 2230 CHECK_EQ(*isolate->native_context(), context->native_context()); |
| 2230 CHECK_EQ(PromiseUtils::kPromiseContextLength, context->length()); | 2231 CHECK_EQ(PromiseBuiltinsAssembler::kPromiseContextLength, |
| 2231 CHECK_EQ(context->get(PromiseUtils::kPromiseSlot), result->promise()); | 2232 context->length()); |
| 2233 CHECK_EQ(context->get(PromiseBuiltinsAssembler::kPromiseSlot), |
| 2234 result->promise()); |
| 2232 } | 2235 } |
| 2233 } | 2236 } |
| 2234 | 2237 |
| 2235 { // Custom Promise | 2238 { // Custom Promise |
| 2236 const int kNumParams = 2; | 2239 const int kNumParams = 2; |
| 2237 CodeAssemblerTester data(isolate, kNumParams); | 2240 CodeAssemblerTester data(isolate, kNumParams); |
| 2238 PromiseBuiltinsAssembler m(data.state()); | 2241 PromiseBuiltinsAssembler m(data.state()); |
| 2239 | 2242 |
| 2240 Node* const context = m.Parameter(kNumParams + 2); | 2243 Node* const context = m.Parameter(kNumParams + 2); |
| 2241 | 2244 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2290 .ToHandleChecked(); | 2293 .ToHandleChecked(); |
| 2291 Handle<Object> prop2 = | 2294 Handle<Object> prop2 = |
| 2292 JSReceiver::GetProperty(isolate, promise, "rejectedReason") | 2295 JSReceiver::GetProperty(isolate, promise, "rejectedReason") |
| 2293 .ToHandleChecked(); | 2296 .ToHandleChecked(); |
| 2294 CHECK_EQ(*rejected_str, *prop2); | 2297 CHECK_EQ(*rejected_str, *prop2); |
| 2295 } | 2298 } |
| 2296 } | 2299 } |
| 2297 | 2300 |
| 2298 } // namespace internal | 2301 } // namespace internal |
| 2299 } // namespace v8 | 2302 } // namespace v8 |
| OLD | NEW |