I had hoped to make a first release of i8c today but I still have one open issue so you’ll have to wait until next week. Until then here’s some note source for you to ponder:
define test::factorial returns int
argument int x
extern func int (int) factorial
swap
dup
load 1
bne not_done_yet
return
not_done_yet:
dup
load 1
sub
swap
rot
swap
call
mul
As hints I will a) point you at section 2.5 of the DWARF spec, and b) mention that argument and extern directives instruct the caller and runtime respectively to push entries onto the stack.
Your homework is to see how much of the language and runtime you can infer from this one function.
You may ask questions.