Skip to content

Lua Writer

The Lua writer generates LuaJIT FFI binding files from headerkit IR. The output wraps C declarations inside ffi.cdef[[ ... ]] blocks and handles structs, unions, enums, functions, typedefs, constants, and variables. Non-integer constants (floats, strings) are emitted as Lua local variables outside the cdef block.

Writer Class

LuaWriter

LuaWriter()

Writer that generates LuaJIT FFI binding files from headerkit IR.

Example

::

from headerkit.writers import get_writer

writer = get_writer("lua")
lua_source = writer.write(header)

# Or directly:
from headerkit.writers.lua import LuaWriter
writer = LuaWriter()
lua_source = writer.write(header)

write

write(header)

Convert header IR to a LuaJIT FFI binding file.

hash_comment_format

hash_comment_format()

Return format string for wrapping TOML cache metadata in Lua comments.

Convenience Function

header_to_lua

header_to_lua(header)

Convert all declarations in a Header to a LuaJIT FFI binding file.

Parameters:

Name Type Description Default
header Header

Parsed header IR from headerkit.

required

Returns:

Type Description
str

A complete Lua file with ffi.cdef declarations.

Example

from headerkit.backends import get_backend
from headerkit.writers import get_writer

backend = get_backend()
header = backend.parse("""
typedef struct {
    int x;
    int y;
} Point;

int distance(const Point* a, const Point* b);
""", "geometry.h")

writer = get_writer("lua")
print(writer.write(header))

Output:

-- Auto-generated LuaJIT FFI bindings
-- Source: geometry.h
-- Generated by headerkit

local ffi = require("ffi")

ffi.cdef[[

/* Structs */
typedef struct {
    int x;
    int y;
} Point;

/* Functions */
int distance(const Point *a, const Point *b);

]]

return {}