summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.gypi2
-rw-r--r--deps/v8/AUTHORS1
-rw-r--r--deps/v8/include/v8.h5
-rw-r--r--deps/v8/src/api.cc4
-rw-r--r--deps/v8/test/cctest/test-api.cc29
5 files changed, 40 insertions, 1 deletions
diff --git a/common.gypi b/common.gypi
index 9148252d51..08e4f36cec 100644
--- a/common.gypi
+++ b/common.gypi
@@ -27,7 +27,7 @@
# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
- 'v8_embedder_string': '-node.1',
+ 'v8_embedder_string': '-node.2',
# Enable disassembler for `--print-code` v8 options
'v8_enable_disassembler': 1,
diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS
index 3251716f2a..4b5163961d 100644
--- a/deps/v8/AUTHORS
+++ b/deps/v8/AUTHORS
@@ -70,6 +70,7 @@ Felix Geisendörfer <haimuiba@gmail.com>
Filipe David Manana <fdmanana@gmail.com>
Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Geoffrey Garside <ggarside@gmail.com>
+Gus Caplan <me@gus.host>
Gwang Yoon Hwang <ryumiel@company100.net>
Henrique Ferreiro <henrique.ferreiro@gmail.com>
Hirofumi Mako <mkhrfm@gmail.com>
diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h
index d520c86604..c6e9250e4e 100644
--- a/deps/v8/include/v8.h
+++ b/deps/v8/include/v8.h
@@ -2378,6 +2378,11 @@ class V8_EXPORT Value : public Data {
bool IsWebAssemblyCompiledModule() const;
+ /**
+ * Returns true if the value is a Module Namespace Object.
+ */
+ bool IsModuleNamespaceObject() const;
+
V8_WARN_UNUSED_RESULT MaybeLocal<BigInt> ToBigInt(
Local<Context> context) const;
V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc
index 8b177d041d..6dd669ee11 100644
--- a/deps/v8/src/api.cc
+++ b/deps/v8/src/api.cc
@@ -3583,6 +3583,10 @@ bool Value::IsSetIterator() const {
bool Value::IsPromise() const { return Utils::OpenHandle(this)->IsJSPromise(); }
+bool Value::IsModuleNamespaceObject() const {
+ return Utils::OpenHandle(this)->IsJSModuleNamespace();
+}
+
MaybeLocal<String> Value::ToString(Local<Context> context) const {
auto obj = Utils::OpenHandle(this);
if (obj->IsString()) return ToApiHandle<String>(obj);
diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc
index f126433578..261ada0f2b 100644
--- a/deps/v8/test/cctest/test-api.cc
+++ b/deps/v8/test/cctest/test-api.cc
@@ -27274,6 +27274,35 @@ TEST(ImportMeta) {
CHECK(result->StrictEquals(Local<v8::Value>::Cast(v8::Utils::ToLocal(meta))));
}
+TEST(GetModuleNamespace) {
+ LocalContext context;
+ v8::Isolate* isolate = context->GetIsolate();
+ v8::HandleScope scope(isolate);
+
+ Local<String> url = v8_str("www.google.com");
+ Local<String> source_text = v8_str("export default 5; export const a = 10;");
+ v8::ScriptOrigin origin(url, Local<v8::Integer>(), Local<v8::Integer>(),
+ Local<v8::Boolean>(), Local<v8::Integer>(),
+ Local<v8::Value>(), Local<v8::Boolean>(),
+ Local<v8::Boolean>(), True(isolate));
+ v8::ScriptCompiler::Source source(source_text, origin);
+ Local<Module> module =
+ v8::ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked();
+ module->InstantiateModule(context.local(), UnexpectedModuleResolveCallback)
+ .ToChecked();
+ module->Evaluate(context.local()).ToLocalChecked();
+
+ Local<Value> ns_val = module->GetModuleNamespace();
+ CHECK(ns_val->IsModuleNamespaceObject());
+ Local<Object> ns = ns_val.As<Object>();
+ CHECK(ns->Get(context.local(), v8_str("default"))
+ .ToLocalChecked()
+ ->StrictEquals(v8::Number::New(isolate, 5)));
+ CHECK(ns->Get(context.local(), v8_str("a"))
+ .ToLocalChecked()
+ ->StrictEquals(v8::Number::New(isolate, 10)));
+}
+
TEST(GlobalTemplateWithDoubleProperty) {
v8::Isolate* isolate = CcTest::isolate();
v8::HandleScope handle_scope(isolate);