Skip to content

Commit 5b0555e

Browse files
authored
Merge pull request #130 from lightpanda-io/direct_v8
Direct v8
2 parents d6b5f89 + a19babb commit 5b0555e

File tree

3 files changed

+180
-93
lines changed

3 files changed

+180
-93
lines changed

src/binding.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ const v8::Context* v8__Isolate__GetCurrentContext(v8::Isolate* isolate) {
290290
return local_to_ptr(isolate->GetCurrentContext());
291291
}
292292

293+
int v8__Isolate__ContextDisposedNotification(v8::Isolate* isolate) {
294+
return isolate->ContextDisposedNotification();
295+
}
296+
293297
size_t v8__Isolate__CreateParams__SIZEOF() {
294298
return sizeof(v8::Isolate::CreateParams);
295299
}
@@ -1575,6 +1579,51 @@ void v8__Persistent__SetWeakFinalizer(
15751579
self->SetWeak(finalizer_ctx, finalizer_cb, type);
15761580
}
15771581

1582+
// Global
1583+
1584+
void v8__Global__New(
1585+
v8::Isolate* isolate,
1586+
const v8::Data& data,
1587+
v8::Global<v8::Data>* out) {
1588+
new (out) v8::Global<v8::Data>(isolate, ptr_to_local(&data));
1589+
}
1590+
1591+
void v8__Global__Reset(v8::Global<v8::Data>* self) {
1592+
self->Reset();
1593+
}
1594+
1595+
void v8__Global__SetWeak(v8::Global<v8::Data>* self) {
1596+
self->SetWeak();
1597+
}
1598+
1599+
void v8__Global__SetWeakFinalizer(
1600+
v8::Global<v8::Data>* self,
1601+
void* finalizer_ctx,
1602+
v8::WeakCallbackInfo<void>::Callback finalizer_cb,
1603+
v8::WeakCallbackType type) {
1604+
self->SetWeak(finalizer_ctx, finalizer_cb, type);
1605+
}
1606+
const v8::Data* v8__Global__Get(
1607+
const v8::Global<v8::Data>* self,
1608+
v8::Isolate* isolate) {
1609+
return local_to_ptr(self->Get(isolate));
1610+
}
1611+
1612+
// Eternal
1613+
1614+
void v8__Eternal__New(
1615+
v8::Isolate* isolate,
1616+
const v8::Data& data,
1617+
v8::Eternal<v8::Data>* out) {
1618+
new (out) v8::Eternal<v8::Data>(isolate, ptr_to_local(&data));
1619+
}
1620+
1621+
const v8::Data* v8__Eternal__Get(
1622+
const v8::Eternal<v8::Data>* self,
1623+
v8::Isolate* isolate) {
1624+
return local_to_ptr(self->Get(isolate));
1625+
}
1626+
15781627
// WeakCallbackInfo
15791628

15801629
v8::Isolate* v8__WeakCallbackInfo__GetIsolate(
@@ -2327,4 +2376,8 @@ bool v8__StartupData__IsValid(v8::StartupData self) {
23272376
return self.IsValid();
23282377
}
23292378

2379+
void v8__StartupData__DELETE(const char* data) {
2380+
delete[] data;
2381+
}
2382+
23302383
} // extern "C"

src/binding.h

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ typedef struct Isolate Isolate;
1010
typedef struct StackTrace StackTrace;
1111
typedef struct StackFrame StackFrame;
1212
typedef struct FixedArray FixedArray;
13-
typedef struct Module Module;
13+
typedef struct Data Module;
1414
typedef struct FunctionTemplate FunctionTemplate;
1515
typedef struct Message Message;
16-
typedef struct Context Context;
16+
typedef struct Data Context;
1717
// Internally, all Value types have a base InternalAddress struct.
1818
typedef uintptr_t InternalAddress;
1919
// Super type.
@@ -217,6 +217,7 @@ Context* v8__Isolate__GetCurrentContext(Isolate* isolate);
217217
const Value* v8__Isolate__ThrowException(
218218
Isolate* isolate,
219219
const Value* exception);
220+
int v8__Isolate__ContextDisposedNotification(Isolate* isolate);
220221
void v8__Isolate__SetHostImportModuleDynamicallyCallback(
221222
Isolate* isolate,
222223
HostImportModuleDynamicallyCallback callback);
@@ -411,7 +412,6 @@ bool v8__StackFrame__IsWasm(const StackFrame* self);
411412
bool v8__StackFrame__IsUserJavaScript(const StackFrame* self);
412413

413414
// Context
414-
typedef struct Context Context;
415415
typedef struct ObjectTemplate ObjectTemplate;
416416
Context* v8__Context__New(Isolate* isolate, const ObjectTemplate* global_tmpl, const Value* global_obj);
417417
Context* v8__Context__FromSnapshot(Isolate*, size_t);
@@ -863,6 +863,39 @@ void v8__Persistent__SetWeakFinalizer(
863863
WeakCallback finalizer_cb,
864864
WeakCallbackType type);
865865

