JavaScript::V8 を動かしてみた。
FreeBSD 13.3 ports 2024Q1
make test は全て通ります。
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# make_test.log
# Makefile
# files/patch-Makefile.PL
# files/patch-V8Context.cpp
# distinfo
# pkg-descr
# pkg-plist
#
echo x - make_test.log
sed 's/^X//' >make_test.log << 'c9891b13d8d0ca1e6710989b08242cf1'
X# uname -a
XFreeBSD host1 13.3-STABLE FreeBSD 13.3-STABLE n257699-c39938ddd3a7 MYKERNEL amd64
X# git branch
X* local-2024Q1
X# pkg query %n-%v v8
Xv8-10.4.132.20_3
X# pwd
X/usr/ports/lang/p5-JavaScript-V8
X# make test
X===> p5-JavaScript-V8-0.11 depends on file: /usr/local/sbin/pkg - found
X===> Fetching all distfiles required by p5-JavaScript-V8-0.11 for building
X===> Extracting for p5-JavaScript-V8-0.11
X=> SHA256 Checksum OK for JavaScript-V8-0.11.tar.gz.
X===> Patching for p5-JavaScript-V8-0.11
X===> Applying FreeBSD patches for p5-JavaScript-V8-0.11 from /usr/ports/lang/p5-JavaScript-V8/files
X===> p5-JavaScript-V8-0.11 depends on package: p5-Devel-CheckLib>=0.92 - found
X===> p5-JavaScript-V8-0.11 depends on package: p5-ExtUtils-CppGuess>=0.19 - found
X===> p5-JavaScript-V8-0.11 depends on package: p5-ExtUtils-XSpp>=0.11 - found
X===> p5-JavaScript-V8-0.11 depends on package: perl5>=5.36<5.37 - found
X===> p5-JavaScript-V8-0.11 depends on shared library: libv8.so - found (/usr/local/lib/libv8.so)
X===> Configuring for p5-JavaScript-V8-0.11
XChecking if your kit is complete...
XLooks good
XGenerating a Unix-style Makefile
XWriting Makefile for JavaScript::V8
XWriting MYMETA.yml and MYMETA.json
X===> Building for p5-JavaScript-V8-0.11
X--- blib/lib/JavaScript/.exists ---
X--- blib/arch/.exists ---
X--- blib/lib/auto/JavaScript/V8/.exists ---
X--- blib/arch/auto/JavaScript/V8/.exists ---
X--- blib/bin/.exists ---
X--- blib/script/.exists ---
X--- blib/man1/.exists ---
X--- blib/man3/.exists ---
X--- config ---
X--- subdirs ---
X--- dynamic ---
X--- WithV8Context.c ---
X--- V8.bs ---
X--- V8Context.o ---
X--- pm_to_blib ---
X--- WithV8Context.c ---
X"/usr/local/bin/perl" "/usr/local/lib/perl5/5.36/ExtUtils/xsubpp" -C++ -hiertype -typemap '/usr/local/lib/perl5/5.36/ExtUtils/typemap' -typemap '/usr/ports/lang/p5-JavaScript-V8/work/JavaScript-V8-0.11/perlobject.map' -typemap '/usr/ports/lang/p5-JavaScript-V8/work/JavaScript-V8-0.11/typemap' WithV8Context.xs > WithV8Context.xsc
XRunning Mkbootstrap for V8 ()
X--- V8Context.o ---
Xc++ -c -I. -O2 -pipe -DV8_COMPRESS_POINTERS=1 -DV8_31BIT_SMIS_ON_64BIT_ARCH=1 -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DVERSION=\"0.11\" -DXS_VERSION=\"0.11\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.36/mach/CORE" V8Context.cpp
X--- V8.bs ---
Xchmod 644 "V8.bs"
X--- blib/arch/auto/JavaScript/V8/V8.bs ---
X"/usr/local/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- V8.bs blib/arch/auto/JavaScript/V8/V8.bs 644
X--- blibdirs ---
X--- config ---
X--- pm_to_blib ---
Xcp lib/JavaScript/V8.pm blib/lib/JavaScript/V8.pm
Xcp lib/JavaScript/V8/Context.pm blib/lib/JavaScript/V8/Context.pm
X--- WithV8Context.c ---
XPlease specify prototyping behavior for WithV8Context.xs (see perlxs manual)
Xmv WithV8Context.xsc WithV8Context.c
X--- WithV8Context.o ---
Xc++ -c -I. -O2 -pipe -DV8_COMPRESS_POINTERS=1 -DV8_31BIT_SMIS_ON_64BIT_ARCH=1 -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -DVERSION=\"0.11\" -DXS_VERSION=\"0.11\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.36/mach/CORE" WithV8Context.c
Xc++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
XWithV8Context.c:515:1: warning: duplicate 'extern' declaration specifier [-Wduplicate-decl-specifier]
X 515 | XS_EXTERNAL(boot_JavaScript__V8); /* prototype to pass -Wmissing-prototypes */
X | ^
X/usr/local/lib/perl5/5.36/mach/CORE/XSUB.h:146:29: note: expanded from macro 'XS_EXTERNAL'
X 146 | # define XS_EXTERNAL(name) extern "C" XSPROTO(name)
X | ^
X--- V8Context.o ---
XV8Context.cpp:699:9: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result]
X 699 | prototype->Set(this->get_local_context(), name, (new PerlMethodData(this, SvPV_nolen(key)))->object.Get(isolate));
X | ^~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XV8Context.cpp:797:13: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result]
X 797 | array->Set(this->get_local_context(), Integer::New(isolate, i), sv2v8(*sv, seen));
X | ^~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XV8Context.cpp:812:16: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
X 812 | while (val = hv_iternextsv(hv, &key, &len)) {
X | ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XV8Context.cpp:812:16: note: place parentheses around the assignment to silence this warning
X 812 | while (val = hv_iternextsv(hv, &key, &len)) {
X | ^
X | ( )
XV8Context.cpp:812:16: note: use '==' to turn this assignment into an equality comparison
X 812 | while (val = hv_iternextsv(hv, &key, &len)) {
X | ^
X | ==
XV8Context.cpp:813:9: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result]
X 813 | object->Set(this->get_local_context(), v8::String::NewFromUtf8(isolate, key, v8::NewStringType::kNormal).ToLocalChecked(), sv2v8(val, seen));
X | ^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XV8Context.cpp:1033:1: warning: non-void function does not return a value [-Wreturn-type]
X 1033 | }
X | ^
X--- WithV8Context.o ---
X1 warning generated.
X--- V8Context.o ---
X5 warnings generated.
X--- blib/arch/auto/JavaScript/V8/V8.so ---
Xrm -f blib/arch/auto/JavaScript/V8/V8.so
XLD_RUN_PATH="/usr/local/lib" c++ -shared -L/usr/local/lib/perl5/5.36/mach/CORE -lperl -L/usr/local/lib -fstack-protector-strong V8Context.o WithV8Context.o -lc++ -o blib/arch/auto/JavaScript/V8/V8.so -lv8 -lv8_libplatform
Xchmod 755 blib/arch/auto/JavaScript/V8/V8.so
X--- dynamic ---
X--- linkext ---
X--- pure_all ---
X--- manifypods ---
XManifying 2 pod documents
X--- all ---
X===> Staging for p5-JavaScript-V8-0.11
X===> p5-JavaScript-V8-0.11 depends on package: perl5>=5.36<5.37 - found
X===> Generating temporary packing list
X"/usr/local/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- V8.bs blib/arch/auto/JavaScript/V8/V8.bs 644
XManifying 2 pod documents
XFiles found in blib/arch: installing files in blib/lib into architecture dependent library tree
XInstalling /usr/ports/lang/p5-JavaScript-V8/work/stage/usr/local/lib/perl5/site_perl/mach/5.36/auto/JavaScript/V8/V8.so
XInstalling /usr/ports/lang/p5-JavaScript-V8/work/stage/usr/local/lib/perl5/site_perl/mach/5.36/JavaScript/V8.pm
XInstalling /usr/ports/lang/p5-JavaScript-V8/work/stage/usr/local/lib/perl5/site_perl/mach/5.36/JavaScript/V8/Context.pm
XInstalling /usr/ports/lang/p5-JavaScript-V8/work/stage/usr/local/lib/perl5/site_perl/man/man3/JavaScript::V8::Context.3
XInstalling /usr/ports/lang/p5-JavaScript-V8/work/stage/usr/local/lib/perl5/site_perl/man/man3/JavaScript::V8.3
X====> Compressing man pages (compress-man)
X===> Testing for p5-JavaScript-V8-0.11
X===> p5-JavaScript-V8-0.11 depends on package: p5-Test-Number-Delta>=0 - found
X"/usr/local/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- V8.bs blib/arch/auto/JavaScript/V8/V8.bs 644
XPERL_DL_NONLAZY=1 "/usr/local/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
Xt/00-report-prereqs.t .. #
X# Versions for all modules listed in MYMETA.json (including optional ones):
X#
X# === Configure Requires ===
X#
X# Module Want Have Where Howbig
X# ------------------- ---- ---- ------------------------------ ------
X# Devel::CheckLib 0.92 1.16 /usr/local/lib/perl5/site_perl 18784
X# ExtUtils::CppGuess 0.19 0.27 /usr/local/lib/perl5/site_perl 16076
X# ExtUtils::MakeMaker 6.64 7.64 /usr/local/lib/perl5/5.36 109482
X#
X# === Build Requires ===
X#
X# Module Want Have Where Howbig
X# -------------- ---- ---- ------------------------------ ------
X# ExtUtils::XSpp 0.11 0.18 /usr/local/lib/perl5/site_perl 108
X#
X# === Test Requires ===
X#
X# Module Want Have Where Howbig
X# ------------------- ---- ---- ------------------------------ ------
X# Test::Number::Delta any 1.06 /usr/local/lib/perl5/site_perl 19391
X#
Xt/00-report-prereqs.t .. ok
Xt/01load.t ............. ok
Xt/basic.t .............. ok
Xt/bind_function.t ...... ok
Xt/bind_object.t ........ ok
Xt/boolean.t ............ ok
Xt/circular.t ........... ok
Xt/error.t .............. ok
Xt/eval_array.t ......... ok
Xt/eval_object.t ........ ok
Xt/global.t ............. ok
Xt/interrupt.t .......... ok
Xt/jsobj.t .............. ok
Xt/null.t ............... ok
Xt/plobj.t .............. ok
Xt/refcnt.t ............. ok
Xt/syntax_error.t ....... ok
Xt/types.t .............. ok
Xt/void.t ............... ok
Xt/zzmem_plojb1.t ....... skipped: apparent memory-leak, fixes welcome
Xt/zzmem_plojb2.t ....... ok
Xt/zzmem_sub.t .......... ok
XAll tests successful.
X
XTest Summary Report
X-------------------
Xt/interrupt.t (Wstat: 0 Tests: 2 Failed: 0)
X TODO passed: 2
XFiles=22, Tests=2104, 6 wallclock secs ( 0.12 usr 0.02 sys + 6.25 cusr 0.30 csys = 6.70 CPU)
XResult: PASS
c9891b13d8d0ca1e6710989b08242cf1
echo x - Makefile
sed 's/^X//' >Makefile << 'b67911656ef5d18c4ae36cb6741b7965'
XPORTNAME= JavaScript-V8
XPORTVERSION= 0.11
XCATEGORIES= lang perl5
XMASTER_SITES= CPAN
XMASTER_SITE_SUBDIR=CPAN:ETJ
XPKGNAMEPREFIX= p5-
X
XMAINTAINER= bokutin@bokut.in
XCOMMENT= Perl interface to the V8 JavaScript engine
X
XBUILD_DEPENDS= p5-Devel-CheckLib>=0.92:devel/p5-Devel-CheckLib \
X p5-ExtUtils-CppGuess>=0.19:devel/p5-ExtUtils-CppGuess \
X p5-ExtUtils-XSpp>=0.11:devel/p5-ExtUtils-XSpp
XLIB_DEPENDS= libv8.so:lang/v8
XTEST_DEPENDS= p5-Test-Number-Delta>=0:devel/p5-Test-Number-Delta
X
XUSES= perl5 localbase:ldflags
XUSE_PERL5= configure
X
XCC= c++
XCFLAGS+= -DV8_COMPRESS_POINTERS=1 -DV8_31BIT_SMIS_ON_64BIT_ARCH=1
X
X.include <bsd.port.mk>
b67911656ef5d18c4ae36cb6741b7965
echo x - files/patch-Makefile.PL
sed 's/^X//' >files/patch-Makefile.PL << '492eac760546ef81beff3720b53ed455'
X--- Makefile.PL.orig 2022-12-18 20:03:30 UTC
X+++ Makefile.PL
X@@ -30,7 +30,7 @@ WriteMakefile(
X },
X ABSTRACT_FROM => 'lib/JavaScript/V8.pm',
X AUTHOR => 'Pawel Murias <pawelmurias@gmail.org>',
X- LIBS => [($V8_DIR ? "-L$V8_DIR " : '') . '-lv8'],
X+ LIBS => [($V8_DIR ? "-L$V8_DIR " : '') . '-lv8 -lv8_libplatform'],
X INC => '-I.' . ($V8_DIR ? " -I$V8_DIR/include" : ''),
X OBJECT => '$(O_FILES)', # link all the C files too
X XSOPT => '-C++ -hiertype',
492eac760546ef81beff3720b53ed455
echo x - files/patch-V8Context.cpp
sed 's/^X//' >files/patch-V8Context.cpp << '45010345c41f6fdf65e66720125c9ae8'
X--- V8Context.cpp.orig 2022-12-18 23:52:31 UTC
X+++ V8Context.cpp
X@@ -47,9 +47,9 @@ check_perl_error() {
X const char *err = SvPV_nolen(ERRSV);
X
X if (err && strlen(err) > 0) {
X- Handle<String> error = v8::String::NewFromUtf8(isolate, err, v8::String::kNormalString);
X+ MaybeLocal<String> error = v8::String::NewFromUtf8(isolate, err, v8::NewStringType::kNormal);
X sv_setsv(ERRSV, &PL_sv_no);
X- Handle<Value> v = isolate->ThrowException(Exception::Error(error));
X+ Handle<Value> v = isolate->ThrowException(Exception::Error(error.ToLocalChecked()));
X return v;
X }
X
X@@ -223,7 +223,7 @@ class V8FunctionData : public V8ObjectData {
X public:
X V8FunctionData(V8Context* context_, Handle<Object> object_, SV* sv_)
X : V8ObjectData(context_, object_, sv_)
X- , returns_list(object_->Has(context_->get_local_context(), String::NewFromUtf8(isolate, "__perlReturnsList", v8::String::kNormalString)).FromMaybe(0))
X+ , returns_list(object_->Has(context_->get_local_context(), String::NewFromUtf8(isolate, "__perlReturnsList", v8::NewStringType::kNormal).ToLocalChecked()).FromMaybe(0))
X { }
X
X bool returns_list;
X@@ -356,8 +356,9 @@ V8Context::V8Context(
X
X Local<FunctionTemplate> tmpl = FunctionTemplate::New(isolate, PerlFunctionData::v8invoke);
X
X- context->Global()->Set(
X- v8::String::NewFromUtf8(isolate, "__perlFunctionWrapper", v8::String::kNormalString),
X+ (void) context->Global()->Set(
X+ context,
X+ v8::String::NewFromUtf8(isolate, "__perlFunctionWrapper", v8::NewStringType::kNormal).ToLocalChecked(),
X tmpl->GetFunction(context).ToLocalChecked()
X );
X
X@@ -372,13 +373,13 @@ V8Context::V8Context(
X " return __perlFunctionWrapper.apply(this, args)"
X " };"
X "})",
X- v8::String::kNormalString
X- )
X+ v8::NewStringType::kNormal
X+ ).ToLocalChecked()
X ).ToLocalChecked();
X
X make_function.Reset(isolate, Handle<Function>::Cast(script->Run(context).ToLocalChecked()));
X
X- string_wrap.Reset(isolate, String::NewFromUtf8(isolate, "wrap"));
X+ string_wrap.Reset(isolate, String::NewFromUtf8(isolate, "wrap").ToLocalChecked());
X
X number++;
X }
X@@ -440,7 +441,7 @@ V8Context::bind(const char *name, SV *thing) {
X Local<Context> local_context = Local<Context>::New(isolate, context);
X Context::Scope context_scope(local_context);
X
X- local_context->Global()->Set(v8::String::NewFromUtf8(isolate, name, v8::String::kNormalString), sv2v8(thing));
X+ (void) local_context->Global()->Set(local_context, v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal).ToLocalChecked(), sv2v8(thing));
X }
X
X void
X@@ -453,7 +454,7 @@ V8Context::bind_ro(const char *name, SV *thing) {
X
X bool result = context.Get(isolate)->Global()->DefineOwnProperty(
X isolate->GetCurrentContext(),
X- v8::String::NewFromUtf8(isolate, name, v8::String::kNormalString),
X+ v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal).ToLocalChecked(),
X sv2v8(thing),
X v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)
X ).IsJust();
X@@ -467,7 +468,7 @@ void V8Context::name_global(const char *name) {
X
X bool result = context.Get(isolate)->Global()->DefineOwnProperty(
X isolate->GetCurrentContext(),
X- v8::String::NewFromUtf8(isolate, name, v8::String::kNormalString),
X+ v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal).ToLocalChecked(),
X context.Get(isolate)->Global(),
X v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)
X ).IsJust();
X@@ -476,13 +477,13 @@ void V8Context::name_global(const char *name) {
X // I fucking hate pthreads, this lacks error handling, but hopefully works.
X class thread_canceller {
X public:
X- thread_canceller(int sec)
X+ thread_canceller(int sec, bool *p_timeouted_arg)
X : sec_(sec)
X {
X+ p_timeouted = p_timeouted_arg;
X if (sec_) {
X pthread_cond_init(&cond_, NULL);
X pthread_mutex_init(&mutex_, NULL);
X- pthread_mutex_lock(&mutex_); // passed locked to canceller
X pthread_create(&id_, NULL, canceller, this);
X }
X }
X@@ -509,16 +510,19 @@ class thread_canceller { (private)
X ts.tv_sec = tv.tv_sec + me->sec_;
X ts.tv_nsec = tv.tv_usec * 1000;
X
X+ pthread_mutex_lock(&me->mutex_); // passed locked to canceller
X if (pthread_cond_timedwait(&me->cond_, &me->mutex_, &ts) == ETIMEDOUT) {
X isolate->TerminateExecution();
X+ *me->p_timeouted = true;
X }
X pthread_mutex_unlock(&me->mutex_);
X return NULL;
X }
X
X pthread_t id_;
X- pthread_cond_t cond_;
X- pthread_mutex_t mutex_;
X+ bool *p_timeouted;
X+ pthread_cond_t cond_ = PTHREAD_COND_INITIALIZER;
X+ pthread_mutex_t mutex_ = PTHREAD_MUTEX_INITIALIZER;
X int sec_;
X };
X
X@@ -532,7 +536,7 @@ V8Context::eval(SV* source, SV* origin) {
X
X // V8 expects everything in UTF-8, ensure SVs are upgraded.
X sv_utf8_upgrade(source);
X- ScriptOrigin orig(origin ? sv2v8str(origin) : String::NewFromUtf8(isolate, "eval", v8::String::kNormalString));
X+ ScriptOrigin orig(isolate, origin ? sv2v8str(origin) : String::NewFromUtf8(isolate, "eval", v8::NewStringType::kNormal).ToLocalChecked());
X MaybeLocal<Script> script = Script::Compile(
X local_context,
X sv2v8str(source),
X@@ -543,11 +547,18 @@ V8Context::eval(SV* source, SV* origin) {
X set_perl_error(local_context, try_catch);
X return &PL_sv_undef;
X }
X- thread_canceller canceller(time_limit_);
X+
X+ bool timeouted = false;
X+ thread_canceller canceller(time_limit_, &timeouted);
X MaybeLocal<Value> val = script.ToLocalChecked()->Run(local_context);
X
X if (val.IsEmpty()) {
X- set_perl_error(local_context, try_catch);
X+ if (timeouted) {
X+ sv_setpv(ERRSV, "timeouted terminated");
X+ }
X+ else {
X+ set_perl_error(local_context, try_catch);
X+ }
X return &PL_sv_undef;
X }
X sv_setsv(ERRSV,&PL_sv_undef);
X@@ -564,7 +575,7 @@ V8Context::sv2v8(SV *sv, HandleMap& seen) {
X if (SvPOK(sv)) {
X // Upgrade string to UTF-8 if needed
X char *utf8 = SvPVutf8_nolen(sv);
X- return String::NewFromUtf8(isolate, utf8, v8::String::kNormalString);
X+ return String::NewFromUtf8(isolate, utf8, v8::NewStringType::kNormal).ToLocalChecked();
X }
X if (SvUOK(sv)) {
X UV v = SvUV(sv);
X@@ -593,7 +604,7 @@ Handle<String> V8Context::sv2v8str(SV* sv)
X {
X // Upgrade string to UTF-8 if needed
X char *utf8 = SvPVutf8_nolen(sv);
X- return String::NewFromUtf8(isolate, utf8, v8::String::kNormalString, SvCUR(sv));
X+ return String::NewFromUtf8(isolate, utf8, v8::NewStringType::kNormal, SvCUR(sv)).ToLocalChecked();
X }
X
X SV* V8Context::seen_v8(Handle<Object> object) {
X@@ -641,8 +652,8 @@ V8Context::v82sv(Handle<Value> value, SvMap& seen) {
X }
X
X if (value->IsArray() || value->IsObject() || value->IsFunction()) {
X- Handle<Object> object = value->ToObject(isolate);
X-
X+ Handle<Object> object = value->ToObject(ctx).ToLocalChecked();
X+
X if (SV *cached = seen_v8(object))
X return cached;
X
X@@ -680,12 +691,12 @@ V8Context::fill_prototype(Handle<Object> prototype, HV
X HE *he;
X while ((he = hv_iternext(stash))) {
X SV *key = HeSVKEY_force(he);
X- Local<String> name = v8::String::NewFromUtf8(isolate, SvPV_nolen(key), v8::String::kNormalString);
X+ Local<String> name = v8::String::NewFromUtf8(isolate, SvPV_nolen(key), v8::NewStringType::kNormal).ToLocalChecked();
X
X if (prototype->Has(this->get_local_context(), name).FromMaybe(0))
X continue;
X
X- prototype->Set(name, (new PerlMethodData(this, SvPV_nolen(key)))->object.Get(isolate));
X+ prototype->Set(this->get_local_context(), name, (new PerlMethodData(this, SvPV_nolen(key)))->object.Get(isolate));
X }
X }
X
X@@ -783,7 +794,7 @@ V8Context::av2array(AV *av, HandleMap& seen, long ptr)
X seen[ptr] = array;
X for (i = 0; i < len; i++) {
X if (SV** sv = av_fetch(av, i, 0)) {
X- array->Set(Integer::New(isolate, i), sv2v8(*sv, seen));
X+ array->Set(this->get_local_context(), Integer::New(isolate, i), sv2v8(*sv, seen));
X }
X }
X return array;
X@@ -799,7 +810,7 @@ V8Context::hv2object(HV *hv, HandleMap& seen, long ptr
X Handle<Object> object = Object::New(isolate);
X seen[ptr] = object;
X while (val = hv_iternextsv(hv, &key, &len)) {
X- object->Set(v8::String::NewFromUtf8(isolate, key, v8::String::kNormalString), sv2v8(val, seen));
X+ object->Set(this->get_local_context(), v8::String::NewFromUtf8(isolate, key, v8::NewStringType::kNormal).ToLocalChecked(), sv2v8(val, seen));
X }
X return object;
X }
X@@ -817,7 +828,7 @@ V8Context::array2sv(Handle<Array> array, SvMap& seen)
X seen.add(array, PTR2IV(av));
X
X for (int i = 0; i < array->Length(); i++) {
X- Handle<Value> elementVal = array->Get( Integer::New( isolate, i ) );
X+ Handle<Value> elementVal = array->Get(this->get_local_context(), Integer::New( isolate, i ) ).ToLocalChecked();
X av_push(av, v82sv(elementVal, seen));
X }
X return rv;
X@@ -825,7 +836,7 @@ V8Context::array2sv(Handle<Array> array, SvMap& seen)
X
X SV *
X V8Context::object2sv(Handle<Object> obj, SvMap& seen) {
X- if (enable_blessing && obj->Has(this->get_local_context(), v8::String::NewFromUtf8(isolate, "__perlPackage", v8::String::kNormalString)).FromMaybe(0)) {
X+ if (enable_blessing && obj->Has(this->get_local_context(), v8::String::NewFromUtf8(isolate, "__perlPackage", v8::NewStringType::kNormal).ToLocalChecked()).FromMaybe(0)) {
X return object2blessed(obj);
X }
X
X@@ -837,10 +848,10 @@ V8Context::object2sv(Handle<Object> obj, SvMap& seen)
X Local<Array> properties = obj->GetPropertyNames(this->get_local_context()).ToLocalChecked();
X for (int i = 0; i < properties->Length(); i++) {
X Local<Integer> propertyIndex = Integer::New( isolate, i );
X- Local<String> propertyName = Local<String>::Cast( properties->Get( propertyIndex ) );
X+ Local<String> propertyName = Local<String>::Cast( properties->Get(this->get_local_context(), propertyIndex ).ToLocalChecked() );
X String::Utf8Value propertyNameUTF8( isolate, propertyName );
X
X- Local<Value> propertyValue = obj->Get( propertyName );
X+ Local<Value> propertyValue = obj->Get(this->get_local_context(), propertyName ).ToLocalChecked();
X if (*propertyValue)
X hv_store(hv, *propertyNameUTF8, 0 - propertyNameUTF8.length(), v82sv(propertyValue, seen), 0);
X }
X@@ -899,7 +910,7 @@ my_gv_setsv(pTHX_ GV* const gv, SV* const sv){
X count = array->Length(); \
X EXTEND(SP, count - items); \
X for (int i = 0; i < count; i++) { \
X- ST(i) = sv_2mortal(self->v82sv(array->Get(Integer::New(isolate, i)))); \
X+ ST(i) = sv_2mortal(self->v82sv(array->Get(ctx, Integer::New(isolate, i)).ToLocalChecked())); \
X } \
X } \
X else { \
X@@ -939,7 +950,7 @@ XS(v8method) {
X SV*
X V8Context::function2sv(Handle<Function> fn) {
X CV *code = newXS(NULL, v8closure, __FILE__);
X- V8ObjectData *data = new V8FunctionData(this, fn->ToObject(isolate), (SV*)code);
X+ V8ObjectData *data = new V8FunctionData(this, fn, (SV*)code);
X return newRV_noinc((SV*)code);
X }
X
X@@ -947,7 +958,13 @@ SV*
X V8Context::object2blessed(Handle<Object> obj) {
X char package[128];
X
X- String::Utf8Value stringified( isolate, obj->Get( String::NewFromUtf8(isolate, "__perlPackage") )->ToString(isolate));
X+ String::Utf8Value stringified(
X+ isolate,
X+ obj->Get(
X+ this->get_local_context(),
X+ String::NewFromUtf8(isolate, "__perlPackage").ToLocalChecked()
X+ ).ToLocalChecked()
X+ );
X
X snprintf(
X package,
X@@ -961,14 +978,14 @@ V8Context::object2blessed(Handle<Object> obj) {
X HV *stash = gv_stashpv(package, 0);
X
X if (!stash) {
X- Local<Object> prototype = obj->GetPrototype()->ToObject(isolate);
X+ Local<Object> prototype = obj->GetPrototype()->ToObject(this->get_local_context()).ToLocalChecked();
X
X stash = gv_stashpv(package, GV_ADD);
X
X Local<Array> properties = prototype->GetPropertyNames(this->get_local_context()).ToLocalChecked();
X for (int i = 0; i < properties->Length(); i++) {
X- Local<String> name = properties->Get(i)->ToString(isolate);
X- Local<Value> property = prototype->Get(name);
X+ Local<String> name = properties->Get(this->get_local_context(), i).ToLocalChecked()->ToString(this->get_local_context()).ToLocalChecked();
X+ Local<Value> property = prototype->Get(this->get_local_context(), name).ToLocalChecked();
X
X if (!property->IsFunction())
X continue;
45010345c41f6fdf65e66720125c9ae8
echo x - distinfo
sed 's/^X//' >distinfo << '57677d168a5ec21bdf22c9501f075a8f'
XTIMESTAMP = 1715084932
XSHA256 (JavaScript-V8-0.11.tar.gz) = a49a32931436b14143acda738ff21b9bd3d2d82429bc1c62ec8035a889fa4a43
XSIZE (JavaScript-V8-0.11.tar.gz) = 72003
57677d168a5ec21bdf22c9501f075a8f
echo x - pkg-descr
sed 's/^X//' >pkg-descr << '7f9555c3c1089940396b503dd37f3979'
XPerl interface to the V8 JavaScript engine
X
XWWW: https://metacpan.org/release/JavaScript-V8
7f9555c3c1089940396b503dd37f3979
echo x - pkg-plist
sed 's/^X//' >pkg-plist << '842cde48cf18b70a11b15515ca566742'
X%%SITE_ARCH%%/JavaScript/V8.pm
X%%SITE_ARCH%%/JavaScript/V8/Context.pm
X%%SITE_ARCH%%/auto/JavaScript/V8/V8.so
X%%PERL5_MAN3%%/JavaScript::V8.3.gz
X%%PERL5_MAN3%%/JavaScript::V8::Context.3.gz
842cde48cf18b70a11b15515ca566742
exit