summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/goal.felan85
-rw-r--r--test/main.felan3
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;
+};