diff --git a/.github/workflows/android_v8_build.yml b/.github/workflows/android_v8_build.yml index 4edc0a9b1..9776fded3 100644 --- a/.github/workflows/android_v8_build.yml +++ b/.github/workflows/android_v8_build.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: env: - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 ROOT: /home/runner/work/Javet diff --git a/.github/workflows/linux_build_artifact.yml b/.github/workflows/linux_build_artifact.yml index df9915eda..7f726d783 100644 --- a/.github/workflows/linux_build_artifact.yml +++ b/.github/workflows/linux_build_artifact.yml @@ -18,7 +18,7 @@ env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }} JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 jobs: diff --git a/.github/workflows/linux_build_node_v8_image.yml b/.github/workflows/linux_build_node_v8_image.yml index 0d2f99634..957df3631 100644 --- a/.github/workflows/linux_build_node_v8_image.yml +++ b/.github/workflows/linux_build_node_v8_image.yml @@ -22,7 +22,7 @@ env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }} JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 # if we skip a job using a job level `if` condition, then any dependent jobs also don't run. diff --git a/.github/workflows/linux_x86_64_build.yml b/.github/workflows/linux_x86_64_build.yml index d65b4ea5e..1bfd1da42 100644 --- a/.github/workflows/linux_x86_64_build.yml +++ b/.github/workflows/linux_x86_64_build.yml @@ -8,7 +8,7 @@ on: env: JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 ROOT: /home/runner/work/Javet diff --git a/.github/workflows/macos_arm64_build.yml b/.github/workflows/macos_arm64_build.yml index 724927335..934ddcc59 100644 --- a/.github/workflows/macos_arm64_build.yml +++ b/.github/workflows/macos_arm64_build.yml @@ -8,7 +8,7 @@ on: env: JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 ROOT: /Users/runner/work/Javet diff --git a/.github/workflows/macos_x86_64_build.yml b/.github/workflows/macos_x86_64_build.yml index 698b1b742..5d06a12dd 100644 --- a/.github/workflows/macos_x86_64_build.yml +++ b/.github/workflows/macos_x86_64_build.yml @@ -8,7 +8,7 @@ on: env: JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 ROOT: /Users/runner/work/Javet diff --git a/.github/workflows/windows_x86_64_build.yml b/.github/workflows/windows_x86_64_build.yml index 3c4cbee25..d521977fc 100644 --- a/.github/workflows/windows_x86_64_build.yml +++ b/.github/workflows/windows_x86_64_build.yml @@ -8,7 +8,7 @@ on: env: JAVET_NODE_VERSION: 22.12.0 - JAVET_V8_VERSION: 13.1.201.8 + JAVET_V8_VERSION: 13.2.152.16 JAVET_VERSION: 4.1.1 ROOT: D:\a\Javet @@ -93,6 +93,8 @@ jobs: run: | cd ../google/v8 sed -i '/static_assert(alignof(Type) <= alignof(decltype(/d' src/objects/tagged-field.h + sed -i 's/__attribute__((tls_model(V8_TLS_MODEL)))/ /g' src/execution/isolate.h + sed -i 's/__attribute__((tls_model(V8_TLS_MODEL)))/ /g' src/heap/local-heap.h - name: Build Javet JNI run: | diff --git a/README.rst b/README.rst index 3abb6dee5..0900086a0 100644 --- a/README.rst +++ b/README.rst @@ -50,7 +50,7 @@ arm ✔️ ❌ ❌ ❌ arm64 ✔️ ✔️ ✔️ ❌ =========== ======= ======= ======= ======= -* Node.js ``v22.12.0`` + V8 ``v13.1.201.8`` +* Node.js ``v22.12.0`` + V8 ``v13.2.152.16`` * i18n and non-i18n * Dynamic switch between Node.js and V8 mode * Polyfill V8 mode with `Javenode `_ diff --git a/cpp/jni/javet_jni_function.cpp b/cpp/jni/javet_jni_function.cpp index 478f23758..7af52d138 100644 --- a/cpp/jni/javet_jni_function.cpp +++ b/cpp/jni/javet_jni_function.cpp @@ -216,9 +216,6 @@ JNIEXPORT jobjectArray JNICALL Java_com_caoccao_javet_interop_V8Native_functionG auto v8InternalIsolate = reinterpret_cast(v8Context->GetIsolate()); #ifdef ENABLE_NODE auto v8InternalScript = V8InternalScript::cast(v8InternalShared->script()); -#else - auto v8InternalScript = v8::internal::Cast(v8InternalShared->script()); -#endif auto wrappedArguments = *v8InternalScript->wrapped_arguments(); auto length = wrappedArguments.length(); if (length > 0) { @@ -231,6 +228,21 @@ JNIEXPORT jobjectArray JNICALL Java_com_caoccao_javet_interop_V8Native_functionG } return arguments; } +#else + auto v8InternalScript = v8::internal::Cast(v8InternalShared->script()); + auto wrappedArguments = v8InternalScript->wrapped_arguments(); + auto length = wrappedArguments->length(); + if (length > 0) { + jobjectArray arguments = jniEnv->NewObjectArray(length, Javet::Converter::jclassString, nullptr); + for (int i = 0; i < length; ++i) { + auto v8InternalObjectHandle = v8::internal::handle(wrappedArguments->get(i), v8InternalIsolate); + auto v8LocalString = v8::Utils::ToLocal(v8InternalObjectHandle).As(); + jstring argument = Javet::Converter::ToJavaString(jniEnv, v8Context, v8LocalString); + jniEnv->SetObjectArrayElement(arguments, i, argument); + } + return arguments; + } +#endif } } return nullptr; @@ -383,9 +395,13 @@ JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_functionGetScr const int startPosition = v8InternalShared->StartPosition(); const int endPosition = v8InternalShared->EndPosition(); const int sourceLength = v8InternalSource->length(); +#ifdef ENABLE_NODE auto sourceCode = v8InternalSource->ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, 0, sourceLength); +#else + auto sourceCode = v8InternalSource->ToCString(0, sourceLength); +#endif return jniEnv->NewObject( Javet::Converter::jclassIV8ValueFunctionScriptSource, Javet::Converter::jmethodIDIV8ValueFunctionScriptSourceConstructor, @@ -413,9 +429,13 @@ JNIEXPORT jstring JNICALL Java_com_caoccao_javet_interop_V8Native_functionGetSou #endif const int startPosition = v8InternalShared->StartPosition(); const int endPosition = v8InternalShared->EndPosition(); +#ifdef ENABLE_NODE auto sourceCode = v8InternalSource->ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, startPosition, endPosition - startPosition); +#else + auto sourceCode = v8InternalSource->ToCString(startPosition, endPosition - startPosition); +#endif return Javet::Converter::ToJavaString(jniEnv, sourceCode.get()); } } @@ -542,10 +562,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo V8LocalString newSourceCode; if (startPosition > 0) { +#ifdef ENABLE_NODE int utf8Length = 0; auto stdStringHeader(v8InternalSource->ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, 0, startPosition, &utf8Length)); +#else + uint32_t utf8Length = 0; + auto stdStringHeader(v8InternalSource->ToCString(0, startPosition, &utf8Length)); +#endif auto v8MaybeLocalStringHeader = v8::String::NewFromUtf8( v8Context->GetIsolate(), stdStringHeader.get(), v8::NewStringType::kNormal, utf8Length); if (v8MaybeLocalStringHeader.IsEmpty()) { @@ -562,10 +587,15 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo newSourceCode = v8::String::Concat(v8Context->GetIsolate(), newSourceCode, umSourceCode); } if (endPosition < sourceLength) { +#ifdef ENABLE_NODE int utf8Length = 0; auto stdStringFooter(v8InternalSource->ToCString( V8InternalAllowNullsFlag::DISALLOW_NULLS, V8InternalRobustnessFlag::ROBUST_STRING_TRAVERSAL, endPosition, sourceLength - endPosition, &utf8Length)); +#else + uint32_t utf8Length = 0; + auto stdStringFooter(v8InternalSource->ToCString(endPosition, sourceLength - endPosition, &utf8Length)); +#endif auto v8MaybeLocalStringFooter = v8::String::NewFromUtf8( v8Context->GetIsolate(), stdStringFooter.get(), v8::NewStringType::kNormal, utf8Length); if (v8MaybeLocalStringFooter.IsEmpty()) { diff --git a/cpp/jni/javet_v8_internal.h b/cpp/jni/javet_v8_internal.h index 3f6ea1b84..d34ea904e 100644 --- a/cpp/jni/javet_v8_internal.h +++ b/cpp/jni/javet_v8_internal.h @@ -57,7 +57,9 @@ #pragma warning(default: 4819) #pragma warning(default: 4996) +#ifdef ENABLE_NODE using V8InternalAllowNullsFlag = v8::internal::AllowNullsFlag; +#endif using V8internalBlockingBehavior = v8::internal::BlockingBehavior; using V8InternalBuiltin = v8::internal::Builtin; using V8InternalDisallowCompilation = v8::internal::DisallowCompilation; @@ -71,7 +73,9 @@ using V8InternalJSObject = v8::internal::JSObject; using V8InternalModule = v8::internal::Module; using V8InternalNativeContext = v8::internal::NativeContext; using V8InternalObject = v8::internal::Object; +#ifdef ENABLE_NODE using V8InternalRobustnessFlag = v8::internal::RobustnessFlag; +#endif using V8InternalScopeInfo = v8::internal::ScopeInfo; using V8InternalScopeIterator = v8::internal::ScopeIterator; using V8InternalScopeType = v8::internal::ScopeType; diff --git a/docker/android/base.Dockerfile b/docker/android/base.Dockerfile index 248686db8..a411ad8f1 100644 --- a/docker/android/base.Dockerfile +++ b/docker/android/base.Dockerfile @@ -15,7 +15,7 @@ # Usage: docker build -t sjtucaocao/javet-android:4.1.1 -f docker/android/base.Dockerfile . -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 FROM ubuntu:20.04 WORKDIR / diff --git a/docker/linux-arm64/base_all_in_one.Dockerfile b/docker/linux-arm64/base_all_in_one.Dockerfile index a56765041..af9ad706f 100644 --- a/docker/linux-arm64/base_all_in_one.Dockerfile +++ b/docker/linux-arm64/base_all_in_one.Dockerfile @@ -16,7 +16,7 @@ # Usage: docker build -t sjtucaocao/javet-arm64:4.1.1 -f docker/linux-arm64/base_all_in_one.Dockerfile . ARG JAVET_NODE_VERSION=18.15.0 -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 FROM ubuntu:20.04 WORKDIR / diff --git a/docker/linux-arm64/base_v8.Dockerfile b/docker/linux-arm64/base_v8.Dockerfile index 5b842a6ff..0409532a1 100644 --- a/docker/linux-arm64/base_v8.Dockerfile +++ b/docker/linux-arm64/base_v8.Dockerfile @@ -14,13 +14,13 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:arm64-base-v8_13.1.201.8 \ +# -t sjtucaocao/javet:arm64-base-v8_13.2.152.16 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ -# --build-arg JAVET_V8_VERSION=13.1.201.8 \ +# --build-arg JAVET_V8_VERSION=13.2.152.16 \ # -f docker/linux-arm64/base_v8.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 FROM ${JAVET_REPO}:arm64-base-jvm diff --git a/docker/linux-x86_64/base_all_in_one.Dockerfile b/docker/linux-x86_64/base_all_in_one.Dockerfile index 58553b8f0..bacb10754 100644 --- a/docker/linux-x86_64/base_all_in_one.Dockerfile +++ b/docker/linux-x86_64/base_all_in_one.Dockerfile @@ -19,7 +19,7 @@ FROM ubuntu:20.04 WORKDIR / ARG JAVET_NODE_VERSION=22.12.0 -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 # Update Ubuntu ENV DEBIAN_FRONTEND=noninteractive diff --git a/docker/linux-x86_64/base_v8.Dockerfile b/docker/linux-x86_64/base_v8.Dockerfile index 4efdebfbe..2979c6103 100644 --- a/docker/linux-x86_64/base_v8.Dockerfile +++ b/docker/linux-x86_64/base_v8.Dockerfile @@ -14,13 +14,13 @@ # limitations under the License. # Usage: docker build \ -# -t sjtucaocao/javet:x86_64-base-v8_13.1.201.8 \ +# -t sjtucaocao/javet:x86_64-base-v8_13.2.152.16 \ # --build-arg JAVET_REPO=sjtucaocao/javet \ -# --build-arg JAVET_V8_VERSION=13.1.201.8 \ +# --build-arg JAVET_V8_VERSION=13.2.152.16 \ # -f docker/linux-x86_64/base_v8.Dockerfile . ARG JAVET_REPO=sjtucaocao/javet -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 FROM ${JAVET_REPO}:x86_64-base-jvm diff --git a/docker/linux-x86_64/build.env b/docker/linux-x86_64/build.env index ff65fc43a..91f311c67 100644 --- a/docker/linux-x86_64/build.env +++ b/docker/linux-x86_64/build.env @@ -1,4 +1,4 @@ JAVET_REPO=sjtucaocao/javet JAVET_VERSION=4.1.1 -JAVET_V8_VERSION=13.1.201.8 +JAVET_V8_VERSION=13.2.152.16 JAVET_NODE_VERSION=22.12.0 diff --git a/docker/windows-x86_64/base.Dockerfile b/docker/windows-x86_64/base.Dockerfile index 756433f1d..3f5d4c9cc 100644 --- a/docker/windows-x86_64/base.Dockerfile +++ b/docker/windows-x86_64/base.Dockerfile @@ -32,7 +32,7 @@ # Usage: docker build -t sjtucaocao/javet-windows:4.1.1 -m 4G -f docker/windows-x86_64/base.Dockerfile . ARG JAVET_NODE_VERSION=22.12.0 -ARG JAVET_V8_VERSION=13.1.201.8 +ARG JAVET_V8_VERSION=13.2.152.16 # https://hub.docker.com/_/microsoft-windows FROM mcr.microsoft.com/windows:20H2-amd64 diff --git a/docs/release_notes/release_notes_4_0.rst b/docs/release_notes/release_notes_4_0.rst index de4e6ee9d..4079e218a 100644 --- a/docs/release_notes/release_notes_4_0.rst +++ b/docs/release_notes/release_notes_4_0.rst @@ -6,6 +6,7 @@ Release Notes 4.0.x - 4.1.x ----- * Upgraded Node.js to ``v22.12.0`` `(2024-12-03) `_ +* Upgraded V8 to ``v13.2.152.16`` (2024-12-05) * Upgraded Visual Studio 2022 to `v17.12.3 `_ * Added ``getAbsoluteResourceName()`` to ``IV8ModuleResolver`` * Fixed memory leaks in function callback in edge cases diff --git a/scripts/python/change_node_v8_version.py b/scripts/python/change_node_v8_version.py index 9098a8696..ffd3fb8c6 100644 --- a/scripts/python/change_node_v8_version.py +++ b/scripts/python/change_node_v8_version.py @@ -172,7 +172,7 @@ def update(self) -> None: def main(): change_node_version = ChangeNodeVersion('22.12.0') change_node_version.update() - change_v8_version = ChangeV8Version('13.1.201.8') + change_v8_version = ChangeV8Version('13.2.152.16') change_v8_version.update() return 0 diff --git a/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java b/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java index 206dd3989..91d588fcd 100644 --- a/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java +++ b/src/main/java/com/caoccao/javet/enums/JSRuntimeType.java @@ -60,7 +60,7 @@ public enum JSRuntimeType { V8( "v8", false, - "13.1.201.8", + "13.2.152.16", V8RuntimeOptions::new, o -> o instanceof V8RuntimeOptions), /** @@ -71,7 +71,7 @@ public enum JSRuntimeType { V8I18n( "v8", true, - "13.1.201.8", + "13.2.152.16", V8RuntimeOptions::new, o -> o instanceof V8RuntimeOptions);