diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/goal.felan | 85 | ||||
-rw-r--r-- | test/main.felan | 3 |
2 files changed, 88 insertions, 0 deletions
diff --git a/test/goal.felan b/test/goal.felan new file mode 100644 index 0000000..868dac2 --- /dev/null +++ b/test/goal.felan @@ -0,0 +1,85 @@ +void :: struct {}; + +u64 :: struct { + _ : value64; +}; + +Syscall :: enum { + READ, + WRITE, + OPEN, + CLOSE, + EXIT, +}; + +StdFile :: enum { + IN, + OUT, + ERR, +}; + +syscall :: fasm ( + sysc : Syscall, + arg0 : u64 = undefined, + arg1 : u64 = undefined, + arg2 : u64 = undefined, + arg3 : u64 = undefined, + arg4 : u64 = undefined, + arg5 : u64 = undefined, + arg6 : u64 = undefined, +) -> void { + syscall +}; + +operator ltr order2 infix + :: fasm (a : u64, b : u64) -> u64 { + add_i64 +}; + +operator ltr order2 infix - :: fasm (a : u64, b : u64) -> u64 { + sub_i64 +}; + +operator ltr order3 infix * :: fasm (a : u64, b : u64) -> u64 { + mul_u64 +}; + +operator ltr order3 infix / :: fasm (a : u64, b : u64) -> u64 { + div_u64 +}; + +operator ltr order3 infix % :: fasm (a : u64, b : u64) -> u64 { + rem_u64 +}; + +operator ltr order4 prefix + :: fasm (a : u64) -> u64 { + // nothing +}; + +operator ltr order4 prefix - :: fasm (a : u64, b : u64) -> u64 { + negu64 +}; + +operator ltr order5 prefix ** :: (a : u64, b : u64) -> u64 { + return pow(a,b); +}; + +assignToAddr64 :: fasm (addr : value64, b : value64) -> void { + pop64 +}; + +// self assign can't be overloaded because of pass to function itself +operator rtl order1 infix = :: (a : u64, b : value64) -> u64 { + assignToAddr64(@addressOf(a),b); + return a; +}; + +exit :: (code : u64) -> void { + syscall(Syscall.EXIT, code); +}; + +// a comment +main :: () -> void { + a : u64 = 2; // some comment + exit(a + 4); +}; + diff --git a/test/main.felan b/test/main.felan new file mode 100644 index 0000000..eef127e --- /dev/null +++ b/test/main.felan @@ -0,0 +1,3 @@ +main :: () -> void { + print; +}; |