Commit Graph

57 Commits

Author SHA1 Message Date
3e8a45a156 parser+codegen: Add support for 'return' statement
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 13:49:15 -05:00
38fab3f7e5 lexer: Remove unneeded isxdigit() check
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-16 13:45:49 -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
8d0c0520b5 codegen: Return 0 in cg_resolve_node();
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 22:46:35 -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
9b68588153 core: Add scope management
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 21:30:54 -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
a2a866a010 core: Add abstract syntax tree helpers
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 17:15:40 -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
fc6643ff3f lexer: Handle line numbers
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 16:25:34 -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
b057cdf597 core: Increment files_compiled before compile() call
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 14:38:11 -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
c1a9413ef3 symbol: Make symbol result optional
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 14:19:24 -05:00
b876cd7edf lexer: Putback non-identifier token
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 13:28:42 -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
52826975e8 core: Add initial symbol table impl
For now, symbol lookups are to require a linear scan. We can speed this
up in the future by adding a cache and further down the line considering
a hashmap.

Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-15 13:06:55 -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
38ae3eaa14 core: Add state-wide pointer box field
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 20:40:08 -05:00
eb8a6b84a2 lexer: Add putback buffer
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 16:57:35 -05:00
08f326440f core: Add pointer box impl
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 16:36:29 -05:00
9415ab38bc core: Allocate token buffer
Signed-off-by: Ian Moffett <ian@mirocom.org>
2026-02-14 02:04:20 -05:00