From 8b9ee2ba2c0792fef27b504a5b6400cc14cc8508 Mon Sep 17 00:00:00 2001 From: Keyhan Vakil Date: Wed, 15 Mar 2023 05:31:27 +0000 Subject: [PATCH] remove IsDataStatic --- src/node_builtins.cc | 11 +---------- src/node_builtins.h | 4 +++- src/node_union_bytes.h | 13 +------------ tools/js2c.py | 23 ++++++++++++++++------- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/node_builtins.cc b/src/node_builtins.cc index 95d63116d0ec29..60e81210127411 100644 --- a/src/node_builtins.cc +++ b/src/node_builtins.cc @@ -718,16 +718,7 @@ void BuiltinLoader::RegisterExternalReferences( registry->Register(CompileFunction); registry->Register(HasCachedBuiltins); - auto global_sources = GetGlobalSourceMap()->read(); - for (auto const& x : *global_sources) { - // We can register any static data as an external reference, since (1) we - // know it'll survive until snapshot serialization or deserialization and - // (2) the list of static data is guaranteed to be in a fixed order (since - // resources with static data are internalized builtins created by js2c). - if (x.second.IsDataStatic()) { - registry->Register(x.second.AsResource()); - } - } + RegisterExternalReferencesForInternalizedBuiltinCode(registry); } } // namespace builtins diff --git a/src/node_builtins.h b/src/node_builtins.h index 1fc7c8ee44d266..40a87d207a48a4 100644 --- a/src/node_builtins.h +++ b/src/node_builtins.h @@ -10,6 +10,7 @@ #include #include #include +#include "node_external_reference.h" #include "node_mutex.h" #include "node_threadsafe_cow.h" #include "node_union_bytes.h" @@ -31,7 +32,8 @@ using BuiltinCodeCacheMap = std::unique_ptr>; // Generated by tools/js2c.py as node_javascript.cc -const ThreadsafeCopyOnWrite* GetGlobalSourceMap(); +void RegisterExternalReferencesForInternalizedBuiltinCode( + ExternalReferenceRegistry* registry); struct CodeCacheInfo { std::string id; diff --git a/src/node_union_bytes.h b/src/node_union_bytes.h index d23b73013a86e7..e8fa1eab9069a6 100644 --- a/src/node_union_bytes.h +++ b/src/node_union_bytes.h @@ -25,8 +25,6 @@ class StaticExternalByteResource : public Base { } size_t length() const override { return length_; } - bool IsDataStatic() const { return owning_ptr_ == nullptr; } - void Dispose() override { // We ignore Dispose calls from V8, even if we "own" a resource via // owning_ptr_. All instantiations of this class are static or owned by a @@ -68,16 +66,7 @@ class UnionBytes { UnionBytes& operator=(UnionBytes&&) = default; bool IsOneByte() const { return one_byte_resource_ != nullptr; } - bool IsDataStatic() const { - return IsOneByte() ? one_byte_resource_->IsDataStatic() - : two_byte_resource_->IsDataStatic(); - } - v8::String::ExternalStringResourceBase* AsResource() const { - return IsOneByte() ? static_cast( - one_byte_resource_) - : static_cast( - two_byte_resource_); - } + v8::Local ToStringChecked(v8::Isolate* isolate) const; private: diff --git a/tools/js2c.py b/tools/js2c.py index e8bf4c52e49ed1..7e259fd347fc02 100755 --- a/tools/js2c.py +++ b/tools/js2c.py @@ -49,6 +49,7 @@ def ReadFile(filename): TEMPLATE = """ #include "env-inl.h" #include "node_builtins.h" +#include "node_external_reference.h" #include "node_internals.h" namespace node {{ @@ -67,12 +68,13 @@ def ReadFile(filename): source_ = global_source_map; }} -const ThreadsafeCopyOnWrite *GetGlobalSourceMap() {{ - return &global_source_map; +void RegisterExternalReferencesForInternalizedBuiltinCode( + ExternalReferenceRegistry* registry) {{ + {2} }} UnionBytes BuiltinLoader::GetConfig() {{ - return UnionBytes(&{2}); + return UnionBytes(&{3}); }} }} // namespace builtins @@ -98,6 +100,8 @@ def ReadFile(filename): INITIALIZER = '{{"{0}", UnionBytes(&{1}) }},' +REGISTRATION = 'registry->Register(&{0});' + CONFIG_GYPI_ID = 'config_raw' CONFIG_GYPI_RESOURCE_ID = 'config_resource' @@ -130,7 +134,7 @@ def GetDefinition(var, source, resource_var, step=30): return definition -def AddModule(filename, definitions, initializers): +def AddModule(filename, definitions, initializers, registrations): code = ReadFile(filename) name = NormalizeFileName(filename) slug = SLUGGER_RE.sub('_', name) @@ -138,8 +142,10 @@ def AddModule(filename, definitions, initializers): resource_var = slug + '_resource' definition = GetDefinition(var, code, resource_var) initializer = INITIALIZER.format(name, resource_var) + registration = REGISTRATION.format(resource_var) definitions.append(definition) initializers.append(initializer) + registrations.append(registration) def NormalizeFileName(filename): split = filename.split('/') @@ -156,11 +162,12 @@ def JS2C(source_files, target): # Build source code lines definitions = [] initializers = [] + registrations = [] for filename in source_files['.js']: - AddModule(filename, definitions, initializers) + AddModule(filename, definitions, initializers, registrations) for filename in source_files['.mjs']: - AddModule(filename, definitions, initializers) + AddModule(filename, definitions, initializers, registrations) config_def = handle_config_gypi(source_files['config.gypi']) definitions.append(config_def) @@ -168,7 +175,9 @@ def JS2C(source_files, target): # Emit result definitions = ''.join(definitions) initializers = '\n '.join(initializers) - out = TEMPLATE.format(definitions, initializers, CONFIG_GYPI_RESOURCE_ID) + registrations = '\n '.join(registrations) + out = TEMPLATE.format(definitions, initializers, + registrations, CONFIG_GYPI_RESOURCE_ID) write_if_chaged(out, target)