Skip to content

Commit f55b6d5

Browse files
committed
add opaqueCast helper function
Adds a function that makes it a bit neater to cast opaque pointers from the API.
1 parent 3f66cf1 commit f55b6d5

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/ziglua.zig

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ pub const Lua = struct {
260260
const alignment = @alignOf(std.c.max_align_t);
261261

262262
// the data pointer is an Allocator, so the @alignCast is safe
263-
const allocator = @ptrCast(*Allocator, @alignCast(@alignOf(Allocator), data));
263+
const allocator = opaqueCast(Allocator, data.?);
264264

265265
if (@ptrCast(?[*]align(alignment) u8, @alignCast(alignment, ptr))) |prev_ptr| {
266266
const prev_slice = prev_ptr[0..osize];
@@ -1649,6 +1649,12 @@ pub const Buffer = struct {
16491649

16501650
// Helper functions to make the ziglua API easier to use
16511651

1652+
/// Casts the opaque pointer to a pointer of the given type with the proper alignment
1653+
/// Useful for casting pointers from the Lua API like userdata or other data
1654+
pub inline fn opaqueCast(comptime T: type, ptr: *anyopaque) *T {
1655+
return @ptrCast(*T, @alignCast(@alignOf(T), ptr));
1656+
}
1657+
16521658
pub const ZigFn = fn (lua: *Lua) i32;
16531659
pub const ZigHookFn = fn (lua: *Lua, ar: *DebugInfo) void;
16541660
pub const ZigContFn = fn (lua: *Lua, status: bool, ctx: KContext) c_int;
@@ -2443,7 +2449,7 @@ test "dump and load" {
24432449
const writer = struct {
24442450
fn inner(l: *Lua, buf: []const u8, data: *anyopaque) bool {
24452451
_ = l;
2446-
var arr = @ptrCast(*std.ArrayList(u8), @alignCast(@alignOf(std.ArrayList(u8)), data));
2452+
var arr = opaqueCast(std.ArrayList(u8), data);
24472453
arr.appendSlice(buf) catch return false;
24482454
return true;
24492455
}
@@ -2461,7 +2467,7 @@ test "dump and load" {
24612467
const reader = struct {
24622468
fn inner(l: *Lua, data: *anyopaque) ?[]const u8 {
24632469
_ = l;
2464-
var arr = @ptrCast(*std.ArrayList(u8), @alignCast(@alignOf(std.ArrayList(u8)), data));
2470+
var arr = opaqueCast(std.ArrayList(u8), data);
24652471
return arr.items;
24662472
}
24672473
}.inner;

0 commit comments

Comments
 (0)