Skip to content

Commit 0720d1f

Browse files
addaleaxcodebytere
authored andcommitted
src: introduce BaseObject base FunctionTemplate
PR-URL: #33772 Backport-PR-URL: #33965 Reviewed-By: Benjamin Gruenbaum <[email protected]>
1 parent 6dbd63c commit 0720d1f

13 files changed

+34
-0
lines changed

src/async_wrap.cc

+1
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ Local<FunctionTemplate> AsyncWrap::GetConstructorTemplate(Environment* env) {
565565
if (tmpl.IsEmpty()) {
566566
tmpl = env->NewFunctionTemplate(nullptr);
567567
tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "AsyncWrap"));
568+
tmpl->Inherit(BaseObject::GetConstructorTemplate(env));
568569
env->SetProtoMethod(tmpl, "getAsyncId", AsyncWrap::GetAsyncId);
569570
env->SetProtoMethod(tmpl, "asyncReset", AsyncWrap::AsyncReset);
570571
env->SetProtoMethod(tmpl, "getProviderType", AsyncWrap::GetProviderType);

src/base_object-inl.h

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ BaseObject::MakeLazilyInitializedJSTemplate(Environment* env) {
156156
};
157157

158158
v8::Local<v8::FunctionTemplate> t = env->NewFunctionTemplate(constructor);
159+
t->Inherit(BaseObject::GetConstructorTemplate(env));
159160
t->InstanceTemplate()->SetInternalFieldCount(
160161
BaseObject::kInternalFieldCount);
161162
return t;

src/base_object.h

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class BaseObject : public MemoryRetainer {
9898
// a BaseObjectPtr to this object.
9999
inline void Detach();
100100

101+
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
102+
Environment* env);
103+
101104
protected:
102105
virtual inline void OnGCCollect();
103106

src/env.cc

+11
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ void Environment::CreateProperties() {
269269
Local<FunctionTemplate> templ = FunctionTemplate::New(isolate());
270270
templ->InstanceTemplate()->SetInternalFieldCount(
271271
BaseObject::kInternalFieldCount);
272+
templ->Inherit(BaseObject::GetConstructorTemplate(this));
272273

273274
set_binding_data_ctor_template(templ);
274275
}
@@ -1112,4 +1113,14 @@ bool BaseObject::IsRootNode() const {
11121113
return !persistent_handle_.IsWeak();
11131114
}
11141115

1116+
Local<FunctionTemplate> BaseObject::GetConstructorTemplate(Environment* env) {
1117+
Local<FunctionTemplate> tmpl = env->base_object_ctor_template();
1118+
if (tmpl.IsEmpty()) {
1119+
tmpl = env->NewFunctionTemplate(nullptr);
1120+
tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "BaseObject"));
1121+
env->set_base_object_ctor_template(tmpl);
1122+
}
1123+
return tmpl;
1124+
}
1125+
11151126
} // namespace node

src/env.h

+1
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ constexpr size_t kFsStatsBufferLength =
396396
#define ENVIRONMENT_STRONG_PERSISTENT_TEMPLATES(V) \
397397
V(async_wrap_ctor_template, v8::FunctionTemplate) \
398398
V(async_wrap_object_ctor_template, v8::FunctionTemplate) \
399+
V(base_object_ctor_template, v8::FunctionTemplate) \
399400
V(binding_data_ctor_template, v8::FunctionTemplate) \
400401
V(compiled_fn_entry_template, v8::ObjectTemplate) \
401402
V(dir_instance_template, v8::ObjectTemplate) \

src/module_wrap.cc

