Skip to content

Commit 6ddb22f

Browse files
authored
⛲ Javet v3.1.3 (#352)
* Upgraded Node.js to `v20.14.0` [(2024-05-28)](https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#20.14.0) * Upgraded V8 to `v12.6.228.13` (2024-06-06) * Upgraded Visual Studio 2022 to [v17.10.1](https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.10) * Rewrote `toString()` for `V8ValueBigInteger`, `V8ValueInteger`, `V8ValueLong` and `V8ValueDouble` * Added `getPrototypeOf()` to support `instanceof` for proxy converter * Added `getPrototypeOf()`, `setPrototypeOf()`, `create()`, `seal()` to `V8ValueBuiltInObject` * Added `JavetProxyPrototypeStore` * Added `getPrototypeOf()` to `IJavetDirectProxyHandler` and `JavetDirectProxyObjectHandler` * Added `getGuard()` to `V8Runtime` * Added `isSealed()`, `isFrozen()` to `V8ValueObject` * Added `sealedEnabled` to `JavetConverterConfig` * Updated `JavetObjectConverter` to convert sealed array to `Object[]` instead of `List<Object>` * Replaced `JavetEngineGuard` with `V8Guard` * Removed `executorService`, `engineGuardCheckIntervalMillis` from `JavetEngineConfig` * Patched V8 [Check failed: !IsFreeSpaceOrFillerMap(map)](https://groups.google.com/g/v8-dev/c/TCGnZKjYFEI/m/uDOciJsHAQAJ)
1 parent ac31ce0 commit 6ddb22f

File tree

562 files changed

+5649
-3796
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

562 files changed

+5649
-3796
lines changed

.github/workflows/android_node_build.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ on:
88
workflow_dispatch:
99

1010
env:
11-
JAVET_NODE_VERSION: 20.13.1
12-
JAVET_VERSION: 3.1.2
11+
JAVET_NODE_VERSION: 20.14.0
12+
JAVET_VERSION: 3.1.3
1313
ROOT: /home/runner/work/Javet
1414

1515
jobs:

.github/workflows/android_v8_build.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ on:
88
workflow_dispatch:
99

1010
env:
11-
JAVET_V8_VERSION: 12.5.227.6
12-
JAVET_VERSION: 3.1.2
11+
JAVET_V8_VERSION: 12.6.228.13
12+
JAVET_VERSION: 3.1.3
1313
ROOT: /home/runner/work/Javet
1414

1515
jobs:
@@ -80,6 +80,7 @@ jobs:
8080
gclient sync -D
8181
cd v8
8282
python3 tools/dev/v8gen.py ${{ matrix.v8_release }}.release -- 'target_os="android"' 'target_cpu="${{ matrix.v8_arch }}"' 'v8_target_cpu="${{ matrix.v8_arch }}"' v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false
83+
sed -i '/CHECK(!IsFreeSpaceOrFillerMap(map));/d' src/heap/concurrent-marking.cc
8384
ninja -C out.gn/${{ matrix.v8_release }}.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./
8485
ninja -C out.gn/${{ matrix.v8_release }}.release v8_monolith
8586

.github/workflows/linux_build_artifact.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ on:
1717
env:
1818
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
1919
DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }}
20-
JAVET_NODE_VERSION: 20.13.1
21-
JAVET_V8_VERSION: 12.5.227.6
22-
JAVET_VERSION: 3.1.2
20+
JAVET_NODE_VERSION: 20.14.0
21+
JAVET_V8_VERSION: 12.6.228.13
22+
JAVET_VERSION: 3.1.3
2323

2424
jobs:
2525
javet_linux_x86_64:

.github/workflows/linux_build_node_v8_image.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ on:
2121
env:
2222
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
2323
DOCKERHUB_REPO_JAVET: ${{ secrets.DOCKERHUB_REPO_JAVET }}
24-
JAVET_NODE_VERSION: 20.13.1
25-
JAVET_V8_VERSION: 12.5.227.6
26-
JAVET_VERSION: 3.1.2
24+
JAVET_NODE_VERSION: 20.14.0
25+
JAVET_V8_VERSION: 12.6.228.13
26+
JAVET_VERSION: 3.1.3
2727

