Skip to content

Commit d68fe15

Browse files
committed
Try another pointer alignment workaround
Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
1 parent ab3997e commit d68fe15

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

src/Lua.zig

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
295295

296296
// Store instance pointer in userdata if it's a pointer
297297
if (is_instance) {
298-
// Ensure the pointer is properly aligned before storing
299-
cb.userdata = @ptrCast(@alignCast(callbacks));
298+
cb.userdata = @ptrCast(@constCast(callbacks));
300299
} else {
301300
cb.userdata = null;
302301
}
@@ -308,7 +307,9 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
308307

309308
if (comptime is_instance) {
310309
const callbacks_struct = state.callbacks();
311-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
310+
// C pointers may not have the alignment Zig expects (Zig 0.15)
311+
// See: https://github.com/ziglang/zig/issues/24326
312+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
312313
instance.interrupt(&state, @intCast(gc_flag));
313314
} else {
314315
CallbackType.interrupt(&state, @intCast(gc_flag));
@@ -324,7 +325,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
324325

325326
if (comptime is_instance) {
326327
const callbacks_struct = state.callbacks();
327-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
328+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
328329
instance.panic(&state, @intCast(errcode));
329330
} else {
330331
CallbackType.panic(&state, @intCast(errcode));
@@ -341,7 +342,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
341342

342343
if (comptime is_instance) {
343344
const callbacks_struct = thread_state.callbacks();
344-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
345+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
345346
instance.userthread(if (parent_state) |*ps| ps else null, &thread_state);
346347
} else {
347348
CallbackType.userthread(if (parent_state) |*ps| ps else null, &thread_state);
@@ -375,7 +376,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
375376

376377
if (comptime is_instance) {
377378
const callbacks_struct = lua.state.callbacks();
378-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
379+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
379380
instance.debugbreak(&debug_instance, debug_info);
380381
} else {
381382
CallbackType.debugbreak(&debug_instance, debug_info);
@@ -393,7 +394,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
393394

394395
if (comptime is_instance) {
395396
const callbacks_struct = lua.state.callbacks();
396-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
397+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
397398
instance.debugstep(&debug_instance, debug_info);
398399
} else {
399400
CallbackType.debugstep(&debug_instance, debug_info);
@@ -411,7 +412,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
411412

412413
if (comptime is_instance) {
413414
const callbacks_struct = lua.state.callbacks();
414-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
415+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
415416
instance.debuginterrupt(&debug_instance, debug_info);
416417
} else {
417418
CallbackType.debuginterrupt(&debug_instance, debug_info);
@@ -428,7 +429,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
428429

429430
if (comptime is_instance) {
430431
const callbacks_struct = lua.state.callbacks();
431-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
432+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
432433
instance.debugprotectederror(&debug_instance);
433434
} else {
434435
CallbackType.debugprotectederror(&debug_instance);
@@ -445,7 +446,7 @@ pub fn setCallbacks(self: Self, callbacks: anytype) void {
445446

446447
if (comptime is_instance) {
447448
const callbacks_struct = state.callbacks();
448-
const instance: *CallbackType = @ptrCast(@alignCast(callbacks_struct.userdata.?));
449+
const instance: *CallbackType = @ptrFromInt(@intFromPtr(callbacks_struct.userdata.?));
449450
instance.onallocate(&state, osize, nsize);
450451
} else {
451452
CallbackType.onallocate(&state, osize, nsize);

0 commit comments

Comments
 (0)