Skip to content

Commit 5303a50

Browse files
devsnekjasnell
authored andcommitted
deps: cherry-pick 39d546a from upstream V8
Original commit message: [api] introduce v8::Value::IsModuleNamespaceObject This allows an embedder to check if a Value is a module namespace object. Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng Change-Id: Idffceff451dd5f5c6a53d4cb3ce02c1c2c5b653c Reviewed-on: https://chromium-review.googlesource.com/1011762 Reviewed-by: Georg Neis <neis@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#52597} Refs: v8/v8@39d546a PR-URL: #20016 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 8a0b994 commit 5303a50

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

deps/v8/AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ Felix Geisendörfer <haimuiba@gmail.com>
7070
Filipe David Manana <fdmanana@gmail.com>
7171
Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
7272
Geoffrey Garside <ggarside@gmail.com>
73+
Gus Caplan <me@gus.host>
7374
Gwang Yoon Hwang <ryumiel@company100.net>
7475
Henrique Ferreiro <henrique.ferreiro@gmail.com>
7576
Hirofumi Mako <mkhrfm@gmail.com>

deps/v8/include/v8.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2354,6 +2354,11 @@ class V8_EXPORT Value : public Data {
23542354

23552355
bool IsWebAssemblyCompiledModule() const;
23562356

2357+
/**
2358+
* Returns true if the value is a Module Namespace Object.
2359+
*/
2360+
bool IsModuleNamespaceObject() const;
2361+
23572362
V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
23582363
Local<Context> context) const;
23592364
V8_WARN_UNUSED_RESULT MaybeLocal<Number> ToNumber(

deps/v8/src/api.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3584,6 +3584,10 @@ bool Value::IsSetIterator() const {
35843584

35853585
bool Value::IsPromise() const { return Utils::OpenHandle(this)->IsJSPromise(); }
35863586

3587+
bool Value::IsModuleNamespaceObject() const {
3588+
return Utils::OpenHandle(this)->IsJSModuleNamespace();
3589+
}
3590+
35873591
MaybeLocal<String> Value::ToString(Local<Context> context) const {
35883592
auto obj = Utils::OpenHandle(this);
35893593
if (obj->IsString()) return ToApiHandle<String>(obj);

deps/v8/test/cctest/test-api.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27041,6 +27041,35 @@ TEST(ImportMeta) {
2704127041
CHECK(result->StrictEquals(Local<v8::Value>::Cast(v8::Utils::ToLocal(meta))));
2704227042
}
2704327043

27044+
TEST(GetModuleNamespace) {
27045+
LocalContext context;
27046+
v8::Isolate* isolate = context->GetIsolate();
27047+
v8::HandleScope scope(isolate);
27048+
27049+
Local<String> url = v8_str("www.google.com");
27050+
Local<String> source_text = v8_str("export default 5; export const a = 10;");
27051+
v8::ScriptOrigin origin(url, Local<v8::Integer>(), Local<v8::Integer>(),
27052+
Local<v8::Boolean>(), Local<v8::Integer>(),
27053+
Local<v8::Value>(), Local<v8::Boolean>(),
27054+
Local<v8::Boolean>(), True(isolate));
27055+
v8::ScriptCompiler::Source source(source_text, origin);
27056+
Local<Module> module =
27057+
v8::ScriptCompiler::CompileModule(isolate, &source).ToLocalChecked();
27058+
module->InstantiateModule(context.local(), UnexpectedModuleResolveCallback)
27059+
.ToChecked();
27060+
module->Evaluate(context.local()).ToLocalChecked();
27061+
27062+
Local<Value> ns_val = module->GetModuleNamespace();
27063+
CHECK(ns_val->IsModuleNamespaceObject());
27064+
Local<Object> ns = ns_val.As<Object>();
27065+
CHECK(ns->Get(context.local(), v8_str("default"))
27066+
.ToLocalChecked()
27067+
->StrictEquals(v8::Number::New(isolate, 5)));
27068+
CHECK(ns->Get(context.local(), v8_str("a"))
27069+
.ToLocalChecked()
27070+
->StrictEquals(v8::Number::New(isolate, 10)));
27071+
}
27072+
2704427073
TEST(GlobalTemplateWithDoubleProperty) {
2704527074
v8::Isolate* isolate = CcTest::isolate();
2704627075
v8::HandleScope handle_scope(isolate);

0 commit comments

Comments
 (0)