Odin bindings for the Umka programming language - a statically typed embeddable scripting language.
- Complete Umka API bindings for Odin
- Cross-platform support (Windows, Linux, macOS ARM64/x64)
- Generic stack slot helpers for type-safe parameter passing
- External function registration
- Module system support
- Memory management utilities
package example
import umka "./src"
import "core:c"
import "core:fmt"
import "core:strings"
main :: proc() {
// Allocate Umka instance
instance := umka.umkaAlloc()
defer umka.umkaFree(instance)
// Initialize with Umka source code
source := `
fn add(a: int, b: int): int {
return a + b
}
`
source_cstr := strings.clone_to_cstring(source)
defer delete(source_cstr)
umka.umkaInit(instance, "main.um", source_cstr, 1024*1024, nil, 0, nil, false, true, nil)
umka.umkaCompile(instance)
// Get function and call it
fn_context: umka.UmkaFuncContext
umka.umkaGetFunc(instance, nil, "add", &fn_context)
// Set parameters
params := cast([^]umka.UmkaStackSlot)fn_context.params
umka.umka_stack_slot_set(¶ms[0], 4)
umka.umka_stack_slot_set(¶ms[1], 6)
// Call function
umka.umkaCall(instance, &fn_context)
// Get result
result := umka.umka_stack_slot_get(fn_context.result, int)
fmt.printf("Result: %d\n", result) // Output: Result: 10
}Run tests with:
odin test tests -out:tests.bin- Umka library (included in
lib/directory) - Odin compiler
This project provides bindings to the Umka language. See the Umka repository for Umka's license.