dev/sdl3-parser #1

Open
peterino wants to merge 51 commits from dev/sdl3-parser into dev/variant-engine
4 changed files with 15 additions and 747 deletions
Showing only changes of commit 37054b7958 - Show all commits

View File

@ -655,7 +655,6 @@ pub const Scanner = struct {
fn parseStructField(self: *Scanner, line: []const u8) !?FieldDecl {
const trimmed = std.mem.trim(u8, line, " \t\r");
std.debug.print("DEBUG parseStructField: trimmed='{s}'\n", .{trimmed});
if (trimmed.len == 0) return null;
if (std.mem.startsWith(u8, trimmed, "//")) return null;
if (std.mem.startsWith(u8, trimmed, "/*")) return null;
@ -678,17 +677,12 @@ pub const Scanner = struct {
}
}
std.debug.print("DEBUG parseStructField: field_part='{s}'\n", .{field_part});
// Check for function pointer field: RetType (SDLCALL *field_name)(params)
if (std.mem.indexOf(u8, field_part, "(SDLCALL *")) |sdlcall_pos| {
std.debug.print("DEBUG: Found SDLCALL function pointer in: {s}\n", .{field_part});
// Find the * after SDLCALL
const after_sdlcall = field_part[sdlcall_pos + 10..]; // Skip "(SDLCALL *"
std.debug.print("DEBUG: after_sdlcall: {s}\n", .{after_sdlcall});
if (std.mem.indexOf(u8, after_sdlcall, ")")) |close_paren| {
const field_name = std.mem.trim(u8, after_sdlcall[0..close_paren], " \t");
std.debug.print("DEBUG: field_name extracted: {s}\n", .{field_name});
// The entire thing is the type (we'll convert to Zig function pointer syntax later)
return FieldDecl{

View File

@ -6,9 +6,11 @@ const Allocator = std.mem.Allocator;
pub fn convertType(c_type: []const u8, allocator: Allocator) ![]const u8 {
const trimmed = std.mem.trim(u8, c_type, " \t");
// Handle function pointers: RetType (SDLCALL *name)(params) -> *const fn(params) callconv(.C) RetType
if (std.mem.indexOf(u8, trimmed, "(SDLCALL *") orelse std.mem.indexOf(u8, trimmed, "(*")) |star_pos| {
return try convertFunctionPointerType(trimmed, allocator);
// Handle function pointers: For now, just return as placeholder until we implement full conversion
if (std.mem.indexOf(u8, trimmed, "(SDLCALL *") != null or std.mem.indexOf(u8, trimmed, "(*") != null) {
// TODO: Implement full function pointer conversion
// For now, return a placeholder type
return try std.fmt.allocPrint(allocator, "?*const anyopaque", .{});
}
// Handle array types: "Uint8[2]" -> "[2]u8"
@ -163,8 +165,11 @@ fn convertFunctionPointerType(c_type: []const u8, allocator: Allocator) ![]const
const params_str = std.mem.trim(u8, c_type[last_open_paren + 1 .. last_close_paren], " \t");
// Convert return type
const zig_return = try convertType(return_type_str, allocator);
// Convert return type (but don't recursively convert function pointers)
const zig_return = if (std.mem.indexOf(u8, return_type_str, "(") != null)
try allocator.dupe(u8, return_type_str)
else
try convertType(return_type_str, allocator);
defer allocator.free(zig_return);
// Convert parameters
@ -196,7 +201,11 @@ fn convertFunctionPointerType(c_type: []const u8, allocator: Allocator) ![]const
}
}
const zig_param = try convertType(param_type, allocator);
// Don't recursively convert function pointers in params
const zig_param = if (std.mem.indexOf(u8, param_type, "(") != null)
try allocator.dupe(u8, param_type)
else
try convertType(param_type, allocator);
try params_list.append(zig_param);
}

View File

@ -1,734 +0,0 @@
{
"header": "SDL_iostream.h",
"opaque_types": [
{
"name": "SDL_IOStream"
}
],
"typedefs": [],
"function_pointers": [],
"enums": [
{
"name": "SDL_IOStatus",
"values": []
},
{
"name": "SDL_IOWhence",
"values": []
}
],
"structs": [
{
"name": "SDL_IOStreamInterface",
"fields": [
{
"name": "version",
"type": "Uint32"
},
{
"name": "userdata",
"type": "Sint64 (SDLCALL *size)(void *"
},
{
"name": "whence",
"type": "Sint64 (SDLCALL *seek)(void *userdata, Sint64 offset, SDL_IOWhence"
},
{
"name": "status",
"type": "size_t (SDLCALL *read)(void *userdata, void *ptr, size_t size, SDL_IOStatus *"
},
{
"name": "status",
"type": "size_t (SDLCALL *write)(void *userdata, const void *ptr, size_t size, SDL_IOStatus *"
},
{
"name": "status",
"type": "bool (SDLCALL *flush)(void *userdata, SDL_IOStatus *"
},
{
"name": "userdata",
"type": "bool (SDLCALL *close)(void *"
}
]
}
],
"unions": [],
"flags": [],
"functions": [
{
"name": "SDL_IOFromFile",
"return_type": "SDL_IOStream *",
"parameters": [
{
"name": "file",
"type": "const char *"
},
{
"name": "mode",
"type": "const char *"
}
]
},
{
"name": "SDL_IOFromMem",
"return_type": "SDL_IOStream *",
"parameters": [
{
"name": "mem",
"type": "void *"
},
{
"name": "size",
"type": "size_t"
}
]
},
{
"name": "SDL_IOFromConstMem",
"return_type": "SDL_IOStream *",
"parameters": [
{
"name": "mem",
"type": "const void *"
},
{
"name": "size",
"type": "size_t"
}
]
},
{
"name": "SDL_IOFromDynamicMem",
"return_type": "SDL_IOStream *",
"parameters": []
},
{
"name": "SDL_OpenIO",
"return_type": "SDL_IOStream *",
"parameters": [
{
"name": "iface",
"type": "const SDL_IOStreamInterface *"
},
{
"name": "userdata",
"type": "void *"
}
]
},
{
"name": "SDL_CloseIO",
"return_type": "bool",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_GetIOProperties",
"return_type": "SDL_PropertiesID",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_GetIOStatus",
"return_type": "SDL_IOStatus",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_GetIOSize",
"return_type": "Sint64",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_SeekIO",
"return_type": "Sint64",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
},
{
"name": "offset",
"type": "Sint64"
},
{
"name": "whence",
"type": "SDL_IOWhence"
}
]
},
{
"name": "SDL_TellIO",
"return_type": "Sint64",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_ReadIO",
"return_type": "size_t",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
},
{
"name": "ptr",
"type": "void *"
},
{
"name": "size",
"type": "size_t"
}
]
},
{
"name": "SDL_WriteIO",
"return_type": "size_t",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
},
{
"name": "ptr",
"type": "const void *"
},
{
"name": "size",
"type": "size_t"
}
]
},
{
"name": "SDL_IOprintf",
"return_type": "size_t",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
},
{
"name": "fmt",
"type": "const char *"
},
{
"name": "",
"type": "..."
}
]
},
{
"name": "SDL_IOvprintf",
"return_type": "size_t",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
},
{
"name": "fmt",
"type": "const char *"
},
{
"name": "ap",
"type": "va_list"
}
]
},
{
"name": "SDL_FlushIO",
"return_type": "bool",
"parameters": [
{
"name": "context",
"type": "SDL_IOStream *"
}
]
},
{
"name": "SDL_LoadFile_IO",
"return_type": "void *",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "datasize",
"type": "size_t *"
},
{
"name": "closeio",
"type": "bool"
}
]
},
{
"name": "SDL_LoadFile",
"return_type": "void *",
"parameters": [
{
"name": "file",
"type": "const char *"
},
{
"name": "datasize",
"type": "size_t *"
}
]
},
{
"name": "SDL_SaveFile_IO",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "data",
"type": "const void *"
},
{
"name": "datasize",
"type": "size_t"
},
{
"name": "closeio",
"type": "bool"
}
]
},
{
"name": "SDL_SaveFile",
"return_type": "bool",
"parameters": [
{
"name": "file",
"type": "const char *"
},
{
"name": "data",
"type": "const void *"
},
{
"name": "datasize",
"type": "size_t"
}
]
},
{
"name": "SDL_ReadU8",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint8 *"
}
]
},
{
"name": "SDL_ReadS8",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint8 *"
}
]
},
{
"name": "SDL_ReadU16LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint16 *"
}
]
},
{
"name": "SDL_ReadS16LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint16 *"
}
]
},
{
"name": "SDL_ReadU16BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint16 *"
}
]
},
{
"name": "SDL_ReadS16BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint16 *"
}
]
},
{
"name": "SDL_ReadU32LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint32 *"
}
]
},
{
"name": "SDL_ReadS32LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint32 *"
}
]
},
{
"name": "SDL_ReadU32BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint32 *"
}
]
},
{
"name": "SDL_ReadS32BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint32 *"
}
]
},
{
"name": "SDL_ReadU64LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint64 *"
}
]
},
{
"name": "SDL_ReadS64LE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint64 *"
}
]
},
{
"name": "SDL_ReadU64BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint64 *"
}
]
},
{
"name": "SDL_ReadS64BE",
"return_type": "bool",
"parameters": [
{
"name": "src",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint64 *"
}
]
},
{
"name": "SDL_WriteU8",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint8"
}
]
},
{
"name": "SDL_WriteS8",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint8"
}
]
},
{
"name": "SDL_WriteU16LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint16"
}
]
},
{
"name": "SDL_WriteS16LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint16"
}
]
},
{
"name": "SDL_WriteU16BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint16"
}
]
},
{
"name": "SDL_WriteS16BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint16"
}
]
},
{
"name": "SDL_WriteU32LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint32"
}
]
},
{
"name": "SDL_WriteS32LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint32"
}
]
},
{
"name": "SDL_WriteU32BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint32"
}
]
},
{
"name": "SDL_WriteS32BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint32"
}
]
},
{
"name": "SDL_WriteU64LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint64"
}
]
},
{
"name": "SDL_WriteS64LE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint64"
}
]
},
{
"name": "SDL_WriteU64BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Uint64"
}
]
},
{
"name": "SDL_WriteS64BE",
"return_type": "bool",
"parameters": [
{
"name": "dst",
"type": "SDL_IOStream *"
},
{
"name": "value",
"type": "Sint64"
}
]
}
]
}

1
lib/sdl3/test.json vendored
View File

@ -1 +0,0 @@
{ "samplers": 0, "storage_textures": 0, "storage_buffers": 1, "uniform_buffers": 0 }