866+
// Global
867+
typedef struct Global {
868+
uintptr_t data_ptr;
869+
} Global;
870+
void v8__Global__New(
871+
Isolate* isolate,
872+
const Data* data,
873+
Global* out);
874+
void v8__Global__Reset(
875+
Global* self);
876+
void v8__Global__SetWeak(
877+
Global* self);
878+
void v8__Global__SetWeakFinalizer(
879+
Global* self,
880+
void* finalizer_ctx,
881+
WeakCallback finalizer_cb,
882+
WeakCallbackType type);
883+
const Data* v8__Global__Get(
884+
const Global* self,
885+
Isolate* isolate);
886+
887+
// Eternal
888+
typedef struct Eternal {
889+
uintptr_t data_ptr;
890+
} Eternal;
891+
void v8__Eternal__New(
892+
Isolate* isolate,
893+
const Data* data,
894+
Eternal* out);
895+
const Data* v8__Eternal__Get(
896+
const Eternal* self,
897+
Isolate* isolate);
898+
866899
// WeakCallbackInfo
867900
Isolate* v8__WeakCallbackInfo__GetIsolate(const WeakCallbackInfo* self);
868901
void* v8__WeakCallbackInfo__GetParameter(const WeakCallbackInfo* self);
@@ -1287,3 +1320,4 @@ size_t v8__SnapshotCreator__AddData2(SnapshotCreator*, const Context* ctx, const
12871320
StartupData v8__SnapshotCreator__createBlob(SnapshotCreator*, FunctionCodeHandling);
12881321
void v8__SnapshotCreator__DESTRUCT(SnapshotCreator*);
12891322
bool v8__StartupData__IsValid(StartupData);
1323+
void v8__StartupData__DELETE(const char* data);

src/v8.zig

Lines changed: 90 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -2902,67 +2902,67 @@ pub const InspectorClient = struct {
29022902
}
29032903
};
29042904

2905-
pub export fn v8_inspector__Client__IMPL__generateUniqueId(
2906-
_: *c.InspectorClientImpl,
2907-
data: *anyopaque,
2908-
) callconv(.c) i64 {
2909-
const inspector = Inspector.fromData(data);
2910-
return inspector.rnd.random().int(i64);
2911-
}
2912-
2913-
pub export fn v8_inspector__Client__IMPL__runMessageLoopOnPause(
2914-
_: *c.InspectorClientImpl,
2915-
data: *anyopaque,
2916-
contextGroupId: c_int,
2917-
) callconv(.c) void {
2918-
const inspector = Inspector.fromData(data);
2919-
inspector.channel.onRunMessageLoopOnPause(inspector.channel.ctx, @intCast(contextGroupId));
2920-
}
2921-
2922-
pub export fn v8_inspector__Client__IMPL__quitMessageLoopOnPause(
2923-
_: *c.InspectorClientImpl,
2924-
data: *anyopaque,
2925-
) callconv(.c) void {
2926-
const inspector = Inspector.fromData(data);
2927-
inspector.channel.onQuitMessageLoopOnPause(inspector.channel.ctx);
2928-
}
2929-
2930-
pub export fn v8_inspector__Client__IMPL__runIfWaitingForDebugger(
2931-
_: *c.InspectorClientImpl,
2932-
data: *anyopaque,
2933-
contextGroupId: c_int,
2934-
) callconv(.c) void {
2935-
_ = contextGroupId;
2936-
const inspector = Inspector.fromData(data);
2937-
_ = inspector;
2938-
// TODO
2939-
}
2940-
2941-
// TODO: move params to C types
2942-
pub export fn v8_inspector__Client__IMPL__consoleAPIMessage(
2943-
_: *c.InspectorClientImpl,
2944-
data: *anyopaque,
2945-
contextGroupId: c_int,
2946-
_: c.MessageErrorLevel,
2947-
_: *c.StringView,
2948-
_: *c.StringView,
2949-
_: c_uint,
2950-
_: c_uint,
2951-
_: *c.StackTrace,
2952-
) callconv(.c) void {
2953-
_ = contextGroupId;
2954-
const inspector = Inspector.fromData(data);
2955-
_ = inspector;
2956-
// TODO
2957-
}
2958-
2959-
pub export fn v8_inspector__Client__IMPL__ensureDefaultContextInGroup(
2960-
_: *c.InspectorClientImpl,
2961-
data: *anyopaque,
2962-
) callconv(.c) ?*const C_Context {
2963-
const inspector = Inspector.fromData(data);
2964-
return inspector.ctx_handle;
2965-
}
2905+
// pub export fn v8_inspector__Client__IMPL__generateUniqueId(
2906+
// _: *c.InspectorClientImpl,
2907+
// data: *anyopaque,
2908+
// ) callconv(.c) i64 {
2909+
// const inspector = Inspector.fromData(data);
2910+
// return inspector.rnd.random().int(i64);
2911+
// }
2912+
2913+
// pub export fn v8_inspector__Client__IMPL__runMessageLoopOnPause(
2914+
// _: *c.InspectorClientImpl,
2915+
// data: *anyopaque,
2916+
// contextGroupId: c_int,
2917+
// ) callconv(.c) void {
2918+
// const inspector = Inspector.fromData(data);
2919+
// inspector.channel.onRunMessageLoopOnPause(inspector.channel.ctx, @intCast(contextGroupId));
2920+
// }
2921+
2922+
// pub export fn v8_inspector__Client__IMPL__quitMessageLoopOnPause(
2923+
// _: *c.InspectorClientImpl,
2924+
// data: *anyopaque,
2925+
// ) callconv(.c) void {
2926+
// const inspector = Inspector.fromData(data);
2927+
// inspector.channel.onQuitMessageLoopOnPause(inspector.channel.ctx);
2928+
// }
2929+
2930+
// pub export fn v8_inspector__Client__IMPL__runIfWaitingForDebugger(
2931+
// _: *c.InspectorClientImpl,
2932+
// data: *anyopaque,
2933+
// contextGroupId: c_int,
2934+
// ) callconv(.c) void {
2935+
// _ = contextGroupId;
2936+
// const inspector = Inspector.fromData(data);
2937+
// _ = inspector;
2938+
// // TODO
2939+
// }
2940+
2941+
// // TODO: move params to C types
2942+
// pub export fn v8_inspector__Client__IMPL__consoleAPIMessage(
2943+
// _: *c.InspectorClientImpl,
2944+
// data: *anyopaque,
2945+
// contextGroupId: c_int,
2946+
// _: c.MessageErrorLevel,
2947+
// _: *c.StringView,
2948+
// _: *c.StringView,
2949+
// _: c_uint,
2950+
// _: c_uint,
2951+
// _: *c.StackTrace,
2952+
// ) callconv(.c) void {
2953+
// _ = contextGroupId;
2954+
// const inspector = Inspector.fromData(data);
2955+
// _ = inspector;
2956+
// // TODO
2957+
// }
2958+
2959+
// pub export fn v8_inspector__Client__IMPL__ensureDefaultContextInGroup(
2960+
// _: *c.InspectorClientImpl,
2961+
// data: *anyopaque,
2962+
// ) callconv(.c) ?*const C_Context {
2963+
// const inspector = Inspector.fromData(data);
2964+
// return inspector.ctx_handle;
2965+
// }
29662966

29672967
comptime {
29682968
if (@import("default_exports").inspector_subtype) {
@@ -3023,35 +3023,35 @@ pub const InspectorChannel = struct {
30233023
}
30243024
};
30253025

3026-
pub export fn v8_inspector__Channel__IMPL__sendResponse(
3027-
_: *c.InspectorChannelImpl,
3028-
data: *anyopaque,
3029-
call_id: c_int,
3030-
msg: [*c]u8,
3031-
length: usize,
3032-
) callconv(.c) void {
3033-
const inspector = Inspector.fromData(data);
3034-
inspector.channel.resp(@as(u32, @intCast(call_id)), msg[0..length]);
3035-
}
3036-
3037-
pub export fn v8_inspector__Channel__IMPL__sendNotification(
3038-
_: *c.InspectorChannelImpl,
3039-
data: *anyopaque,
3040-
msg: [*c]u8,
3041-
length: usize,
3042-
) callconv(.c) void {
3043-
const inspector = Inspector.fromData(data);
3044-
inspector.channel.notif(msg[0..length]);
3045-
}
3046-
3047-
pub export fn v8_inspector__Channel__IMPL__flushProtocolNotifications(
3048-
_: *c.InspectorChannelImpl,
3049-
data: *anyopaque,
3050-
) callconv(.c) void {
3051-
const inspector = Inspector.fromData(data);
3052-
_ = inspector;
3053-
// TODO
3054-
}
3026+
// pub export fn v8_inspector__Channel__IMPL__sendResponse(
3027+
// _: *c.InspectorChannelImpl,
3028+
// data: *anyopaque,
3029+
// call_id: c_int,
3030+
// msg: [*c]u8,
3031+
// length: usize,
3032+
// ) callconv(.c) void {
3033+
// const inspector = Inspector.fromData(data);
3034+
// inspector.channel.resp(@as(u32, @intCast(call_id)), msg[0..length]);
3035+
// }
3036+
3037+
// pub export fn v8_inspector__Channel__IMPL__sendNotification(
3038+
// _: *c.InspectorChannelImpl,
3039+
// data: *anyopaque,
3040+
// msg: [*c]u8,
3041+
// length: usize,
3042+
// ) callconv(.c) void {
3043+
// const inspector = Inspector.fromData(data);
3044+
// inspector.channel.notif(msg[0..length]);
3045+
// }
3046+
3047+
// pub export fn v8_inspector__Channel__IMPL__flushProtocolNotifications(
3048+
// _: *c.InspectorChannelImpl,
3049+
// data: *anyopaque,
3050+
// ) callconv(.c) void {
3051+
// const inspector = Inspector.fromData(data);
3052+
// _ = inspector;
3053+
// // TODO
3054+
// }
30553055

30563056
// InspectorSession
30573057

0 commit comments

Comments
 (0)