44 Commits

Author SHA1 Message Date
4325c809a1 lexer: add token for 'break' keyword
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-24 22:32:54 -05:00
9be4ce179e parser+codegen: Add support for loops
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-17 01:49:22 -05:00
aae74f06ed lexer: Add token for 'loop' keyword
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-17 01:10:48 -05:00
271c9750ea parser: Prevent double rets
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 14:29:06 -05:00
316d49e132 backend/x86_64: Insert 'ret' in mu_gen_retimm()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 14:28:37 -05:00
3e8a45a156 parser+codegen: Add support for 'return' statement
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 13:49:15 -05:00
04b253ce26 lexer: Add token for 'return' keyword
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 13:12:21 -05:00
e90de9ced5 parser: Move function scope check to parse_func()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 13:11:50 -05:00
fb0303c7a6 parser+lexer: Add proper counting of line numbers
Since the compiler is two-pass, having the incrementation performed in
the lexer would result in extraneous incrementations during the
preprocessing phase. We want line numbers for diagnostics during the
parsing phase and therefore a fix would be to have the parser filter
newlines out itself.

Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 12:12:30 -05:00
0d273de7cc core: Disallow nested functions
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 12:05:22 -05:00
1c2eed0a0d core: Associate data type with symbol, not ast node
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 03:39:07 -05:00
07db3ee834 parser+codegen: Handle function epilogue
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 23:11:52 -05:00
ae1a50e78b parser: Remove redundant newline
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 23:11:18 -05:00
e2c729a0f9 parser+backend: Add support for public symbols
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 22:58:06 -05:00
022770df16 lexer: Add token for '.pub' keyword
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 22:57:39 -05:00
154a71b1f6 core: Add initial codegen sources
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 22:17:40 -05:00
1db0ed78e1 core: Add 'void' data type
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 21:39:40 -05:00
009bdcf281 parser: Add function parsing groundwork
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 21:31:57 -05:00
695f408369 parser: Add newline to end of utok()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 21:11:25 -05:00
1ad72ea5a2 core: Add program data types
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 18:08:20 -05:00
e41c006ad3 lexer: Add token for ','
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 17:09:28 -05:00
d437fb258f lexer: Add token for '.struct' token
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 17:05:03 -05:00
41f5633198 parser: Use all lower-case for logs
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 17:01:28 -05:00
b670320934 lexer: Add token for numbers
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:48:03 -05:00
378259a873 lexer: Add token for semicolon
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:31:46 -05:00
babcf9d3cf lexer: Add tokens for LBRACE and RBRACE
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:30:16 -05:00
32b8c79fc2 parser: Document parse_ifdef()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:27:56 -05:00
54391f4c60 parser: Keep track of if directive depth
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:17:51 -05:00
8a47858fb7 parser: Don't return error in parse_ifndef()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:17:19 -05:00
c1d128cf20 parser: Decrement ifx_depth in parse_skip_to_endif()
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:16:09 -05:00
869735c25f parser: Add support for '#ifndef' directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 15:56:25 -05:00
7708c3d89e lexer: Add token for '#ifndef' directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 15:55:43 -05:00
508ef51fc8 core: Add support for '#ifdef' directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 14:38:35 -05:00
a164a18d67 lexer: Add '#ifdef' and '#endif' tokens
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 14:37:54 -05:00
e95916f08d parser: Handle '#define' directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 14:20:07 -05:00
8a54fa74ba lexer: Add scanning of '#define' directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 13:27:49 -05:00
7f0ba20dd6 parser: Handle parser scanning on pass 1
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 12:40:55 -05:00
5baa20c892 lexer: Add tokens for LPAREN + RPAREN
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 12:36:05 -05:00
44017eb06f lexer: Add token for ':'
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 12:30:57 -05:00
aa8afdd3d0 lexer: Add token for '.extern'
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 12:25:37 -05:00
e928d07bad lexer: Add token for '.f' [func] directive
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 23:37:32 -05:00
9e4c417657 lexer: Add scanning of identifiers
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 21:30:05 -05:00
d09082e879 parser: Add preprocessing stubs
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 02:02:07 -05:00
9e22c31a2f core: Add initial lexer and parser sources
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 00:11:26 -05:00