Skip to content

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

@redbullmarky

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions