Skip to content

Commit 5a8b116

Browse files
committed
Working unwrapObject
1 parent f8e103e commit 5a8b116

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

src/binding.cpp

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,9 +1607,16 @@ const char* allocStringWith0(const v8_inspector::String16& str, const void* allo
16071607
/// The strings pointer and length should therefore be returned together
16081608
/// @param str: The string contents to allocate
16091609
/// @param allocator: A Zig std.mem.Allocator
1610-
/// @param out_str: Points to the now allocated string on the heap (without sentinel \0)
1610+
/// @param out_str: Points to the now allocated string on the heap (without sentinel \0),null if view was null or allocation failed
16111611
/// @param out_len: The corresponding length of the string
1612-
void allocString(const v8_inspector::StringView& str, const void* allocator, const char*& out_str, size_t& out_len) {
1612+
/// @returns false if allocation errored
1613+
bool allocString(const v8_inspector::StringView& str, const void* allocator, const char*& out_str, size_t& out_len) {
1614+
if (str.characters8() == nullptr) {
1615+
out_str = nullptr;
1616+
out_len = 0;
1617+
return true;
1618+
}
1619+
16131620
std::string utf8_str; // Harmless if not used by 8bit string
16141621
if (str.is8Bit()) {
16151622
out_len = str.length();
@@ -1622,7 +1629,7 @@ void allocString(const v8_inspector::StringView& str, const void* allocator, con
16221629
if (heap_str == nullptr) {
16231630
out_str = nullptr;
16241631
out_len = 0;
1625-
return;
1632+
return false;
16261633
}
16271634

16281635
if (str.is8Bit()) {
@@ -1631,7 +1638,7 @@ void allocString(const v8_inspector::StringView& str, const void* allocator, con
16311638
memcpy(heap_str, utf8_str.c_str(), out_len);
16321639
}
16331640
out_str = heap_str;
1634-
return;
1641+
return true;
16351642
}
16361643

16371644

@@ -1706,15 +1713,15 @@ v8_inspector::protocol::Runtime::RemoteObject* v8_inspector__Session__wrapObject
17061713

17071714
bool v8_inspector__Session__unwrapObject(
17081715
v8_inspector::V8InspectorSession *session,
1709-
const void* allocator,
1710-
const char* out_error,
1711-
uint64_t& out_error_len,
1716+
const void *allocator,
1717+
const char *&out_error,
1718+
uint64_t &out_error_len,
17121719
const char *in_objectId,
17131720
int in_objectId_len,
1714-
v8::Local<v8::Value> out_value,
1715-
v8::Local<v8::Context> out_context,
1716-
const char* out_objectGroup,
1717-
uint64_t& out_objectGroup_len
1721+
v8::Local<v8::Value> &out_value,
1722+
v8::Local<v8::Context> &out_context,
1723+
const char *&out_objectGroup,
1724+
uint64_t &out_objectGroup_len
17181725
) {
17191726
auto objectId = toStringView(in_objectId, in_objectId_len);
17201727
auto error = v8_inspector::StringBuffer::create({});
@@ -1730,8 +1737,7 @@ bool v8_inspector__Session__unwrapObject(
17301737
allocString(error->string(), allocator, out_error, out_error_len);
17311738
return false;
17321739
}
1733-
allocString(objectGroup->string(), allocator, out_objectGroup, out_objectGroup_len);
1734-
return result;
1740+
return allocString(objectGroup->string(), allocator, out_objectGroup, out_objectGroup_len);
17351741
}
17361742

17371743
// RemoteObject

src/binding.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,13 +1035,13 @@ RemoteObject* v8_inspector__Session__wrapObject(
10351035
bool v8_inspector__Session__unwrapObject(
10361036
InspectorSession *session,
10371037
const void* allocator,
1038-
const char* out_error,
1038+
const char** out_error,
10391039
uint64_t* out_error_len,
10401040
const char *in_objectId,
1041-
int in_objectId_len,
1042-
Value out_value,
1043-
Context out_context,
1044-
const char* out_objectGroup,
1041+
uint64_t in_objectId_len,
1042+
Value** out_value,
1043+
Context** out_context,
1044+
const char** out_objectGroup,
10451045
uint64_t* out_objectGroup_len
10461046
);
10471047

src/v8.zig

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2722,13 +2722,13 @@ pub const InspectorSession = struct {
27222722

27232723
pub fn unwrapObject(self: InspectorSession, allocator: std.mem.Allocator, objectId: []const u8) !UnwrapResult {
27242724
var out_error: [*c]const u8 = null;
2725-
var out_error_len: i64 = 0;
2725+
var out_error_len: u64 = 0;
27262726

27272727
var out_value_handle: ?*c.Value = null;
27282728
var out_context_handle: ?*c.Context = null;
27292729

27302730
var out_objectGroup: [*c]const u8 = null;
2731-
var out_objectGroup_len: i64 = 0;
2731+
var out_objectGroup_len: u64 = 0;
27322732

27332733
const result = c.v8_inspector__Session__unwrapObject(
27342734
self.handle,
@@ -2739,17 +2739,18 @@ pub const InspectorSession = struct {
27392739
objectId.len,
27402740
&out_value_handle,
27412741
&out_context_handle,
2742-
&out_objectGroup.ptr,
2742+
&out_objectGroup,
27432743
&out_objectGroup_len,
27442744
);
27452745
if (!result) {
2746-
return .{ .err = out_error.?[0..out_error_len] };
2746+
return .{ .err = if (out_error != null) out_error[0..out_error_len] else null };
27472747
}
2748+
27482749
return .{
27492750
.ok = .{
27502751
.value = Value{ .handle = out_value_handle.? },
27512752
.context = Context{ .handle = out_context_handle.? },
2752-
.objectGroup = out_objectGroup.?[0..out_objectGroup_len], // TODO can this be null?
2753+
.objectGroup = if (out_objectGroup != null) out_objectGroup[0..out_objectGroup_len] else null,
27532754
},
27542755
};
27552756
}
@@ -2758,12 +2759,12 @@ pub const InspectorSession = struct {
27582759
pub const UnwrappedObject = struct {
27592760
value: Value,
27602761
context: Context,
2761-
objectGroup: []const u8,
2762+
objectGroup: ?[]const u8,
27622763
};
27632764
pub const UnwrapResultEnum = enum { ok, err };
27642765
pub const UnwrapResult = union(UnwrapResultEnum) {
27652766
ok: UnwrappedObject,
2766-
err: []const u8,
2767+
err: ?[]const u8,
27672768
};
27682769

27692770
/// Note: Some getters return owned memory (strings), while others return memory owned by V8 (objects).

0 commit comments

Comments
 (0)