Skip to content

Commit d0d1356

Browse files
authored
add more v8 new api (#174)
* add more v8 new api * fix convert integer * fix
1 parent 52b814e commit d0d1356

File tree

19 files changed

+518
-1
lines changed

19 files changed

+518
-1
lines changed

packages/emnapi/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ else()
3030
endif()
3131

3232
set(V8_SRC
33+
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/array.cc"
3334
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/external.cc"
3435
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/exception.cc"
36+
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/date.cc"
3537
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/function.cc"
3638
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/handle_scope.cc"
3739
"${CMAKE_CURRENT_SOURCE_DIR}/src/v8/internal.cc"

packages/emnapi/emnapi.gyp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,10 @@
142142
'target_name': 'v8',
143143
'type': 'static_library',
144144
'sources': [
145+
'array.cc',
145146
'external.cc',
146147
'exception.cc',
148+
'date.cc',
147149
'function.cc',
148150
'handle_scope.cc',
149151
'internal.cc',

packages/emnapi/src/v8/array.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "v8_impl.h"
2+
3+
namespace v8 {
4+
5+
extern "C" {
6+
V8_EXTERN internal::Address _v8_array_new(Isolate* isolate, int length);
7+
}
8+
9+
Local<Array> Array::New(Isolate* isolate, int length) {
10+
auto n = _v8_array_new(isolate, length);
11+
return v8impl::V8LocalValueFromAddress(n).As<Array>();
12+
}
13+
14+
}

packages/emnapi/src/v8/array.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**
2+
* @__deps $emnapiCtx
3+
* @__sig ppi
4+
*/
5+
export function _v8_array_new (context: Ptr, value: int): Ptr {
6+
return emnapiCtx.napiValueFromJsValue(Array(value))
7+
}

packages/emnapi/src/v8/boolean.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace v8 {
44

55
extern "C" {
66
V8_EXTERN bool _v8_boolean_value(const Boolean*);
7+
V8_EXTERN internal::Address _v8_boolean_object_new(Isolate* isolate, int value);
78
}
89

910
void Boolean::CheckCast(v8::Data*) {}
@@ -12,4 +13,9 @@ bool Boolean::Value() const {
1213
return _v8_boolean_value(this);
1314
}
1415

16+
Local<Value> BooleanObject::New(Isolate* isolate, bool value) {
17+
auto n = _v8_boolean_object_new(isolate, static_cast<int>(value));
18+
return v8impl::V8LocalValueFromAddress(n);
19+
}
20+
1521
}

packages/emnapi/src/v8/boolean.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,12 @@ export function _v8_boolean_value (value: Ptr): number {
66
const jsValue = emnapiCtx.jsValueFromNapiValue(value)
77
return jsValue ? 1 : 0
88
}
9+
10+
/**
11+
* @__deps $emnapiCtx
12+
* @__sig ppi
13+
*/
14+
export function _v8_boolean_object_new (isolate: Ptr, value: number): Ptr {
15+
// eslint-disable-next-line no-new-wrappers
16+
return emnapiCtx.napiValueFromJsValue(new Boolean(value))
17+
}

packages/emnapi/src/v8/date.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "v8_impl.h"
2+
3+
namespace v8 {
4+
5+
extern "C" {
6+
V8_EXTERN internal::Address _v8_date_new(Context* context, double value);
7+
}
8+
9+
MaybeLocal<Value> Date::New(Local<Context> context, double time) {
10+
auto n = _v8_date_new(*context, time);
11+
if (!n) return MaybeLocal<Value>();
12+
return v8impl::V8LocalValueFromAddress(n);
13+
}
14+
15+
}

packages/emnapi/src/v8/date.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**
2+
* @__deps $emnapiCtx
3+
* @__sig ppd
4+
*/
5+
export function _v8_date_new (context: Ptr, value: double): Ptr {
6+
return emnapiCtx.napiValueFromJsValue(new Date(value))
7+
}

packages/emnapi/src/v8/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
export * from './array'
12
export * from './boolean'
3+
export * from './date'
24
export * from './exception'
35
export * from './external'
46
export * from './function'

packages/emnapi/src/v8/isolate.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ extern "C" {
1010

1111
void Context::CheckCast(v8::Data*) {}
1212

13+
Isolate* Context::GetIsolate() {
14+
return v8::Isolate::GetCurrent();
15+
}
16+
1317
Isolate* Isolate::GetCurrent() {
1418
static internal::Isolate current_isolate;
1519
return reinterpret_cast<Isolate*>(&current_isolate);

0 commit comments

Comments
 (0)