2828
# if we skip a job using a job level `if` condition, then any dependent jobs also don't run.
2929
# we can skip a step of the job, using a step level `if` condition.

.github/workflows/linux_x86_64_build.yml

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ on:
77
workflow_dispatch:
88

99
env:
10-
JAVET_NODE_VERSION: 20.13.1
11-
JAVET_V8_VERSION: 12.5.227.6
12-
JAVET_VERSION: 3.1.2
10+
JAVET_NODE_VERSION: 20.14.0
11+
JAVET_V8_VERSION: 12.6.228.13
12+
JAVET_VERSION: 3.1.3
1313
ROOT: /home/runner/work/Javet
1414

1515
jobs:
@@ -52,6 +52,7 @@ jobs:
5252
gclient sync -D
5353
cd v8
5454
python3 tools/dev/v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false
55+
sed -i '/CHECK(!IsFreeSpaceOrFillerMap(map));/d' src/heap/concurrent-marking.cc
5556
sed -i '/#include "src\/libplatform\//a #include <cstdlib>' src/libplatform/default-thread-isolated-allocator.cc
5657
sed -i '/bool KernelHasPkruFix()/a const char* env = std::getenv("JAVET_DISABLE_PKU"); if (env && std::strlen(env) > 0) { return false; }' src/libplatform/default-thread-isolated-allocator.cc
5758
ninja -C out.gn/x64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./

.github/workflows/macos_arm64_build.yml

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ on:
77
workflow_dispatch:
88

99
env:
10-
JAVET_NODE_VERSION: 20.13.1
11-
JAVET_V8_VERSION: 12.5.227.6
12-
JAVET_VERSION: 3.1.2
10+
JAVET_NODE_VERSION: 20.14.0
11+
JAVET_V8_VERSION: 12.6.228.13
12+
JAVET_VERSION: 3.1.3
1313
ROOT: /Users/runner/work/Javet
1414

1515
jobs:
@@ -52,6 +52,7 @@ jobs:
5252
gclient sync -D
5353
cd v8
5454
python3 tools/dev/v8gen.py arm64.release -- v8_monolithic=true 'target_cpu="arm64"' v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false
55+
sed -i '' -e '/CHECK(!IsFreeSpaceOrFillerMap(map));/d' src/heap/concurrent-marking.cc
5556
gn gen out.gn/arm64.release
5657
ninja -C out.gn/arm64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./
5758
ninja -C out.gn/arm64.release v8_monolith

.github/workflows/macos_x86_64_build.yml

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ on:
77
workflow_dispatch:
88

99
env:
10-
JAVET_NODE_VERSION: 20.13.1
11-
JAVET_V8_VERSION: 12.5.227.6
12-
JAVET_VERSION: 3.1.2
10+
JAVET_NODE_VERSION: 20.14.0
11+
JAVET_V8_VERSION: 12.6.228.13
12+
JAVET_VERSION: 3.1.3
1313
ROOT: /Users/runner/work/Javet
1414

1515
jobs:
@@ -52,6 +52,7 @@ jobs:
5252
gclient sync -D
5353
cd v8
5454
python3 tools/dev/v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false is_component_build=false v8_enable_i18n_support=false v8_enable_pointer_compression=false v8_static_library=true symbol_level=0 use_custom_libcxx=false v8_enable_sandbox=false
55+
sed -i '' -e '/CHECK(!IsFreeSpaceOrFillerMap(map));/d' src/heap/concurrent-marking.cc
5556
gn gen out.gn/x64.release
5657
ninja -C out.gn/x64.release v8_monolith || python3 ${{ env.ROOT }}/Javet/scripts/python/patch_v8_build.py -p ./
5758
ninja -C out.gn/x64.release v8_monolith

README.rst

+14-14
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ arm ✔️ ❌ ❌ ❌
4747
arm64 ✔️ ✔️ ✔️ ❌
4848
=========== ======= ======= ======= =======
4949

50-
* Node.js ``v20.13.1`` + V8 ``v12.5.227.6``
50+
* Node.js ``v20.14.0`` + V8 ``v12.6.228.13``
5151
* Dynamic switch between Node.js and V8 mode (`Which mode do you prefer? <https://github.com/caoccao/Javet/discussions/92>`_)
5252
* Polyfill V8 mode with `Javenode <https://github.com/caoccao/Javenode>`_
5353
* V8 API exposure in JVM
@@ -75,44 +75,44 @@ Maven
7575
<dependency>
7676
<groupId>com.caoccao.javet</groupId>
7777
<artifactId>javet</artifactId>
78-
<version>3.1.2</version>
78+
<version>3.1.3</version>
7979
</dependency>
8080
8181
<!-- Linux (arm64) -->
8282
<dependency>
8383
<groupId>com.caoccao.javet</groupId>
8484
<artifactId>javet-linux-arm64</artifactId>
85-
<version>3.1.2</version>
85+
<version>3.1.3</version>
8686
</dependency>
8787
8888
<!-- Mac OS (x86_64 and arm64) -->
8989
<dependency>
9090
<groupId>com.caoccao.javet</groupId>
9191
<artifactId>javet-macos</artifactId>
92-
<version>3.1.2</version>
92+
<version>3.1.3</version>
9393
</dependency>
9494
9595
Gradle Kotlin DSL
9696
^^^^^^^^^^^^^^^^^
9797

9898
.. code-block:: kotlin
9999
100-
implementation("com.caoccao.javet:javet:3.1.2") // Linux and Windows (x86_64)
101-
implementation("com.caoccao.javet:javet-linux-arm64:3.1.2") // Linux (arm64)
102-
implementation("com.caoccao.javet:javet-macos:3.1.2") // Mac OS (x86_64 and arm64)
103-
implementation("com.caoccao.javet:javet-android-node:3.1.2") // Android Node (arm, arm64, x86 and x86_64)
104-
implementation("com.caoccao.javet:javet-android-v8:3.1.2") // Android V8 (arm, arm64, x86 and x86_64)
100+
implementation("com.caoccao.javet:javet:3.1.3") // Linux and Windows (x86_64)
101+
implementation("com.caoccao.javet:javet-linux-arm64:3.1.3") // Linux (arm64)
102+
implementation("com.caoccao.javet:javet-macos:3.1.3") // Mac OS (x86_64 and arm64)
103+
implementation("com.caoccao.javet:javet-android-node:3.1.3") // Android Node (arm, arm64, x86 and x86_64)
104+
implementation("com.caoccao.javet:javet-android-v8:3.1.3") // Android V8 (arm, arm64, x86 and x86_64)
105105
106106
Gradle Groovy DSL
107107
^^^^^^^^^^^^^^^^^
108108

109109
.. code-block:: groovy
110110
111-
implementation 'com.caoccao.javet:javet:3.1.2' // Linux and Windows (x86_64)
112-
implementation 'com.caoccao.javet:javet-linux-arm64:3.1.2' // Linux (arm64)
113-
implementation 'com.caoccao.javet:javet-macos:3.1.2' // Mac OS (x86_64 and arm64)
114-
implementation 'com.caoccao.javet:javet-android-node:3.1.2' // Android Node (arm, arm64, x86 and x86_64)
115-
implementation 'com.caoccao.javet:javet-android-v8:3.1.2' // Android V8 (arm, arm64, x86 and x86_64)
111+
implementation 'com.caoccao.javet:javet:3.1.3' // Linux and Windows (x86_64)
112+
implementation 'com.caoccao.javet:javet-linux-arm64:3.1.3' // Linux (arm64)
113+
implementation 'com.caoccao.javet:javet-macos:3.1.3' // Mac OS (x86_64 and arm64)
114+
implementation 'com.caoccao.javet:javet-android-node:3.1.3' // Android Node (arm, arm64, x86 and x86_64)
115+
implementation 'com.caoccao.javet:javet-android-v8:3.1.3' // Android V8 (arm, arm64, x86 and x86_64)
116116
117117
Hello Javet
118118
-----------

android/javet-android/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ object Config {
7373
const val ANDROIDX_TEST = "1.1.5"
7474
const val APPCOMPAT = "1.3.1"
7575
const val DESUGAR_JDK_LIBS = "2.0.4"
76-
const val JAVET = "3.1.2"
76+
const val JAVET = "3.1.3"
7777
const val JUNIT = "5.10.1"
7878
}
7979
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
android:versionCode="1"
4-
android:versionName="3.1.2"
4+
android:versionName="3.1.3"
55
>
66

77
</manifest>

android/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>com.caoccao.javet</groupId>
55
<artifactId>javet-android</artifactId>
6-
<version>3.1.2</version>
6+
<version>3.1.3</version>
77
<name>javet</name>
88
<packaging>aar</packaging>
99
<description>Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding V8 in Java.</description>
@@ -29,7 +29,7 @@
2929
<connection>scm:git:git://github.com/caoccao/Javet.git</connection>
3030
<developerConnection>scm:git:git@github.com:caoccao/caoccao.git</developerConnection>
3131
<url>https://github.com/caoccao/Javet</url>
32-
<tag>3.1.2</tag>
32+
<tag>3.1.3</tag>
3333
</scm>
3434

3535
<properties>

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ object Config {
7272
const val BYTE_BUDDY = "1.14.10"
7373
const val JACKSON_DATABIND = "2.16.0"
7474
const val JAVA_VERSION = "1.8"
75-
const val JAVET = "3.1.2"
75+
const val JAVET = "3.1.3"
7676
const val JETTY_WEBSOCKET = "9.4.53.v20231009"
7777
const val JUNIT = "5.10.1"
7878
}

cpp/build-android.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Usage for V8: sh build-android.sh -DV8_DIR=${HOME}/v8 -DCMAKE_ANDROID_NDK=${HOME}/android -DCMAKE_ANDROID_ARCH=arm64
44
# Usage for Node: sh build-android.sh -DNODE_DIR=${HOME}/node -DCMAKE_ANDROID_NDK=${HOME}/android -DCMAKE_ANDROID_ARCH=arm64
5-
JAVET_VERSION=3.1.2
5+
JAVET_VERSION=3.1.3
66
rm -rf build_android
77
mkdir build_android
88
cd build_android

cpp/build-linux-arm64.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Usage for V8: sh build-linux-arm64.sh -DV8_DIR=${HOME}/v8
44
# Usage for Node: sh build-linux-arm64.sh -DNODE_DIR=${HOME}/node
5-
JAVET_VERSION=3.1.2
5+
JAVET_VERSION=3.1.3
66
rm -rf build_linux_arm64
77
mkdir build_linux_arm64
88
cd build_linux_arm64

cpp/build-linux-x86_64.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Usage for V8: sh build-linux-x86_64.sh -DV8_DIR=${HOME}/v8
44
# Usage for Node: sh build-linux-x86_64.sh -DNODE_DIR=${HOME}/node
5-
JAVET_VERSION=3.1.2
5+
JAVET_VERSION=3.1.3
66
rm -rf build_linux_x86_64
77
mkdir build_linux_x86_64
88
cd build_linux_x86_64

cpp/build-macos.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Usage for V8: sh build-macos.sh -DV8_DIR=${HOME}/v8
44
# Usage for Node: sh build-macos.sh -DNODE_DIR=${HOME}/node
5-
JAVET_VERSION=3.1.2
5+
JAVET_VERSION=3.1.3
66
rm -rf build_macos
77
mkdir build_macos
88
cd build_macos

cpp/build-windows.cmd

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@echo off
22
REM Usage for V8: build -DV8_DIR=C:\v8
33
REM Usage for Node: build -DNODE_DIR=C:\node
4-
SET JAVET_VERSION=3.1.2
4+
SET JAVET_VERSION=3.1.3
55
rd /s/q build_windows
66
mkdir build_windows
77
cd build_windows

cpp/jni/com_caoccao_javet_interop_V8Native.h

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cpp/jni/javet_converter.h

+9
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,15 @@ namespace Javet {
345345
#endif
346346
}
347347

348+
static inline V8InternalJSObject ToV8InternalJSObject(
349+
const V8LocalValue& v8LocalValue) noexcept {
350+
#ifdef ENABLE_NODE
351+
return V8InternalJSObject::cast(*v8::Utils::OpenHandle(*v8LocalValue));
352+
#else
353+
return *V8InternalJSObject::cast(*v8::Utils::OpenHandle(*v8LocalValue));
354+
#endif
355+
}
356+
348357
static inline V8InternalModule ToV8InternalModule(
349358
const V8LocalModule& v8LocalModule) noexcept {
350359
#ifdef ENABLE_NODE

cpp/jni/javet_jni_object.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,36 @@ JNIEXPORT jobject JNICALL Java_com_caoccao_javet_interop_V8Native_objectInvoke
638638
return Javet::Converter::ToExternalV8ValueUndefined(jniEnv, v8Runtime);
639639
}
640640

641+
JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_objectIsFrozen
642+
(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle) {
643+
RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle);
644+
if (v8LocalValue->IsObject()) {
645+
auto v8InternalJSObject = Javet::Converter::ToV8InternalJSObject(v8LocalValue);
646+
#ifdef ENABLE_NODE
647+
auto elementKind = V8InternalJSObject::cast(v8InternalJSObject).GetElementsKind();
648+
#else
649+
auto elementKind = V8InternalJSObject::cast(v8InternalJSObject)->GetElementsKind();
650+
#endif
651+
return v8::internal::IsFrozenElementsKind(elementKind);
652+
}
653+
return false;
654+
}
655+
656+
JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_objectIsSealed
657+
(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle) {
658+
RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle);
659+
if (v8LocalValue->IsObject()) {
660+
auto v8InternalJSObject = Javet::Converter::ToV8InternalJSObject(v8LocalValue);
661+
#ifdef ENABLE_NODE
662+
auto elementKind = V8InternalJSObject::cast(v8InternalJSObject).GetElementsKind();
663+
#else
664+
auto elementKind = V8InternalJSObject::cast(v8InternalJSObject)->GetElementsKind();
665+
#endif
666+
return v8::internal::IsSealedElementsKind(elementKind);
667+
}
668+
return false;
669+
}
670+
641671
JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_objectSet
642672
(JNIEnv* jniEnv, jobject caller, jlong v8RuntimeHandle, jlong v8ValueHandle, jint v8ValueType, jobjectArray keysAndValues) {
643673
RUNTIME_AND_VALUE_HANDLES_TO_OBJECTS_WITH_SCOPE(v8RuntimeHandle, v8ValueHandle);

cpp/jni/javet_resource_node.rc

+6-6
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
6161
//
6262

6363
VS_VERSION_INFO VERSIONINFO
64-
FILEVERSION 3,1,2,0
65-
PRODUCTVERSION 3,1,2,0
64+
FILEVERSION 3,1,3,0
65+
PRODUCTVERSION 3,1,3,0
6666
FILEFLAGSMASK 0x3fL
6767
#ifdef _DEBUG
6868
FILEFLAGS 0x1L
@@ -79,12 +79,12 @@ BEGIN
7979
BEGIN
8080
VALUE "CompanyName", "caoccao.com"
8181
VALUE "FileDescription", "caoccao.com"
82-
VALUE "FileVersion", "3.1.2.0"
83-
VALUE "InternalName", "libjavet-node-windows-x86_64.v.3.1.2.dll"
82+
VALUE "FileVersion", "3.1.3.0"
83+
VALUE "InternalName", "libjavet-node-windows-x86_64.v.3.1.3.dll"
8484
VALUE "LegalCopyright", "Copyright (c) 2021-2024."
85-
VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.3.1.2.dll"
85+
VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.3.1.3.dll"
8686
VALUE "ProductName", "Javet Windows"
87-
VALUE "ProductVersion", "3.1.2.0"
87+
VALUE "ProductVersion", "3.1.3.0"
8888
END
8989
END
9090
BLOCK "VarFileInfo"

0 commit comments

Comments
 (0)