Skip to content

Removal of functions in V8 ~14.6 / Node 26.1.0 prevents building V8Js #546

Description

@redbullmarky

#545 fixed a bunch of issues and deprecations, etc but unfortunately now after trying to build against Node 26.1.0's V8 (14.6), a load more breaking changes were made to V8. e.g.

v8/v8@24eb3c4

More info:
nodejs/nan#1014

I have managed to make changes that result in a successful build but need to properly verify they're the right changes. It affects ~7 files. Example changes across the V8Js lib:

// old
v8::Local<v8::Object> self = info.This();

// new
v8::Local<v8::Object> self = info.HolderV2();
// old
php_obj->SetAlignedPointerInInternalField(1, Z_OBJ_P(getThis()));

// new
php_obj->SetAlignedPointerInInternalField(1, Z_OBJ_P(getThis()), v8::kEmbedderDataTypeTagDefault);
// old
zend_object *object = reinterpret_cast<zend_object *>(self->GetAlignedPointerFromInternalField(1));

// new
zend_object *object = reinterpret_cast<zend_object *>(self->GetAlignedPointerFromInternalField(1, {}));
// old
newobj->SetAlignedPointerInInternalField(0, ext_tmpl->Value());

// new
newobj->SetAlignedPointerInInternalField(0, ext_tmpl->Value(), v8::kEmbedderDataTypeTagDefault);
// old
str->Write(isolate, &c, 0, 1);

// new
str->WriteV2(isolate, 0, 1, &c); // different func *and* params switched around

Happy to get a PR in for this stuff (perhaps as part of 3.0.0 ?) but I'd be grateful for any guidance from someone that knows a bit more about all this than myself!

  1. Do the changes above look like acceptable swaps?
  2. Probably one for @stesie - I'm not sure how far back these changes would be in terms of compatible V8 version (yet). So we could either set a new minimum version of V8, or accept that we might have a whole heap of version guards (or perhaps some more abstraction, which might be a little cleaner).

Might see about doing something with the output too to make deprecations a little easier to spot. Think I've seen somewhere that eventually HolderV2() will be renamed back to Holder() at somet point, so it's certainly an awkward moving target :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions