Commit 875165ea authored by gsathya's avatar gsathya Committed by Commit bot

[promises] Clean up promise utils and remove dead code

BUG=v8:5343

Review-Url: https://codereview.chromium.org/2637523002
Cr-Commit-Position: refs/heads/master@{#42423}
parent bb89869a
......@@ -1632,8 +1632,6 @@ v8_source_set("v8_base") {
"src/profiler/tracing-cpu-profiler.h",
"src/profiler/unbound-queue-inl.h",
"src/profiler/unbound-queue.h",
"src/promise-utils.cc",
"src/promise-utils.h",
"src/property-descriptor.cc",
"src/property-descriptor.h",
"src/property-details.h",
......
......@@ -8,7 +8,6 @@
#include "src/builtins/builtins.h"
#include "src/code-factory.h"
#include "src/code-stub-assembler.h"
#include "src/promise-utils.h"
namespace v8 {
namespace internal {
......@@ -211,23 +210,20 @@ Node* PromiseBuiltinsAssembler::CreatePromiseContext(Node* native_context,
Node* PromiseBuiltinsAssembler::CreatePromiseResolvingFunctionsContext(
Node* promise, Node* debug_event, Node* native_context) {
Node* const context =
CreatePromiseContext(native_context, PromiseUtils::kPromiseContextLength);
StoreContextElementNoWriteBarrier(context, PromiseUtils::kAlreadyVisitedSlot,
CreatePromiseContext(native_context, kPromiseContextLength);
StoreContextElementNoWriteBarrier(context, kAlreadyVisitedSlot,
SmiConstant(0));
StoreContextElementNoWriteBarrier(context, PromiseUtils::kPromiseSlot,
promise);
StoreContextElementNoWriteBarrier(context, PromiseUtils::kDebugEventSlot,
debug_event);
StoreContextElementNoWriteBarrier(context, kPromiseSlot, promise);
StoreContextElementNoWriteBarrier(context, kDebugEventSlot, debug_event);
return context;
}
Node* PromiseBuiltinsAssembler::CreatePromiseGetCapabilitiesExecutorContext(
Node* promise_capability, Node* native_context) {
int kContextLength = GetPromiseCapabilityExecutor::kContextLength;
int kContextLength = kCapabilitiesContextLength;
Node* context = CreatePromiseContext(native_context, kContextLength);
StoreContextElementNoWriteBarrier(
context, GetPromiseCapabilityExecutor::kCapabilitySlot,
promise_capability);
StoreContextElementNoWriteBarrier(context, kCapabilitySlot,
promise_capability);
return context;
}
......@@ -996,7 +992,7 @@ TF_BUILTIN(PromiseRejectClosure, PromiseBuiltinsAssembler) {
Label out(this);
// 3. Let alreadyResolved be F.[[AlreadyResolved]].
int has_already_visited_slot = PromiseUtils::kAlreadyVisitedSlot;
int has_already_visited_slot = kAlreadyVisitedSlot;
Node* const has_already_visited =
LoadContextElement(context, has_already_visited_slot);
......@@ -1010,9 +1006,9 @@ TF_BUILTIN(PromiseRejectClosure, PromiseBuiltinsAssembler) {
// 2. Let promise be F.[[Promise]].
Node* const promise =
LoadContextElement(context, IntPtrConstant(PromiseUtils::kPromiseSlot));
Node* const debug_event = LoadContextElement(
context, IntPtrConstant(PromiseUtils::kDebugEventSlot));
LoadContextElement(context, IntPtrConstant(kPromiseSlot));
Node* const debug_event =
LoadContextElement(context, IntPtrConstant(kDebugEventSlot));
InternalPromiseReject(context, promise, value, debug_event);
Return(UndefinedConstant());
......@@ -1203,7 +1199,7 @@ TF_BUILTIN(PromiseResolveClosure, PromiseBuiltinsAssembler) {
Label out(this);
// 3. Let alreadyResolved be F.[[AlreadyResolved]].
int has_already_visited_slot = PromiseUtils::kAlreadyVisitedSlot;
int has_already_visited_slot = kAlreadyVisitedSlot;
Node* const has_already_visited =
LoadContextElement(context, has_already_visited_slot);
......@@ -1217,7 +1213,7 @@ TF_BUILTIN(PromiseResolveClosure, PromiseBuiltinsAssembler) {
// 2. Let promise be F.[[Promise]].
Node* const promise =
LoadContextElement(context, IntPtrConstant(PromiseUtils::kPromiseSlot));
LoadContextElement(context, IntPtrConstant(kPromiseSlot));
InternalResolvePromise(context, promise, value);
Return(UndefinedConstant());
......@@ -1470,8 +1466,7 @@ TF_BUILTIN(PromiseGetCapabilitiesExecutor, PromiseBuiltinsAssembler) {
Node* const reject = Parameter(2);
Node* const context = Parameter(5);
Node* const capability = LoadContextElement(
context, GetPromiseCapabilityExecutor::kCapabilitySlot);
Node* const capability = LoadContextElement(context, kCapabilitySlot);
Label if_alreadyinvoked(this, Label::kDeferred);
GotoIf(WordNotEqual(
......
......@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "src/code-stub-assembler.h"
#include "src/contexts.h"
namespace v8 {
namespace internal {
......@@ -13,9 +14,27 @@ typedef compiler::CodeAssemblerState CodeAssemblerState;
class PromiseBuiltinsAssembler : public CodeStubAssembler {
public:
enum PromiseResolvingFunctionContextSlot {
// Whether the resolve/reject callback was already called.
kAlreadyVisitedSlot = Context::MIN_CONTEXT_SLOTS,
// The promise which resolve/reject callbacks fulfill.
kPromiseSlot,
// Whether to trigger a debug event or not. Used in catch
// prediction.
kDebugEventSlot,
kPromiseContextLength,
};
enum FunctionContextSlot {
kCapabilitySlot = Context::MIN_CONTEXT_SLOTS,
kCapabilitiesContextLength,
};
explicit PromiseBuiltinsAssembler(CodeAssemblerState* state)
: CodeStubAssembler(state) {}
// These allocate and initialize a promise with pending state and
// undefined fields.
//
......
......@@ -998,15 +998,6 @@ Handle<Context> Factory::NewBlockContext(Handle<JSFunction> function,
return context;
}
Handle<Context> Factory::NewPromiseResolvingFunctionContext(int length) {
DCHECK_GE(length, Context::MIN_CONTEXT_SLOTS);
Handle<FixedArray> array = NewFixedArray(length);
array->set_map_no_write_barrier(*function_context_map());
Handle<Context> context = Handle<Context>::cast(array);
context->set_extension(*the_hole_value());
return context;
}
Handle<Struct> Factory::NewStruct(InstanceType type) {
CALL_HEAP_FUNCTION(
isolate(),
......@@ -1014,22 +1005,6 @@ Handle<Struct> Factory::NewStruct(InstanceType type) {
Struct);
}
Handle<PromiseReactionJobInfo> Factory::NewPromiseReactionJobInfo(
Handle<Object> value, Handle<Object> tasks, Handle<Object> deferred_promise,
Handle<Object> deferred_on_resolve, Handle<Object> deferred_on_reject,
Handle<Context> context) {
Handle<PromiseReactionJobInfo> result = Handle<PromiseReactionJobInfo>::cast(
NewStruct(PROMISE_REACTION_JOB_INFO_TYPE));
result->set_value(*value);
result->set_tasks(*tasks);
result->set_deferred_promise(*deferred_promise);
result->set_deferred_on_resolve(*deferred_on_resolve);
result->set_deferred_on_reject(*deferred_on_reject);
result->set_debug_id(kDebugPromiseFirstID);
result->set_context(*context);
return result;
}
Handle<AliasedArgumentsEntry> Factory::NewAliasedArgumentsEntry(
int aliased_context_slot) {
Handle<AliasedArgumentsEntry> entry = Handle<AliasedArgumentsEntry>::cast(
......
......@@ -69,12 +69,6 @@ class V8_EXPORT_PRIVATE Factory final {
// Create a new boxed value.
Handle<Box> NewBox(Handle<Object> value);
// Create a new PromiseReactionJobInfo struct.
Handle<PromiseReactionJobInfo> NewPromiseReactionJobInfo(
Handle<Object> value, Handle<Object> tasks,
Handle<Object> deferred_promise, Handle<Object> deferred_on_resolve,
Handle<Object> deferred_on_reject, Handle<Context> context);
// Create a new PrototypeInfo struct.
Handle<PrototypeInfo> NewPrototypeInfo();
......@@ -320,8 +314,6 @@ class V8_EXPORT_PRIVATE Factory final {
Handle<Context> NewBlockContext(Handle<JSFunction> function,
Handle<Context> previous,
Handle<ScopeInfo> scope_info);
// Create a promise context.
Handle<Context> NewPromiseResolvingFunctionContext(int length);
// Allocate a new struct. The struct is pretenured (allocated directly in
// the old generation).
......
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/promise-utils.h"
#include "src/factory.h"
#include "src/isolate.h"
#include "src/objects-inl.h"
namespace v8 {
namespace internal {
JSPromise* PromiseUtils::GetPromise(Handle<Context> context) {
return JSPromise::cast(context->get(kPromiseSlot));
}
Object* PromiseUtils::GetDebugEvent(Handle<Context> context) {
return context->get(kDebugEventSlot);
}
bool PromiseUtils::HasAlreadyVisited(Handle<Context> context) {
return Smi::cast(context->get(kAlreadyVisitedSlot))->value() != 0;
}
void PromiseUtils::SetAlreadyVisited(Handle<Context> context) {
context->set(kAlreadyVisitedSlot, Smi::FromInt(1));
}
} // namespace internal
} // namespace v8
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_PROMISE_UTILS_H_
#define V8_PROMISE_UTILS_H_
#include "src/contexts.h"
#include "src/objects.h"
namespace v8 {
namespace internal {
// Helper methods for Promise builtins.
class PromiseUtils : public AllStatic {
public:
enum PromiseResolvingFunctionContextSlot {
// Whether the resolve/reject callback was already called.
kAlreadyVisitedSlot = Context::MIN_CONTEXT_SLOTS,
// The promise which resolve/reject callbacks fulfill.
kPromiseSlot,
// Whether to trigger a debug event or not. Used in catch
// prediction.
kDebugEventSlot,
kPromiseContextLength,
};
// These get and set the slots on the PromiseResolvingContext, which
// is used by the resolve/reject promise callbacks.
static JSPromise* GetPromise(Handle<Context> context);
static Object* GetDebugEvent(Handle<Context> context);
static bool HasAlreadyVisited(Handle<Context> context);
static void SetAlreadyVisited(Handle<Context> context);
};
class GetPromiseCapabilityExecutor : public AllStatic {
public:
enum FunctionContextSlot {
kCapabilitySlot = Context::MIN_CONTEXT_SLOTS,
kContextLength,
};
};
} // namespace internal
} // namespace v8
#endif // V8_PROMISE_UTILS_H_
......@@ -5,7 +5,6 @@
#include "src/debug/debug.h"
#include "src/elements.h"
#include "src/promise-utils.h"
namespace v8 {
namespace internal {
......
......@@ -1141,8 +1141,6 @@
'profiler/tracing-cpu-profiler.h',
'profiler/unbound-queue-inl.h',
'profiler/unbound-queue.h',
'promise-utils.h',
'promise-utils.cc',
'property-descriptor.cc',
'property-descriptor.h',
'property-details.h',
......
......@@ -8,7 +8,6 @@
#include "src/code-stub-assembler.h"
#include "src/compiler/node.h"
#include "src/isolate.h"
#include "src/promise-utils.h"
#include "test/cctest/compiler/code-assembler-tester.h"
#include "test/cctest/compiler/function-tester.h"
......@@ -2005,10 +2004,11 @@ TEST(CreatePromiseResolvingFunctionsContext) {
CHECK_EQ(isolate->native_context()->closure(), context_js->closure());
CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension());
CHECK_EQ(*isolate->native_context(), context_js->native_context());
CHECK_EQ(Smi::FromInt(0), context_js->get(PromiseUtils::kAlreadyVisitedSlot));
CHECK(context_js->get(PromiseUtils::kPromiseSlot)->IsJSPromise());
CHECK_EQ(Smi::FromInt(0),
context_js->get(PromiseBuiltinsAssembler::kAlreadyVisitedSlot));
CHECK(context_js->get(PromiseBuiltinsAssembler::kPromiseSlot)->IsJSPromise());
CHECK_EQ(isolate->heap()->false_value(),
context_js->get(PromiseUtils::kDebugEventSlot));
context_js->get(PromiseBuiltinsAssembler::kDebugEventSlot));
}
TEST(CreatePromiseResolvingFunctions) {
......@@ -2175,11 +2175,12 @@ TEST(CreatePromiseGetCapabilitiesExecutorContext) {
ft.Call(isolate->factory()->undefined_value()).ToHandleChecked();
CHECK(result_obj->IsContext());
Handle<Context> context_js = Handle<Context>::cast(result_obj);
CHECK_EQ(GetPromiseCapabilityExecutor::kContextLength, context_js->length());
CHECK_EQ(PromiseBuiltinsAssembler::kCapabilitiesContextLength,
context_js->length());
CHECK_EQ(isolate->native_context()->closure(), context_js->closure());
CHECK_EQ(isolate->heap()->the_hole_value(), context_js->extension());
CHECK_EQ(*isolate->native_context(), context_js->native_context());
CHECK(context_js->get(GetPromiseCapabilityExecutor::kCapabilitySlot)
CHECK(context_js->get(PromiseBuiltinsAssembler::kCapabilitySlot)
->IsJSPromiseCapability());
}
......@@ -2226,8 +2227,10 @@ TEST(NewPromiseCapability) {
CHECK_EQ(isolate->native_context()->closure(), context->closure());
CHECK_EQ(isolate->heap()->the_hole_value(), context->extension());
CHECK_EQ(*isolate->native_context(), context->native_context());
CHECK_EQ(PromiseUtils::kPromiseContextLength, context->length());
CHECK_EQ(context->get(PromiseUtils::kPromiseSlot), result->promise());
CHECK_EQ(PromiseBuiltinsAssembler::kPromiseContextLength,
context->length());
CHECK_EQ(context->get(PromiseBuiltinsAssembler::kPromiseSlot),
result->promise());
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment