aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-22 13:07:35 +0200
committerlemon <lsof@mailbox.org>2022-08-22 13:07:35 +0200
commite0686f7953bbc74ff03a7a6b22c0b82995ab494e (patch)
tree96a0063c441bc6e63b13fbbda5980a8557883614
parentc9bcf39a2ad78c7bc9cbfaab43e03771899cfa44 (diff)
screw it , llvm
-rw-r--r--examples/hello-world.cff27
-rw-r--r--src/cffc.hff4
-rw-r--r--src/main.cff1
-rw-r--r--src/parse.cff5
4 files changed, 34 insertions, 3 deletions
diff --git a/examples/hello-world.cff b/examples/hello-world.cff
index ba16752..a867cd9 100644
--- a/examples/hello-world.cff
+++ b/examples/hello-world.cff
@@ -1,7 +1,32 @@
import "libc.hff";
+fn zero() int {
+ return 1 + 2;
+}
+
+#{
+struct Vec2f { x f32, y f32 }
+
+fn x(v *Vec2f) f32 {
+ return (*v).y;
+}
+
+fn len(x [#]int) int {
+ return x.#len;
+}
+
+fn ptr(x [#]int) int {
+ return *x.#ptr;
+}
+}
+
+fn add(a int, b int) int {
+ let x *void = {};
+ return a + b;
+}
+
extern fn main(argc int, argv **u8) int {
- let it = *argv = "hi";
+ let it int = 0;
argv[42] - 3;
while argc > 0 {
argc = argc - 1;
diff --git a/src/cffc.hff b/src/cffc.hff
index c8e3f11..2504fba 100644
--- a/src/cffc.hff
+++ b/src/cffc.hff
@@ -456,3 +456,7 @@ extern fn ir_free(*IRCtx) void;
// asm.cff
extern static g_asmbackend Backend;
+
+// llvm.cff
+extern fn llvm_genfn(externp bool, name *const u8, f *Fn) void;
+extern fn llvm_init() void;
diff --git a/src/main.cff b/src/main.cff
index ac4ca70..3327e48 100644
--- a/src/main.cff
+++ b/src/main.cff
@@ -8,6 +8,7 @@ extern fn main(argc int, argv **u8) int {
let p = Parser {};
parser_init(&p, argv[1]);
+ llvm_init();
let decls = parse(&p);
free(decls.#ptr);
}
diff --git a/src/parse.cff b/src/parse.cff
index a1f0dd0..84ed1fe 100644
--- a/src/parse.cff
+++ b/src/parse.cff
@@ -2458,7 +2458,8 @@ fn parsefn(P *Parser, loc Loc, externp bool, name *const u8) *Decl {
}
Fn.body = :Some(parseblock(P));
popenv(P);
- ir_genfn(P.irctx, Fn);
+ // ir_genfn(P.irctx, Fn);
+ llvm_genfn(externp, name, Fn);
(as(*Arena)P.alloc.a)->destroy();
}
}
@@ -2769,7 +2770,7 @@ fn parsedecls(P *Parser, loc Loc, yield DeclYielder, yarg *void, toplevel bool)
if a.yield {
a.yield(decl, a.yarg);
}
- ir_genstatic(a.P.irctx, decl);
+ // ir_genstatic(a.P.irctx, decl);
}
parsevardecl(P, toplevel, externp, #{let?} #t, &varyield, &Arg { P, externp, toplevel, yield, yarg });
return;