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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2168 m.Return(executor_context); | 2168 m.Return(executor_context); |
2169 | 2169 |
2170 Handle<Code> code = data.GenerateCode(); | 2170 Handle<Code> code = data.GenerateCode(); |
2171 CHECK(!code.is_null()); | 2171 CHECK(!code.is_null()); |
2172 | 2172 |
2173 FunctionTester ft(code, kNumParams); | 2173 FunctionTester ft(code, kNumParams); |
2174 Handle<Object> result_obj = | 2174 Handle<Object> result_obj = |
2175 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); | 2175 ft.Call(isolate->factory()->undefined_value()).ToHandleChecked(); |
2176 CHECK(result_obj->IsContext()); | 2176 CHECK(result_obj->IsContext()); |
2177 Handle<Context> context_js = Handle<Context>::cast(result_obj); | 2177 Handle<Context> context_js = Handle<Context>::cast(result_obj); |
2178 CHECK_EQ(GetPromiseCapabilityExecutor::kContextLength, context_js->length()); | 2178 CHECK_EQ(PromiseBuiltinsAssembler::kCapabilitiesContextLength, |
| 2179 context_js->length()); |
2179 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); | 2180 CHECK_EQ(isolate->native_context()->closure(), context_js->closure()); |
2180 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); | 2181 CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension()); |
2181 CHECK_EQ(*isolate->native_context(), context_js->native_context()); | 2182 CHECK_EQ(*isolate->native_context(), context_js->native_context()); |
2182 CHECK(context_js->get(GetPromiseCapabilityExecutor::kCapabilitySlot) | 2183 CHECK(context_js->get(PromiseBuiltinsAssembler::kCapabilitySlot) |
2183 ->IsJSPromiseCapability()); | 2184 ->IsJSPromiseCapability()); |
2184 } | 2185 } |
2185 | 2186 |
2186 TEST(NewPromiseCapability) { | 2187 TEST(NewPromiseCapability) { |
2187 Isolate* isolate(CcTest::InitIsolateOnce()); | 2188 Isolate* isolate(CcTest::InitIsolateOnce()); |
2188 | 2189 |
2189 { // Builtin Promise | 2190 { // Builtin Promise |
2190 const int kNumParams = 1; | 2191 const int kNumParams = 1; |
2191 CodeAssemblerTester data(isolate, kNumParams); | 2192 CodeAssemblerTester data(isolate, kNumParams); |
2192 PromiseBuiltinsAssembler m(data.state()); | 2193 PromiseBuiltinsAssembler m(data.state()); |
(...skipping 26 matching lines...) Expand all Loading... |
2219 | 2220 |
2220 Handle<JSFunction> callbacks[] = { | 2221 Handle<JSFunction> callbacks[] = { |
2221 handle(JSFunction::cast(result->resolve())), | 2222 handle(JSFunction::cast(result->resolve())), |
2222 handle(JSFunction::cast(result->reject()))}; | 2223 handle(JSFunction::cast(result->reject()))}; |
2223 | 2224 |
2224 for (auto&& callback : callbacks) { | 2225 for (auto&& callback : callbacks) { |
2225 Handle<Context> context(Context::cast(callback->context())); | 2226 Handle<Context> context(Context::cast(callback->context())); |
2226 CHECK_EQ(isolate->native_context()->closure(), context->closure()); | 2227 CHECK_EQ(isolate->native_context()->closure(), context->closure()); |
2227 CHECK_EQ(isolate->heap()->the_hole_value(), context->extension()); | 2228 CHECK_EQ(isolate->heap()->the_hole_value(), context->extension()); |
2228 CHECK_EQ(*isolate->native_context(), context->native_context()); | 2229 CHECK_EQ(*isolate->native_context(), context->native_context()); |
2229 CHECK_EQ(PromiseUtils::kPromiseContextLength, context->length()); | 2230 CHECK_EQ(PromiseBuiltinsAssembler::kPromiseContextLength, |
2230 CHECK_EQ(context->get(PromiseUtils::kPromiseSlot), result->promise()); | 2231 context->length()); |
| 2232 CHECK_EQ(context->get(PromiseBuiltinsAssembler::kPromiseSlot), |
| 2233 result->promise()); |
2231 } | 2234 } |
2232 } | 2235 } |
2233 | 2236 |
2234 { // Custom Promise | 2237 { // Custom Promise |
2235 const int kNumParams = 2; | 2238 const int kNumParams = 2; |
2236 CodeAssemblerTester data(isolate, kNumParams); | 2239 CodeAssemblerTester data(isolate, kNumParams); |
2237 PromiseBuiltinsAssembler m(data.state()); | 2240 PromiseBuiltinsAssembler m(data.state()); |
2238 | 2241 |
2239 Node* const context = m.Parameter(kNumParams + 2); | 2242 Node* const context = m.Parameter(kNumParams + 2); |
2240 | 2243 |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2474 m.Return(m.SmiConstant(0)); | 2477 m.Return(m.SmiConstant(0)); |
2475 | 2478 |
2476 Handle<Code> code = data.GenerateCode(); | 2479 Handle<Code> code = data.GenerateCode(); |
2477 CHECK(!code.is_null()); | 2480 CHECK(!code.is_null()); |
2478 FunctionTester ft(code, kNumParams); | 2481 FunctionTester ft(code, kNumParams); |
2479 CHECK_EQ(1, Handle<Smi>::cast(ft.Call().ToHandleChecked())->value()); | 2482 CHECK_EQ(1, Handle<Smi>::cast(ft.Call().ToHandleChecked())->value()); |
2480 } | 2483 } |
2481 | 2484 |
2482 } // namespace internal | 2485 } // namespace internal |
2483 } // namespace v8 | 2486 } // namespace v8 |
OLD | NEW |