--- plv8_func.cc.orig 2026-06-01 05:04:31 UTC +++ plv8_func.cc @@ -71,14 +71,15 @@ WrapCallback(FunctionCallback func) Isolate* isolate = Isolate::GetCurrent(); return External::New(isolate, reinterpret_cast( - reinterpret_cast(func))); + reinterpret_cast(func)), + v8::kExternalPointerTypeTagDefault); } static inline FunctionCallback UnwrapCallback(Handle value) { return reinterpret_cast( - reinterpret_cast(External::Cast(*value)->Value())); + reinterpret_cast(External::Cast(*value)->Value(v8::kExternalPointerTypeTagDefault))); } static inline void @@ -645,8 +646,8 @@ plv8_Prepare(const FunctionCallbackInfo &ar Local templ = Local::New(isolate, current_context->plan_template); Local result = templ->NewInstance(isolate->GetCurrentContext()).ToLocalChecked(); - result->SetInternalField(0, External::New(isolate, saved)); - result->SetInternalField(1, External::New(isolate, parstate)); + result->SetInternalField(0, External::New(isolate, saved, v8::kExternalPointerTypeTagDefault)); + result->SetInternalField(1, External::New(isolate, parstate, v8::kExternalPointerTypeTagDefault)); args.GetReturnValue().Set(result); } @@ -669,7 +670,7 @@ plv8_PlanCursor(const FunctionCallbackInfo plv8_param_state *parstate = NULL; plan = static_cast( - Handle::Cast(self->GetInternalField(0))->Value()); + Handle::Cast(self->GetInternalField(0))->Value(v8::kExternalPointerTypeTagDefault)); if (plan == NULL) { StringInfoData buf; @@ -694,7 +695,7 @@ plv8_PlanCursor(const FunctionCallbackInfo * If the plan has the variable param info, use it. */ parstate = static_cast( - Handle::Cast(self->GetInternalField(1))->Value()); + Handle::Cast(self->GetInternalField(1))->Value(v8::kExternalPointerTypeTagDefault)); if (parstate) argcount = parstate->numParams; @@ -777,7 +778,7 @@ plv8_PlanExecute(const FunctionCallbackInfo plan = static_cast( - Handle::Cast(self->GetInternalField(0))->Value()); + Handle::Cast(self->GetInternalField(0))->Value(v8::kExternalPointerTypeTagDefault)); /* XXX: Add plan validation */ if (args.Length() > 0) @@ -793,7 +794,7 @@ plv8_PlanExecute(const FunctionCallbackInfo * If the plan has the variable param info, use it. */ parstate = static_cast( - Handle::Cast(self->GetInternalField(1))->Value()); + Handle::Cast(self->GetInternalField(1))->Value(v8::kExternalPointerTypeTagDefault)); if (parstate) argcount = parstate->numParams; @@ -868,19 +869,19 @@ plv8_PlanFree(const FunctionCallbackInfo &a int status = 0; plan = static_cast( - Handle::Cast(self->GetInternalField(0))->Value()); + Handle::Cast(self->GetInternalField(0))->Value(v8::kExternalPointerTypeTagDefault)); if (plan) status = SPI_freeplan(plan); - self->SetInternalField(0, External::New(isolate, 0)); + self->SetInternalField(0, External::New(isolate, nullptr, v8::kExternalPointerTypeTagDefault)); parstate = static_cast( - Handle::Cast(self->GetInternalField(1))->Value()); + Handle::Cast(self->GetInternalField(1))->Value(v8::kExternalPointerTypeTagDefault)); if (parstate) pfree(parstate); - self->SetInternalField(1, External::New(isolate, 0)); + self->SetInternalField(1, External::New(isolate, nullptr, v8::kExternalPointerTypeTagDefault)); args.GetReturnValue().Set(Int32::New(isolate, status)); } @@ -899,7 +900,7 @@ plv8_CursorFetch(const FunctionCallbackInfo throw js_error("cannot find cursor"); } - CString cname(self->GetInternalField(0)); + CString cname(self->GetInternalField(0).As()); Portal cursor = SPI_cursor_find(cname); int nfetch = 1; bool forward = true, wantarray = false; @@ -965,7 +966,7 @@ plv8_CursorMove(const FunctionCallbackInfo& { Isolate* isolate = args.GetIsolate(); Handle self = args.This(); - CString cname(self->GetInternalField(0)); + CString cname(self->GetInternalField(0).As()); Portal cursor = SPI_cursor_find(cname); int nmove = 1; bool forward = true; @@ -1007,7 +1008,7 @@ plv8_CursorClose(const FunctionCallbackInfo plv8_CursorClose(const FunctionCallbackInfo &args) { Handle self = args.This(); - CString cname(self->GetInternalField(0)); + CString cname(self->GetInternalField(0).As()); Portal cursor = SPI_cursor_find(cname); if (!cursor) @@ -1035,17 +1036,17 @@ plv8_ReturnNext(const FunctionCallbackInfo& plv8_ReturnNext(const FunctionCallbackInfo& args) { Handle self = args.This(); - Handle conv_value = self->GetInternalField(PLV8_INTNL_CONV); + Handle conv_value = self->GetInternalField(PLV8_INTNL_CONV).As(); if (!conv_value->IsExternal()) throw js_error("return_next called in context that cannot accept a set"); Converter *conv = static_cast( - Handle::Cast(conv_value)->Value()); + Handle::Cast(conv_value)->Value(v8::kExternalPointerTypeTagDefault)); Tuplestorestate *tupstore = static_cast( Handle::Cast( - self->GetInternalField(PLV8_INTNL_TUPSTORE))->Value()); + self->GetInternalField(PLV8_INTNL_TUPSTORE).As())->Value(v8::kExternalPointerTypeTagDefault)); conv->ToDatum(args[0], tupstore); @@ -1158,7 +1159,7 @@ plv8_GetWindowObject(const FunctionCallbackInfo self = args.This(); Handle fcinfo_value = - self->GetInternalField(PLV8_INTNL_FCINFO); + self->GetInternalField(PLV8_INTNL_FCINFO).As(); if (!fcinfo_value->IsExternal()) throw js_error("get_window_object called in wrong context"); @@ -1179,7 +1180,7 @@ plv8_MyWindowObject(const FunctionCallbackInfo self = args.This(); /* fcinfo is embedded in the internal field. See plv8_GetWindowObject() */ FunctionCallInfo fcinfo = static_cast( - Handle::Cast(self->GetInternalField(0))->Value()); + Handle::Cast(self->GetInternalField(0))->Value(v8::kExternalPointerTypeTagDefault)); if (fcinfo == NULL) throw js_error("window function api called with wrong object"); @@ -1201,7 +1202,7 @@ plv8_MyArgType(const FunctionCallbackInfo& { Handle self = args.This(); FunctionCallInfo fcinfo = static_cast( - Handle::Cast(self->GetInternalField(0))->Value()); + Handle::Cast(self->GetInternalField(0))->Value(v8::kExternalPointerTypeTagDefault)); if (fcinfo == NULL) throw js_error("window function api called with wrong object"); @@ -1636,7 +1637,7 @@ void GetMemoryInfo(v8::Local obj) { void GetMemoryInfo(v8::Local obj) { HeapStatistics v8_heap_stats; - Isolate *isolate = obj->GetIsolate(); + Isolate *isolate = Isolate::GetCurrent(); Handle context = isolate->GetCurrentContext(); isolate->GetHeapStatistics(&v8_heap_stats);