diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common.hff | 12 | ||||
| -rw-r--r-- | src/libc.hff | 10 | ||||
| -rw-r--r-- | src/main.cff | 8 | ||||
| -rw-r--r-- | src/parse.cff | 5 | ||||
| -rw-r--r-- | src/parse.hff | 9 |
5 files changed, 39 insertions, 5 deletions
diff --git a/src/common.hff b/src/common.hff new file mode 100644 index 0000000..71e3be0 --- /dev/null +++ b/src/common.hff @@ -0,0 +1,12 @@ +import "libc.hff"; + +defmacro assert { +(ex,s) [ (do + if not (ex) { + fprintf(stderr, "%s:%d: assertion failed: ", #FILE, #LINE); + fprintf(stderr, "`%s'", (s)); + fprintf(stderr, "\n"); + abort(); + } +) ] +} diff --git a/src/libc.hff b/src/libc.hff index 98a6f3c..f06f4dd 100644 --- a/src/libc.hff +++ b/src/libc.hff @@ -1,7 +1,11 @@ ! stdio.h struct FILE; -extern static stdin FILE, - stdout FILE, - stderr FILE; +extern static stdin *FILE, + stdout *FILE, + stderr *FILE; extern fn printf(fmt *const u8, ...) void; extern fn fprintf(fp *FILE, fmt *const u8, ...) void; + +! stdlib.h +extern fn abort() void; +extern fn exit(c int) void; diff --git a/src/main.cff b/src/main.cff index 1dbbbee..9392a7a 100644 --- a/src/main.cff +++ b/src/main.cff @@ -1,7 +1,11 @@ import "libc.hff"; +import "common.hff"; import "parse.hff"; extern fn main(argc int, argv **u8) int { - let t Tok = { TokT:kw_or, { .i: 1 } }; - printf("%d\n", TokT:kw_or); + assert(argc > 1, "args?"); + + let p = Parser {}; + parse(&p, argv[1]); } + diff --git a/src/parse.cff b/src/parse.cff new file mode 100644 index 0000000..35cccdb --- /dev/null +++ b/src/parse.cff @@ -0,0 +1,5 @@ +import "parse.hff"; + +extern fn parse(P *Parser, path *const u8) [#]Decl { + return {}; +} diff --git a/src/parse.hff b/src/parse.hff index 463dd26..9976df3 100644 --- a/src/parse.hff +++ b/src/parse.hff @@ -16,3 +16,12 @@ struct Tok { i i64 }, } + +struct Decl { +} + +struct Parser { + +} + +extern fn parse(P *Parser, path *const u8) [#]Decl; |