diff options
author | Gus Caplan <me@gus.host> | 2018-04-13 11:49:41 -0700 |
---|---|---|
committer | Gus Caplan <me@gus.host> | 2018-04-15 12:46:19 -0700 |
commit | ebe499f0c7254e3bbb16807d8494229eb21a2eb7 (patch) | |
tree | 906fd1d31ad9c7f737a5d85769b3341dc6c96698 /deps | |
parent | 73f13ba2fceccea61629f66ceba4f2fea832bd9f (diff) | |
download | android-node-v8-ebe499f0c7254e3bbb16807d8494229eb21a2eb7.tar.gz android-node-v8-ebe499f0c7254e3bbb16807d8494229eb21a2eb7.tar.bz2 android-node-v8-ebe499f0c7254e3bbb16807d8494229eb21a2eb7.zip |
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: https://github.com/v8/v8/commit/39d546a24022b62b00aedf7b556ac6c9e2306aab
PR-URL: https://github.com/nodejs/node/pull/20016
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/AUTHORS | 1 | ||||
-rw-r--r-- | deps/v8/include/v8.h | 5 | ||||
-rw-r--r-- | deps/v8/src/api.cc | 4 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-api.cc | 29 |
4 files changed, 39 insertions, 0 deletions
diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index b2b01df888..76a27ac195 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 277cbd442a..0149ed3ca2 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -2354,6 +2354,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<Boolean> ToBoolean( Local<Context> context) const; V8_WARN_UNUSED_RESULT MaybeLocal<Number> ToNumber( diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index 8531cd5c05..ffe9bef520 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -3584,6 +3584,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 b13208950f..fe1aca5a0f 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -27041,6 +27041,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); |