+1
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@ void ModuleWrap::Initialize(Local<Object> target,
699699
tpl->SetClassName(FIXED_ONE_BYTE_STRING(isolate, "ModuleWrap"));
700700
tpl->InstanceTemplate()->SetInternalFieldCount(
701701
ModuleWrap::kInternalFieldCount);
702+
tpl->Inherit(BaseObject::GetConstructorTemplate(env));
702703

703704
env->SetProtoMethod(tpl, "link", Link);
704705
env->SetProtoMethod(tpl, "instantiate", Instantiate);

src/node_crypto.cc

+9
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@ void SecureContext::Initialize(Environment* env, Local<Object> target) {
455455
Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
456456
t->InstanceTemplate()->SetInternalFieldCount(
457457
SecureContext::kInternalFieldCount);
458+
t->Inherit(BaseObject::GetConstructorTemplate(env));
458459
Local<String> secureContextString =
459460
FIXED_ONE_BYTE_STRING(env->isolate(), "SecureContext");
460461
t->SetClassName(secureContextString);
@@ -3246,6 +3247,7 @@ Local<Function> KeyObject::Initialize(Environment* env, Local<Object> target) {
32463247
Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
32473248
t->InstanceTemplate()->SetInternalFieldCount(
32483249
KeyObject::kInternalFieldCount);
3250+
t->Inherit(BaseObject::GetConstructorTemplate(env));
32493251

32503252
env->SetProtoMethod(t, "init", Init);
32513253
env->SetProtoMethodNoSideEffect(t, "getSymmetricKeySize",
@@ -3480,6 +3482,7 @@ void CipherBase::Initialize(Environment* env, Local<Object> target) {
34803482

34813483
t->InstanceTemplate()->SetInternalFieldCount(
34823484
CipherBase::kInternalFieldCount);
3485+
t->Inherit(BaseObject::GetConstructorTemplate(env));
34833486

34843487
env->SetProtoMethod(t, "init", Init);
34853488
env->SetProtoMethod(t, "initiv", InitIv);
@@ -4095,6 +4098,7 @@ void Hmac::Initialize(Environment* env, Local<Object> target) {
40954098

40964099
t->InstanceTemplate()->SetInternalFieldCount(
40974100
Hmac::kInternalFieldCount);
4101+
t->Inherit(BaseObject::GetConstructorTemplate(env));
40984102

40994103
env->SetProtoMethod(t, "init", HmacInit);
41004104
env->SetProtoMethod(t, "update", HmacUpdate);
@@ -4207,6 +4211,7 @@ void Hash::Initialize(Environment* env, Local<Object> target) {
42074211

42084212
t->InstanceTemplate()->SetInternalFieldCount(
42094213
Hash::kInternalFieldCount);
4214+
t->Inherit(BaseObject::GetConstructorTemplate(env));
42104215

42114216
env->SetProtoMethod(t, "update", HashUpdate);
42124217
env->SetProtoMethod(t, "digest", HashDigest);
@@ -4463,6 +4468,7 @@ void Sign::Initialize(Environment* env, Local<Object> target) {
44634468

44644469
t->InstanceTemplate()->SetInternalFieldCount(
44654470
SignBase::kInternalFieldCount);
4471+
t->Inherit(BaseObject::GetConstructorTemplate(env));
44664472

44674473
env->SetProtoMethod(t, "init", SignInit);
44684474
env->SetProtoMethod(t, "update", SignUpdate);
@@ -4785,6 +4791,7 @@ void Verify::Initialize(Environment* env, Local<Object> target) {
47854791

47864792
t->InstanceTemplate()->SetInternalFieldCount(
47874793
SignBase::kInternalFieldCount);
4794+
t->Inherit(BaseObject::GetConstructorTemplate(env));
47884795

47894796
env->SetProtoMethod(t, "init", VerifyInit);
47904797
env->SetProtoMethod(t, "update", VerifyUpdate);
@@ -5095,6 +5102,7 @@ void DiffieHellman::Initialize(Environment* env, Local<Object> target) {
50955102

50965103
t->InstanceTemplate()->SetInternalFieldCount(
50975104
DiffieHellman::kInternalFieldCount);
5105+
t->Inherit(BaseObject::GetConstructorTemplate(env));
50985106

50995107
env->SetProtoMethod(t, "generateKeys", GenerateKeys);
51005108
env->SetProtoMethod(t, "computeSecret", ComputeSecret);
@@ -5454,6 +5462,7 @@ void ECDH::Initialize(Environment* env, Local<Object> target) {
54545462
HandleScope scope(env->isolate());
54555463

54565464
Local<FunctionTemplate> t = env->NewFunctionTemplate(New);
5465+
t->Inherit(BaseObject::GetConstructorTemplate(env));
54575466

54585467
t->InstanceTemplate()->SetInternalFieldCount(ECDH::kInternalFieldCount);
54595468

src/node_i18n.cc

+1
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,7 @@ void Initialize(Local<Object> target,
811811
// ConverterObject
812812
{
813813
Local<FunctionTemplate> t = FunctionTemplate::New(env->isolate());
814+
t->Inherit(BaseObject::GetConstructorTemplate(env));
814815
t->InstanceTemplate()->SetInternalFieldCount(
815816
ConverterObject::kInternalFieldCount);
816817
Local<String> converter_string =

src/node_perf.cc

+1
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@ void Initialize(Local<Object> target,
644644
eldh->SetClassName(eldh_classname);
645645
eldh->InstanceTemplate()->SetInternalFieldCount(
646646
ELDHistogram::kInternalFieldCount);
647+
eldh->Inherit(BaseObject::GetConstructorTemplate(env));
647648
env->SetProtoMethod(eldh, "exceeds", ELDHistogramExceeds);
648649
env->SetProtoMethod(eldh, "min", ELDHistogramMin);
649650
env->SetProtoMethod(eldh, "max", ELDHistogramMax);

src/node_serdes.cc

+2
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ void Initialize(Local<Object> target,
451451

452452
ser->InstanceTemplate()->SetInternalFieldCount(
453453
SerializerContext::kInternalFieldCount);
454+
ser->Inherit(BaseObject::GetConstructorTemplate(env));
454455

455456
env->SetProtoMethod(ser, "writeHeader", SerializerContext::WriteHeader);
456457
env->SetProtoMethod(ser, "writeValue", SerializerContext::WriteValue);
@@ -478,6 +479,7 @@ void Initialize(Local<Object> target,
478479

479480
des->InstanceTemplate()->SetInternalFieldCount(
480481
DeserializerContext::kInternalFieldCount);
482+
des->Inherit(BaseObject::GetConstructorTemplate(env));
481483

482484
env->SetProtoMethod(des, "readHeader", DeserializerContext::ReadHeader);
483485
env->SetProtoMethod(des, "readValue", DeserializerContext::ReadValue);

src/node_trace_events.cc

+1
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ void NodeCategorySet::Initialize(Local<Object> target,
131131
env->NewFunctionTemplate(NodeCategorySet::New);
132132
category_set->InstanceTemplate()->SetInternalFieldCount(
133133
NodeCategorySet::kInternalFieldCount);
134+
category_set->Inherit(BaseObject::GetConstructorTemplate(env));
134135
env->SetProtoMethod(category_set, "enable", NodeCategorySet::Enable);
135136
env->SetProtoMethod(category_set, "disable", NodeCategorySet::Disable);
136137

src/node_util.cc

+1
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ void Initialize(Local<Object> target,
325325
weak_ref->InstanceTemplate()->SetInternalFieldCount(
326326
WeakReference::kInternalFieldCount);
327327
weak_ref->SetClassName(weak_ref_string);
328+
weak_ref->Inherit(BaseObject::GetConstructorTemplate(env));
328329
env->SetProtoMethod(weak_ref, "get", WeakReference::Get);
329330
env->SetProtoMethod(weak_ref, "incRef", WeakReference::IncRef);
330331
env->SetProtoMethod(weak_ref, "decRef", WeakReference::DecRef);

src/node_wasi.cc

+1
Original file line numberDiff line numberDiff line change
@@ -1679,6 +1679,7 @@ static void Initialize(Local<Object> target,
16791679
auto wasi_wrap_string = FIXED_ONE_BYTE_STRING(env->isolate(), "WASI");
16801680
tmpl->InstanceTemplate()->SetInternalFieldCount(WASI::kInternalFieldCount);
16811681
tmpl->SetClassName(wasi_wrap_string);
1682+
tmpl->Inherit(BaseObject::GetConstructorTemplate(env));
16821683

16831684
env->SetProtoMethod(tmpl, "args_get", WASI::ArgsGet);
16841685
env->SetProtoMethod(tmpl, "args_sizes_get", WASI::ArgsSizesGet);

0 commit comments

Comments
 (0)