From 4ef9e077cbea99bc507b14c296f295c0992f2847 Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Sat, 16 Nov 2024 19:08:22 +0100 Subject: [PATCH] mod(dispatch): use `anyopague` instead of `usize` for pointer handling --- src/layout.zig | 11 +++++------ src/widget.zig | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/layout.zig b/src/layout.zig index 8e0d9d9..a23c92a 100644 --- a/src/layout.zig +++ b/src/layout.zig @@ -25,7 +25,6 @@ pub fn Layout(comptime Event: type, comptime Renderer: type) type { layout: LayoutType, widget: @import("widget.zig").Widget(Event, Renderer), }; - const Ptr = usize; pub const Interface = @import("interface").Interface(.{ .handle = fn (anytype, Event) anyerror!*Events, .render = fn (anytype, *Renderer) anyerror!void, @@ -38,7 +37,7 @@ pub fn Layout(comptime Event: type, comptime Renderer: type) type { deinit: *const fn (this: *LayoutType) void, }; - object: Ptr = undefined, + object: *anyopaque = undefined, vtable: *const VTable = undefined, // Handle the provided `Event` for this `Layout`. @@ -58,25 +57,25 @@ pub fn Layout(comptime Event: type, comptime Renderer: type) type { pub fn createFrom(object: anytype) LayoutType { return LayoutType{ - .object = @intFromPtr(object), + .object = @ptrCast(@alignCast(object)), .vtable = &.{ .handle = struct { // Handle the provided `Event` for this `Layout`. fn handle(this: *LayoutType, event: Event) !*Events { - const layout: @TypeOf(object) = @ptrFromInt(this.object); + const layout: @TypeOf(object) = @ptrCast(@alignCast(this.object)); return try layout.handle(event); } }.handle, .render = struct { // Render the contents of this `Layout`. fn render(this: *LayoutType, renderer: *Renderer) !void { - const layout: @TypeOf(object) = @ptrFromInt(this.object); + const layout: @TypeOf(object) = @ptrCast(@alignCast(this.object)); try layout.render(renderer); } }.render, .deinit = struct { fn deinit(this: *LayoutType) void { - const layout: @TypeOf(object) = @ptrFromInt(this.object); + const layout: @TypeOf(object) = @ptrCast(@alignCast(this.object)); layout.deinit(); } }.deinit, diff --git a/src/widget.zig b/src/widget.zig index fc2c0a2..8cd3b61 100644 --- a/src/widget.zig +++ b/src/widget.zig @@ -20,7 +20,6 @@ pub fn Widget(comptime Event: type, comptime Renderer: type) type { } const Type = struct { const WidgetType = @This(); - const Ptr = usize; pub const Interface = @import("interface").Interface(.{ .handle = fn (anytype, Event) ?Event, .render = fn (anytype, *Renderer) anyerror!void, @@ -33,7 +32,7 @@ pub fn Widget(comptime Event: type, comptime Renderer: type) type { deinit: *const fn (this: *WidgetType) void, }; - object: Ptr = undefined, + object: *anyopaque = undefined, vtable: *const VTable = undefined, // Handle the provided `Event` for this `Widget`. @@ -64,25 +63,25 @@ pub fn Widget(comptime Event: type, comptime Renderer: type) type { pub fn createFrom(object: anytype) WidgetType { return WidgetType{ - .object = @intFromPtr(object), + .object = @ptrCast(@alignCast(object)), .vtable = &.{ .handle = struct { // Handle the provided `Event` for this `Widget`. fn handle(this: *WidgetType, event: Event) ?Event { - const widget: @TypeOf(object) = @ptrFromInt(this.object); + const widget: @TypeOf(object) = @ptrCast(@alignCast(this.object)); return widget.handle(event); } }.handle, .render = struct { // Return the entire content of this `Widget`. fn render(this: *WidgetType, renderer: *Renderer) !void { - const widget: @TypeOf(object) = @ptrFromInt(this.object); + const widget: @TypeOf(object) = @ptrCast(@alignCast(this.object)); try widget.render(renderer); } }.render, .deinit = struct { fn deinit(this: *WidgetType) void { - const widget: @TypeOf(object) = @ptrFromInt(this.object); + const widget: @TypeOf(object) = @ptrCast(@alignCast(this.object)); widget.deinit(); } }.deinit,