summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps/v8/BUILD.gn7
-rw-r--r--deps/v8/gypfiles/features.gypi5
-rw-r--r--deps/v8/include/v8-version.h2
-rw-r--r--deps/v8/include/v8.h6
-rw-r--r--deps/v8/src/bootstrapper.cc6
-rw-r--r--deps/v8/src/builtins/builtins-promise.cc8
-rw-r--r--deps/v8/src/objects.h2
7 files changed, 32 insertions, 4 deletions
diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn
index 8895103222..2a77a0ded0 100644
--- a/deps/v8/BUILD.gn
+++ b/deps/v8/BUILD.gn
@@ -38,6 +38,9 @@ declare_args() {
# Sets -dENABLE_DISASSEMBLER.
v8_enable_disassembler = ""
+ # Sets the number of internal fields on promise objects.
+ v8_promise_internal_field_count = 0
+
# Sets -dENABLE_GDB_JIT_INTERFACE.
v8_enable_gdbjit = ""
@@ -197,6 +200,10 @@ config("features") {
if (v8_enable_disassembler) {
defines += [ "ENABLE_DISASSEMBLER" ]
}
+ if (v8_promise_internal_field_count != 0) {
+ defines +=
+ [ "V8_PROMISE_INTERNAL_FIELD_COUNT=${v8_promise_internal_field_count}" ]
+ }
if (v8_enable_gdbjit) {
defines += [ "ENABLE_GDB_JIT_INTERFACE" ]
}
diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi
index 0c4873c3a5..bd5cd7cd10 100644
--- a/deps/v8/gypfiles/features.gypi
+++ b/deps/v8/gypfiles/features.gypi
@@ -31,6 +31,8 @@
'variables': {
'v8_enable_disassembler%': 0,
+ 'v8_promise_internal_field_count%': 0,
+
'v8_enable_gdbjit%': 0,
'v8_enable_verify_csa%': 0,
@@ -77,6 +79,9 @@
['v8_enable_disassembler==1', {
'defines': ['ENABLE_DISASSEMBLER',],
}],
+ ['v8_promise_internal_field_count!=0', {
+ 'defines': ['V8_PROMISE_INTERNAL_FIELD_COUNT','v8_promise_internal_field_count'],
+ }],
['v8_enable_gdbjit==1', {
'defines': ['ENABLE_GDB_JIT_INTERFACE',],
}],
diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h
index f0866a2d9b..70e1a84d09 100644
--- a/deps/v8/include/v8-version.h
+++ b/deps/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 5
#define V8_MINOR_VERSION 8
#define V8_BUILD_NUMBER 283
-#define V8_PATCH_LEVEL 40
+#define V8_PATCH_LEVEL 41
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h
index e38f657b48..9ae8e1b948 100644
--- a/deps/v8/include/v8.h
+++ b/deps/v8/include/v8.h
@@ -3741,6 +3741,10 @@ class V8_EXPORT Function : public Object {
static void CheckCast(Value* obj);
};
+#ifndef V8_PROMISE_INTERNAL_FIELD_COUNT
+// The number of required internal fields can be defined by embedder.
+#define V8_PROMISE_INTERNAL_FIELD_COUNT 0
+#endif
/**
* An instance of the built-in Promise constructor (ES6 draft).
@@ -3822,6 +3826,8 @@ class V8_EXPORT Promise : public Object {
V8_INLINE static Promise* Cast(Value* obj);
+ static const int kEmbedderFieldCount = V8_PROMISE_INTERNAL_FIELD_COUNT;
+
private:
Promise();
static void CheckCast(Value* obj);
diff --git a/deps/v8/src/bootstrapper.cc b/deps/v8/src/bootstrapper.cc
index 8f9f92a08c..60e989ae17 100644
--- a/deps/v8/src/bootstrapper.cc
+++ b/deps/v8/src/bootstrapper.cc
@@ -1945,9 +1945,9 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
Handle<JSObject> prototype =
factory->NewJSObject(isolate->object_function(), TENURED);
- Handle<JSFunction> promise_fun =
- InstallFunction(global, "Promise", JS_PROMISE_TYPE, JSPromise::kSize,
- prototype, Builtins::kPromiseConstructor);
+ Handle<JSFunction> promise_fun = InstallFunction(
+ global, "Promise", JS_PROMISE_TYPE, JSPromise::kSizeWithEmbedderFields,
+ prototype, Builtins::kPromiseConstructor);
InstallWithIntrinsicDefaultProto(isolate, promise_fun,
Context::PROMISE_FUNCTION_INDEX);
diff --git a/deps/v8/src/builtins/builtins-promise.cc b/deps/v8/src/builtins/builtins-promise.cc
index 0d0238d267..6d9fed83a9 100644
--- a/deps/v8/src/builtins/builtins-promise.cc
+++ b/deps/v8/src/builtins/builtins-promise.cc
@@ -31,6 +31,10 @@ void PromiseBuiltinsAssembler::PromiseInit(Node* promise) {
StoreObjectField(promise, JSPromise::kStatusOffset,
SmiConstant(v8::Promise::kPending));
StoreObjectField(promise, JSPromise::kFlagsOffset, SmiConstant(0));
+ for (int i = 0; i < v8::Promise::kEmbedderFieldCount; i++) {
+ int offset = JSPromise::kSize + i * kPointerSize;
+ StoreObjectFieldNoWriteBarrier(promise, offset, SmiConstant(Smi::kZero));
+ }
}
Node* PromiseBuiltinsAssembler::AllocateAndInitJSPromise(Node* context) {
@@ -62,6 +66,10 @@ Node* PromiseBuiltinsAssembler::AllocateAndSetJSPromise(Node* context,
StoreObjectFieldNoWriteBarrier(instance, JSPromise::kResultOffset, result);
StoreObjectFieldNoWriteBarrier(instance, JSPromise::kFlagsOffset,
SmiConstant(0));
+ for (int i = 0; i < v8::Promise::kEmbedderFieldCount; i++) {
+ int offset = JSPromise::kSize + i * kPointerSize;
+ StoreObjectFieldNoWriteBarrier(instance, offset, SmiConstant(Smi::kZero));
+ }
Label out(this);
GotoIfNot(IsPromiseHookEnabledOrDebugIsActive(), &out);
diff --git a/deps/v8/src/objects.h b/deps/v8/src/objects.h
index ca4c351317..3b4ff9bb75 100644
--- a/deps/v8/src/objects.h
+++ b/deps/v8/src/objects.h
@@ -8443,6 +8443,8 @@ class JSPromise : public JSObject {
kFulfillReactionsOffset + kPointerSize;
static const int kFlagsOffset = kRejectReactionsOffset + kPointerSize;
static const int kSize = kFlagsOffset + kPointerSize;
+ static const int kSizeWithEmbedderFields =
+ kSize + v8::Promise::kEmbedderFieldCount * kPointerSize;
// Flags layout.
static const int kHasHandlerBit = 0;