Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
Loading...
Searching...
No Matches
ast.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <stdbool.h>
9#include <stddef.h>
10
11#include "../c_libs/memory/memory.h"
12#include "../lexer/lexer.h"
13
14// Forward declaration
15typedef struct AstNode AstNode;
16
17// Node type enumeration
18typedef enum {
19 // Preprocessor nodes
20 AST_PREPROCESSOR_MODULE, // Module declaration
21 AST_PREPROCESSOR_USE, // Use/import statement
22 AST_PREPROCESSOR_OS, // Used to declare things for different os's
24
25 // Expression nodes
26 AST_EXPR_LITERAL, // Literal values (numbers, strings, booleans)
27 AST_EXPR_IDENTIFIER, // Variable/function names
28 AST_EXPR_BINARY, // Binary operations (+, -, *, /, etc.)
29 AST_EXPR_UNARY, // Unary operations (!, -, ++, --)
30 AST_EXPR_CALL, // Function calls
31 AST_EXPR_ASSIGNMENT, // Assignment expressions
32 AST_EXPR_TERNARY, // Conditional expressions (? :)
33 AST_EXPR_MEMBER, // Member access (obj.field)
34 AST_EXPR_INDEX, // Array/object indexing (obj[index])
35 AST_EXPR_GROUPING, // Parenthesized expressions
36 AST_EXPR_RANGE, // range expressions '..'
37 AST_EXPR_ARRAY, // [ ... ] array expressions
38 AST_EXPR_DEREF, // *object
39 AST_EXPR_ADDR, // &object
46 AST_EXPR_SYSTEM, // System Statement
50
51 // Statement nodes
52 AST_PROGRAM, // Program root node
53 AST_STMT_EXPRESSION, // Expression statements
54 AST_STMT_VAR_DECL, // Variable declarations
55 AST_STMT_CONST_DECL, // Constant declarations
56 AST_STMT_FUNCTION, // Function definitions
57 AST_STMT_IF, // If statements
58 AST_STMT_LOOP, // Loop statements (while, for)
59 AST_STMT_BREAK_CONTINUE, // Break and continue statements
60 AST_STMT_RETURN, // Return statements
61 AST_STMT_BLOCK, // Block statements
62 AST_STMT_PRINT, // Print statements
63 AST_STMT_MODULE, // Module declarations
64 AST_STMT_ENUM, // Enum declarations
65 AST_STMT_STRUCT, // Struct declarations
66 AST_STMT_FIELD_DECL, // Field declarations (for structs)
68 AST_STMT_DEFER, // Defer statements
69 AST_STMT_SWITCH, // Switch statement
70 AST_STMT_IMPL, // impl statement
73
74 // Type nodes
75 AST_TYPE_RESOLUTION, // Namespace::Type resolution
76 AST_TYPE_BASIC, // Basic types (int, float, string, etc.)
77 AST_TYPE_POINTER, // Pointer types
78 AST_TYPE_ARRAY, // Array types
79 AST_TYPE_FUNCTION, // Function types
80 AST_TYPE_STRUCT, // Struct types
81 AST_TYPE_ENUM, // Enum types
82} NodeType;
83
84// Literal types
95
96// Binary operators
119
120// Unary operators
133
140
141// Base AST node structure
142struct AstNode {
144 size_t line;
145 size_t column;
146 NodeCategory category; // Category of the node (expression, statement, type)
147
148 union {
149 struct {
150 union {
151 // Preprocessor-specific data
152 struct {
153 char *name;
158 const char *file_path;
161 void *scope;
162 } module;
163
164 // @use "module_name" as module;
165 struct {
166 const char *module_name;
167 const char *alias;
169
170 // @os { "windows" => { ... } "linux" => { ... } }
171 struct {
172 char **platforms; // e.g. ["windows", "linux", "macos"]
173 AstNode **bodies; // parallel array of AST_STMT_BLOCK nodes
174 size_t arm_count;
175 bool has_default; // true if _ => { ... } arm present
176 AstNode *default_body; // NULL if has_default is false
177 } os;
178
179 struct {
180 const char *lib_name;
182 };
184
185 struct {
186 // Expression-specific data
187 union {
188 // Literal expression
189 struct {
191 union {
192 long long int_val;
193 double float_val;
199
200 // Identifier expression
201 struct {
202 char *name;
204
205 // Binary expression
206 struct {
211
212 // Unary expression
213 struct {
217
218 // Function call expression
219 struct {
222 size_t arg_count;
224
225 // Assignment expression
226 struct {
230
231 // Ternary expression
232 struct {
237
238 // Member access expression
239 struct {
242 char *member;
244
245 // Index expression
246 struct {
250
251 // Grouping expression
252 struct {
255
256 // Array expression
257 struct {
262
263 // Deref expression
264 struct {
267
268 // Address experssion
269 struct {
272
273 // alloc expression
274 struct {
277
278 // memcpy expression
279 struct {
282 AstNode *size;
284
285 // free expression
286 struct {
289
290 // cast expression
291 struct {
295
296 // input expression
297 struct {
298 AstNode *type;
301
302 // system expression
303 struct {
306
307 // syscall expr
308 struct {
309 AstNode **args;
310 size_t count;
312
313 // sizeof expression
314 struct {
318
319 struct {
320 char *name; // Struct type name (NULL for anonymous)
321 char **field_names; // Array of field names
322 AstNode **field_value; // Array of field values (expressions)
323 size_t field_count; // Number of fields
325
326 // Spread expression (...expr in struct literals)
327 struct {
328 AstNode *expr; // The expression being spread
330 };
332
333 struct {
334 // Statement-specific data
335 union {
336 // Program root node
337 struct {
341
342 // Expression statement
343 struct {
346
347 // Variable declaration
348 struct {
349 const char *name;
350 char *doc_comment; // NEW: Variable documentation (///)
356
357 // Struct declaration
358 struct {
359 const char *name;
360 char *doc_comment; // NEW: Struct documentation (///)
365 bool is_public;
367
368 struct {
369 const char *name;
370 char *doc_comment;
371 AstNode *type;
373 bool is_public;
376
377 struct {
378 AstNode *type;
380 bool is_public;
382
383 // Enumeration declaration
384 struct {
385 const char *name;
386 char *doc_comment; // NEW: Enum documentation (///)
387 char **members;
389 bool is_public;
391
392 // Function declaration
393 struct {
394 const char *name;
395 char *doc_comment; // NEW: Function documentation (///)
400 bool is_public;
401 bool is_static;
406 void *scope;
407
408 // DLL import link
409 bool is_dll_import; // This is true when #dll_import(...) is present
410 const char *dll_name; // "kernel32.dll", NULL if not a dll import
411 const char
412 *dll_callconv; // "stdcall", "cdecl", NULL = platform default
413
414 // Lib import link
416 const char *lib_name;
418
419 // If statement
420 struct {
426 void *scope;
430
431 // Loop statement (Combined while and for)
432 struct {
435 AstNode *body;
438 void *scope;
440
441 // Return statement
442 struct {
443 AstNode *value;
445
446 struct {
449 void *scope;
451
452 // Print statement
453 struct {
456 bool ln;
458
459 struct {
462
463 struct {
466
467 struct {
469 struct AstNode **cases;
472 void *scope;
474
475 // impl [fun1, fun2, ...] -> [struct1, struct2, ...] {}
476 struct {
482 AstNode *body;
484
485 // Case clause node
486 struct {
489 AstNode *body;
491
492 struct {
493 AstNode *body;
495 };
497
498 struct {
499 // Type-specific data
500 union {
501 // Basic type
502 struct {
503 const char *name;
505
506 // Pointer type
507 struct {
510
511 // Array type
512 struct {
514 AstNode *size;
516
517 // Function type
518 struct {
520 size_t param_count;
523
524 struct {
525 char **parts;
528
529 struct {
530 const char *name;
532 const char **member_names;
533 size_t member_count;
535 };
537 };
538};
539
540// Type aliases for cleaner code
542typedef AstNode Expr;
543typedef AstNode Stmt;
544typedef AstNode Type;
545
547 NodeCategory category, size_t line,
548 size_t column);
549AstNode *create_expr_node(ArenaAllocator *arena, NodeType type, size_t line,
550 size_t column);
551AstNode *create_stmt_node(ArenaAllocator *arena, NodeType type, size_t line,
552 size_t column);
553AstNode *create_type_node(ArenaAllocator *arena, NodeType type, size_t line,
554 size_t column);
555
556// Helper macros for creating nodes
557#define create_preprocessor(arena, type, line, column) \
558 create_preprocessor_node(arena, type, Node_Category_PREPROCESSOR, line, \
559 column)
560#define create_expr(arena, type, line, column) \
561 create_expr_node(arena, type, line, column)
562#define create_stmt(arena, type, line, column) \
563 create_stmt_node(arena, type, line, column)
564#define create_type(arena, type, line, column) \
565 create_type_node(arena, type, line, column)
566
568 NodeCategory category, size_t line, size_t column);
569
570// Preprocessor creation functions
571AstNode *create_module_node(ArenaAllocator *arena, const char *name,
572 const char *doc_comment, int potions,
573 AstNode **body, size_t body_count, size_t line,
574 size_t column);
575AstNode *create_use_node(ArenaAllocator *arena, const char *module_name,
576 const char *alias, size_t line, size_t column);
577AstNode *create_os_node(ArenaAllocator *arena, char **platforms,
578 AstNode **bodies, size_t arm_count, bool has_default,
579 AstNode *default_body, size_t line, size_t column);
580AstNode *create_link_node(ArenaAllocator *arena, const char *lib_name,
581 size_t line, size_t column);
582void apply_dll_import(AstNode *func_node, const char *dll_name,
583 const char *callconv);
584void apply_lib_import(AstNode *func_node, const char *lib_name);
585
586// Expression creation functions
588 void *value, size_t line, size_t column);
589AstNode *create_identifier_expr(ArenaAllocator *arena, const char *name,
590 size_t line, size_t column);
592 Expr *right, size_t line, size_t column);
594 size_t line, size_t column);
595AstNode *create_call_expr(ArenaAllocator *arena, Expr *callee, Expr **args,
596 size_t arg_count, size_t line, size_t column);
598 Expr *value, size_t line, size_t column);
600 Expr *then_expr, Expr *else_expr, size_t line,
601 size_t column);
603 bool is_compiletime, const char *member,
604 size_t line, size_t column);
605AstNode *create_index_expr(ArenaAllocator *arena, Expr *object, Expr *index,
606 size_t line, size_t column);
607AstNode *create_grouping_expr(ArenaAllocator *arena, Expr *expr, size_t line,
608 size_t column);
609AstNode *create_array_expr(ArenaAllocator *arena, Expr **elements,
610 size_t element_count, size_t line, size_t column);
611AstNode *create_deref_expr(ArenaAllocator *arena, Expr *object, size_t line,
612 size_t col);
613AstNode *create_addr_expr(ArenaAllocator *arena, Expr *object, size_t line,
614 size_t col);
615AstNode *create_alloc_expr(ArenaAllocator *arena, Expr *size, size_t line,
616 size_t col);
618 Expr *size, size_t line, size_t col);
619AstNode *create_free_expr(ArenaAllocator *arena, Expr *ptr, size_t line,
620 size_t col);
621AstNode *create_cast_expr(ArenaAllocator *arena, Expr *type, Expr *castee,
622 size_t line, size_t col);
624 size_t line, size_t col);
625AstNode *create_system_expr(ArenaAllocator *arena, Expr *command, size_t line,
626 size_t col);
627AstNode *create_syscall_expr(ArenaAllocator *arena, Expr **args, size_t count,
628 size_t line, size_t col);
629AstNode *create_sizeof_expr(ArenaAllocator *arena, Expr *object, bool is_type,
630 size_t line, size_t col);
631Expr *create_struct_expr(ArenaAllocator *arena, char *name, char **field_names,
632 AstNode **field_values, size_t field_count, int line,
633 int col);
634Expr *create_spread_expr(ArenaAllocator *arena, Expr *expr, size_t line,
635 size_t col);
636
637// Statement creation functions (UPDATED with doc_comment parameters)
639 size_t stmt_count, size_t line, size_t column);
640AstNode *create_expr_stmt(ArenaAllocator *arena, Expr *expression, size_t line,
641 size_t column);
642AstNode *create_var_decl_stmt(ArenaAllocator *arena, const char *name,
643 const char *doc_comment, AstNode *var_type,
644 Expr *initializer, bool is_mutable,
645 bool is_public, size_t line, size_t column);
646AstNode *create_func_decl_stmt(ArenaAllocator *arena, const char *name,
647 const char *doc_comment, char **param_names,
648 AstNode **param_types, size_t param_count,
649 AstNode *return_type, bool is_public,
650 bool is_static, bool returns_ownership,
651 bool takes_ownership, bool forward_declared,
652 AstNode *body, size_t line, size_t column);
653AstNode *create_struct_decl_stmt(ArenaAllocator *arena, const char *name,
654 const char *doc_comment,
655 AstNode **public_members, size_t public_count,
656 AstNode **private_members,
657 size_t private_count, bool is_public,
658 size_t line, size_t column);
659AstNode *create_field_decl_stmt(ArenaAllocator *arena, const char *name,
660 const char *doc_comment, AstNode *type,
661 AstNode *function, bool is_public,
662 bool is_static, size_t line, size_t column);
663
665 bool via_pointer, bool is_public,
666 size_t line, size_t column);
667AstNode *create_enum_decl_stmt(ArenaAllocator *arena, const char *name,
668 const char *doc_comment, char **members,
669 size_t member_count, bool is_public, size_t line,
670 size_t column);
671AstNode *create_if_stmt(ArenaAllocator *arena, Expr *condition,
672 AstNode *then_stmt, AstNode **elif_stmts,
673 int elif_count, AstNode *else_stmt, size_t line,
674 size_t column);
676 size_t line, size_t column);
677AstNode *create_for_loop_stmt(ArenaAllocator *arena, AstNode **initializers,
678 size_t init_count, Expr *condition,
679 Expr *optional, AstNode *body, size_t line,
680 size_t column);
681AstNode *create_loop_stmt(ArenaAllocator *arena, Expr *condition,
682 Expr *optional, AstNode *body, size_t line,
683 size_t column);
684AstNode *create_return_stmt(ArenaAllocator *arena, Expr *value, size_t line,
685 size_t column);
686AstNode *create_block_stmt(ArenaAllocator *arena, AstNode **statements,
687 size_t stmt_count, size_t line, size_t column);
688AstNode *create_print_stmt(ArenaAllocator *arena, Expr **expressions,
689 size_t expr_count, bool ln, size_t line,
690 size_t column);
691AstNode *create_break_continue_stmt(ArenaAllocator *arena, bool is_continue,
692 size_t line, size_t column);
694 size_t line, size_t column);
696 AstNode **cases, size_t case_count,
697 AstNode *default_case, size_t line, size_t column);
698AstNode *create_impl_stmt(ArenaAllocator *arena, char **function_name_list,
699 AstNode **function_type_list, AstNode *body,
700 char **struct_name_list, size_t function_name_count,
701 size_t struct_name_count, size_t line, size_t column);
703 size_t value_count, AstNode *body, size_t line,
704 size_t column);
705AstNode *create_default_stmt(ArenaAllocator *arena, AstNode *body, size_t line,
706 size_t column);
707
708// Type creation functions
709AstNode *create_basic_type(ArenaAllocator *arena, const char *name, size_t line,
710 size_t column);
712 size_t line, size_t column);
713AstNode *create_array_type(ArenaAllocator *arena, AstNode *element_type,
714 Expr *size, size_t line, size_t column);
716 size_t param_count, AstNode *return_type,
717 size_t line, size_t column);
718AstNode *create_resolution_type(ArenaAllocator *arena, char **parts,
719 size_t part_count, size_t line, size_t column);
AstNode * create_assignment_expr(ArenaAllocator *arena, Expr *target, Expr *value, size_t line, size_t column)
Definition expr.c:86
AstNode Stmt
Definition ast.h:543
AstNode * create_sizeof_expr(ArenaAllocator *arena, Expr *object, bool is_type, size_t line, size_t col)
Definition expr.c:206
AstNode * create_os_node(ArenaAllocator *arena, char **platforms, AstNode **bodies, size_t arm_count, bool has_default, AstNode *default_body, size_t line, size_t column)
Definition preprocessor.c:32
void apply_lib_import(AstNode *func_node, const char *lib_name)
Definition preprocessor.c:60
AstNode * create_syscall_expr(ArenaAllocator *arena, Expr **args, size_t count, size_t line, size_t col)
Definition expr.c:198
AstNode * create_cast_expr(ArenaAllocator *arena, Expr *type, Expr *castee, size_t line, size_t col)
Definition expr.c:175
LiteralType
Definition ast.h:85
@ LITERAL_DOUBLE
Definition ast.h:89
@ LITERAL_IDENT
Definition ast.h:86
@ LITERAL_INT
Definition ast.h:87
@ LITERAL_BOOL
Definition ast.h:92
@ LITERAL_NULL
Definition ast.h:93
@ LITERAL_STRING
Definition ast.h:90
@ LITERAL_CHAR
Definition ast.h:91
@ LITERAL_FLOAT
Definition ast.h:88
AstNode * create_array_expr(ArenaAllocator *arena, Expr **elements, size_t element_count, size_t line, size_t column)
Definition expr.c:129
AstNode * create_print_stmt(ArenaAllocator *arena, Expr **expressions, size_t expr_count, bool ln, size_t line, size_t column)
Definition stmt.c:175
AstNode * create_resolution_type(ArenaAllocator *arena, char **parts, size_t part_count, size_t line, size_t column)
Definition type.c:32
AstNode * create_literal_expr(ArenaAllocator *arena, LiteralType lit_type, void *value, size_t line, size_t column)
Definition expr.c:9
AstNode * create_array_type(ArenaAllocator *arena, AstNode *element_type, Expr *size, size_t line, size_t column)
Definition type.c:17
AstNode * create_ast_node(ArenaAllocator *arena, NodeType type, NodeCategory category, size_t line, size_t column)
Definition ast.c:18
AstNode * create_pointer_type(ArenaAllocator *arena, AstNode *pointee_type, size_t line, size_t column)
Definition type.c:11
Expr * create_spread_expr(ArenaAllocator *arena, Expr *expr, size_t line, size_t col)
Definition expr.c:225
AstNode * create_type_node(ArenaAllocator *arena, NodeType type, size_t line, size_t column)
Definition ast.c:56
AstNode * create_block_stmt(ArenaAllocator *arena, AstNode **statements, size_t stmt_count, size_t line, size_t column)
Definition stmt.c:167
AstNode * create_func_decl_stmt(ArenaAllocator *arena, const char *name, const char *doc_comment, char **param_names, AstNode **param_types, size_t param_count, AstNode *return_type, bool is_public, bool is_static, bool returns_ownership, bool takes_ownership, bool forward_declared, AstNode *body, size_t line, size_t column)
Definition stmt.c:34
AstNode * create_free_expr(ArenaAllocator *arena, Expr *ptr, size_t line, size_t col)
Definition expr.c:168
AstNode * create_loop_stmt(ArenaAllocator *arena, Expr *condition, Expr *optional, AstNode *body, size_t line, size_t column)
Definition stmt.c:148
AstNode * create_enum_decl_stmt(ArenaAllocator *arena, const char *name, const char *doc_comment, char **members, size_t member_count, bool is_public, size_t line, size_t column)
Definition stmt.c:98
AstNode * create_stmt_node(ArenaAllocator *arena, NodeType type, size_t line, size_t column)
Definition ast.c:44
AstNode * create_program_node(ArenaAllocator *arena, AstNode **statements, size_t stmt_count, size_t line, size_t column)
Definition stmt.c:5
AstNode * create_ternary_expr(ArenaAllocator *arena, Expr *condition, Expr *then_expr, Expr *else_expr, size_t line, size_t column)
Definition expr.c:94
void apply_dll_import(AstNode *func_node, const char *dll_name, const char *callconv)
Definition preprocessor.c:53
AstNode * create_expr_stmt(ArenaAllocator *arena, Expr *expression, size_t line, size_t column)
Definition stmt.c:13
AstNode * create_binary_expr(ArenaAllocator *arena, BinaryOp op, Expr *left, Expr *right, size_t line, size_t column)
Definition expr.c:59
AstNode * create_system_expr(ArenaAllocator *arena, Expr *command, size_t line, size_t col)
Definition expr.c:191
BinaryOp
Definition ast.h:97
@ BINOP_AND
Definition ast.h:110
@ BINOP_GE
Definition ast.h:109
@ BINOP_BIT_XOR
Definition ast.h:114
@ BINOP_POW
Definition ast.h:103
@ BINOP_LT
Definition ast.h:106
@ BINOP_LE
Definition ast.h:107
@ BINOP_MOD
Definition ast.h:102
@ BINOP_BIT_OR
Definition ast.h:113
@ BINOP_SUB
Definition ast.h:99
@ BINOP_DIV
Definition ast.h:101
@ BINOP_GT
Definition ast.h:108
@ BINOP_RANGE
Definition ast.h:117
@ BINOP_EQ
Definition ast.h:104
@ BINOP_SHR
Definition ast.h:116
@ BINOP_BIT_AND
Definition ast.h:112
@ BINOP_MUL
Definition ast.h:100
@ BINOP_SHL
Definition ast.h:115
@ BINOP_OR
Definition ast.h:111
@ BINOP_NE
Definition ast.h:105
@ BINOP_ADD
Definition ast.h:98
AstNode * create_return_stmt(ArenaAllocator *arena, Expr *value, size_t line, size_t column)
Definition stmt.c:160
AstNode * create_switch_stmt(ArenaAllocator *arena, AstNode *condition, AstNode **cases, size_t case_count, AstNode *default_case, size_t line, size_t column)
Definition stmt.c:200
AstNode * create_break_continue_stmt(ArenaAllocator *arena, bool is_continue, size_t line, size_t column)
Definition stmt.c:185
AstNode * create_alloc_expr(ArenaAllocator *arena, Expr *size, size_t line, size_t col)
Definition expr.c:152
AstNode * create_struct_decl_stmt(ArenaAllocator *arena, const char *name, const char *doc_comment, AstNode **public_members, size_t public_count, AstNode **private_members, size_t private_count, bool is_public, size_t line, size_t column)
Definition stmt.c:57
AstNode * create_infinite_loop_stmt(ArenaAllocator *arena, AstNode *body, size_t line, size_t column)
Definition stmt.c:124
AstNode * create_memcpy_expr(ArenaAllocator *arena, Expr *to, Expr *from, Expr *size, size_t line, size_t col)
Definition expr.c:159
AstNode * create_field_decl_stmt(ArenaAllocator *arena, const char *name, const char *doc_comment, AstNode *type, AstNode *function, bool is_public, bool is_static, size_t line, size_t column)
Definition stmt.c:74
AstNode Expr
Definition ast.h:542
AstNode * create_basic_type(ArenaAllocator *arena, const char *name, size_t line, size_t column)
Definition type.c:5
AstNode * create_spread_decl_stmt(ArenaAllocator *arena, AstNode *type, bool via_pointer, bool is_public, size_t line, size_t column)
Definition stmt.c:88
AstNode * create_preprocessor_node(ArenaAllocator *arena, NodeType type, NodeCategory category, size_t line, size_t column)
Definition ast.c:3
AstNode * create_module_node(ArenaAllocator *arena, const char *name, const char *doc_comment, int potions, AstNode **body, size_t body_count, size_t line, size_t column)
Definition preprocessor.c:5
AstNode * create_identifier_expr(ArenaAllocator *arena, const char *name, size_t line, size_t column)
Definition expr.c:52
AstNode * create_grouping_expr(ArenaAllocator *arena, Expr *expr, size_t line, size_t column)
Definition expr.c:122
AstNode * create_case_stmt(ArenaAllocator *arena, AstNode **values, size_t value_count, AstNode *body, size_t line, size_t column)
Definition stmt.c:226
AstNode * create_link_node(ArenaAllocator *arena, const char *lib_name, size_t line, size_t column)
Definition preprocessor.c:45
AstNode Type
Definition ast.h:544
AstNode * create_deref_expr(ArenaAllocator *arena, Expr *object, size_t line, size_t col)
Definition expr.c:138
AstNode * create_use_node(ArenaAllocator *arena, const char *module_name, const char *alias, size_t line, size_t column)
Definition preprocessor.c:23
AstNode * create_if_stmt(ArenaAllocator *arena, Expr *condition, AstNode *then_stmt, AstNode **elif_stmts, int elif_count, AstNode *else_stmt, size_t line, size_t column)
Definition stmt.c:111
AstNode * create_expr_node(ArenaAllocator *arena, NodeType type, size_t line, size_t column)
Definition ast.c:32
AstNode * create_input_expr(ArenaAllocator *arena, Expr *type, Expr *msg, size_t line, size_t col)
Definition expr.c:183
UnaryOp
Definition ast.h:121
@ UNOP_POS
Definition ast.h:124
@ UNOP_POST_DEC
Definition ast.h:129
@ UNOP_PRE_INC
Definition ast.h:126
@ UNOP_NEG
Definition ast.h:123
@ UNOP_NOT
Definition ast.h:122
@ UNOP_DEREF
Definition ast.h:130
@ UNOP_POST_INC
Definition ast.h:128
@ UNOP_BIT_NOT
Definition ast.h:125
@ UNOP_PRE_DEC
Definition ast.h:127
@ UNOP_ADDR
Definition ast.h:131
AstNode * create_for_loop_stmt(ArenaAllocator *arena, AstNode **initializers, size_t init_count, Expr *condition, Expr *optional, AstNode *body, size_t line, size_t column)
Definition stmt.c:135
AstNode * create_defer_stmt(ArenaAllocator *arena, AstNode *statement, size_t line, size_t column)
Definition stmt.c:193
Expr * create_struct_expr(ArenaAllocator *arena, char *name, char **field_names, AstNode **field_values, size_t field_count, int line, int col)
Definition expr.c:214
NodeType
Definition ast.h:18
@ AST_STMT_EXPRESSION
Definition ast.h:53
@ AST_EXPR_INDEX
Definition ast.h:34
@ AST_STMT_ENUM
Definition ast.h:64
@ AST_EXPR_BINARY
Definition ast.h:28
@ AST_EXPR_LITERAL
Definition ast.h:26
@ AST_STMT_IF
Definition ast.h:57
@ AST_STMT_LOOP
Definition ast.h:58
@ AST_TYPE_RESOLUTION
Definition ast.h:75
@ AST_STMT_CASE
Definition ast.h:71
@ AST_TYPE_BASIC
Definition ast.h:76
@ AST_EXPR_GROUPING
Definition ast.h:35
@ AST_EXPR_RANGE
Definition ast.h:36
@ AST_STMT_DEFER
Definition ast.h:68
@ AST_EXPR_UNARY
Definition ast.h:29
@ AST_STMT_FUNCTION
Definition ast.h:56
@ AST_EXPR_ARRAY
Definition ast.h:37
@ AST_EXPR_CALL
Definition ast.h:30
@ AST_EXPR_MEMBER
Definition ast.h:33
@ AST_STMT_RETURN
Definition ast.h:60
@ AST_TYPE_STRUCT
Definition ast.h:80
@ AST_PREPROCESSOR_USE
Definition ast.h:21
@ AST_STMT_SPREAD_DECL
Definition ast.h:67
@ AST_PREPROCESSOR_OS
Definition ast.h:22
@ AST_EXPR_SPREAD
Definition ast.h:49
@ AST_TYPE_ENUM
Definition ast.h:81
@ AST_EXPR_IDENTIFIER
Definition ast.h:27
@ AST_PROGRAM
Definition ast.h:52
@ AST_EXPR_ASSIGNMENT
Definition ast.h:31
@ AST_STMT_FIELD_DECL
Definition ast.h:66
@ AST_EXPR_SYSCALL
Definition ast.h:47
@ AST_TYPE_FUNCTION
Definition ast.h:79
@ AST_EXPR_DEREF
Definition ast.h:38
@ AST_TYPE_ARRAY
Definition ast.h:78
@ AST_EXPR_TERNARY
Definition ast.h:32
@ AST_STMT_BLOCK
Definition ast.h:61
@ AST_EXPR_INPUT
Definition ast.h:44
@ AST_STMT_STRUCT
Definition ast.h:65
@ AST_EXPR_ALLOC
Definition ast.h:40
@ AST_STMT_SWITCH
Definition ast.h:69
@ AST_STMT_PRINT
Definition ast.h:62
@ AST_TYPE_POINTER
Definition ast.h:77
@ AST_EXPR_STRUCT
Definition ast.h:48
@ AST_STMT_DEFAULT
Definition ast.h:72
@ AST_STMT_IMPL
Definition ast.h:70
@ AST_EXPR_CAST
Definition ast.h:43
@ AST_STMT_CONST_DECL
Definition ast.h:55
@ AST_STMT_BREAK_CONTINUE
Definition ast.h:59
@ AST_PREPROCESSOR_MODULE
Definition ast.h:20
@ AST_EXPR_MEMCPY
Definition ast.h:41
@ AST_PREPROCESSOR_LINK
Definition ast.h:23
@ AST_EXPR_FREE
Definition ast.h:42
@ AST_EXPR_SYSTEM
Definition ast.h:46
@ AST_STMT_VAR_DECL
Definition ast.h:54
@ AST_STMT_MODULE
Definition ast.h:63
@ AST_EXPR_SIZEOF
Definition ast.h:45
@ AST_EXPR_ADDR
Definition ast.h:39
AstNode * create_function_type(ArenaAllocator *arena, AstNode **param_types, size_t param_count, AstNode *return_type, size_t line, size_t column)
Definition type.c:24
AstNode * create_default_stmt(ArenaAllocator *arena, AstNode *body, size_t line, size_t column)
Definition stmt.c:236
AstNode Preprocessor
Definition ast.h:541
AstNode * create_call_expr(ArenaAllocator *arena, Expr *callee, Expr **args, size_t arg_count, size_t line, size_t column)
Definition expr.c:76
AstNode * create_unary_expr(ArenaAllocator *arena, UnaryOp op, Expr *operand, size_t line, size_t column)
Definition expr.c:68
AstNode * create_index_expr(ArenaAllocator *arena, Expr *object, Expr *index, size_t line, size_t column)
Definition expr.c:114
NodeCategory
Definition ast.h:134
@ Node_Category_EXPR
Definition ast.h:135
@ Node_Category_TYPE
Definition ast.h:137
@ Node_Category_STMT
Definition ast.h:136
@ Node_Category_PREPROCESSOR
Definition ast.h:138
AstNode * create_var_decl_stmt(ArenaAllocator *arena, const char *name, const char *doc_comment, AstNode *var_type, Expr *initializer, bool is_mutable, bool is_public, size_t line, size_t column)
Definition stmt.c:20
AstNode * create_addr_expr(ArenaAllocator *arena, Expr *object, size_t line, size_t col)
Definition expr.c:145
AstNode * create_member_expr(ArenaAllocator *arena, Expr *object, bool is_compiletime, const char *member, size_t line, size_t column)
Definition expr.c:104
AstNode * create_impl_stmt(ArenaAllocator *arena, char **function_name_list, AstNode **function_type_list, AstNode *body, char **struct_name_list, size_t function_name_count, size_t struct_name_count, size_t line, size_t column)
Definition stmt.c:211
Arena allocator structure.
Definition memory.h:101
Definition ast.h:142
AstNode * condition
Definition ast.h:233
char ** function_name_list
Definition ast.h:477
struct AstNode::@0::@4::@38::@41 expr_stmt
struct AstNode::@0::@4 stmt
struct AstNode::@0::@3::@12::@20 ternary
NodeType type
Definition ast.h:143
struct AstNode::@0::@3::@12::@35 struct_expr
AstNode * from
Definition ast.h:281
struct AstNode::@0::@4::@38::@46 enum_decl
struct AstNode::@0::@3::@12::@23 grouping
struct AstNode::@0::@3::@12::@34 size_of
AstNode * statement
Definition ast.h:464
AstNode ** modules
Definition ast.h:338
bool has_default
Definition ast.h:175
struct AstNode::@0::@4::@38::@48 if_stmt
int elif_count
Definition ast.h:424
struct AstNode::@0::@3::@12::@25 deref
double float_val
Definition ast.h:193
char * member
Definition ast.h:242
const char * module_name
Definition ast.h:166
bool is_compiletime
Definition ast.h:240
bool is_mutable
Definition ast.h:353
bool is_type
Definition ast.h:316
AstNode * to
Definition ast.h:280
char * doc_comment
Definition ast.h:154
size_t column
Definition ast.h:145
void * then_scope
Definition ast.h:427
void * scope
Definition ast.h:161
size_t case_count
Definition ast.h:470
AstNode ** values
Definition ast.h:487
struct AstNode::@0::@4::@38::@55 switch_stmt
const char * file_path
Definition ast.h:158
struct AstNode::@0::@3::@12::@29 free
char ** field_names
Definition ast.h:321
AstNode * element_type
Definition ast.h:513
struct AstNode::@0::@3::@12::@26 addr
struct AstNode::@0::@2::@6::@9 use
AstNode ** bodies
Definition ast.h:173
AstNode * optional
Definition ast.h:434
char ** platforms
Definition ast.h:172
struct AstNode::@0::@5::@59::@65 resolution
size_t private_count
Definition ast.h:364
LiteralType lit_type
Definition ast.h:190
AstNode ** elif_stmts
Definition ast.h:423
struct AstNode::@0::@3::@12::@24 array
size_t part_count
Definition ast.h:526
bool is_static
Definition ast.h:374
AstNode ** args
Definition ast.h:221
size_t param_count
Definition ast.h:398
struct AstNode::@0::@2::@6::@11 link
const char * dll_callconv
Definition ast.h:412
AstNode * value
Definition ast.h:228
size_t member_count
Definition ast.h:388
struct AstNode::@0::@2::@6::@10 os
AstNode * var_type
Definition ast.h:351
AstNode ** function_type_list
Definition ast.h:478
bool via_pointer
Definition ast.h:379
bool takes_ownership
Definition ast.h:404
struct AstNode::@0::@3::@12::@31 input
struct AstNode::@0::@3::@12::@32 _system
struct AstNode::@0::@4::@38::@40 program
AstNode * function
Definition ast.h:372
size_t body_count
Definition ast.h:157
struct AstNode::@0::@3::@12::@17 unary
struct AstNode::@0::@4::@38::@58 default_clause
AstNode * default_body
Definition ast.h:176
int potions
Definition ast.h:155
size_t public_count
Definition ast.h:362
AstNode ** body
Definition ast.h:156
BinaryOp op
Definition ast.h:207
bool is_continue
Definition ast.h:460
size_t init_count
Definition ast.h:437
AstNode * index
Definition ast.h:248
bool is_dll_import
Definition ast.h:409
char ** parts
Definition ast.h:525
struct AstNode::@0::@3::@12::@28 memcpy
size_t element_count
Definition ast.h:259
struct AstNode::@0::@4::@38::@47 func_decl
char * string_val
Definition ast.h:194
AstNode * expr
Definition ast.h:253
struct AstNode::@0::@3::@12::@18 call
char ** struct_name_list
Definition ast.h:479
bool returns_ownership
Definition ast.h:403
union AstNode::@0::@3::@12::@14::@37 value
const char * lib_name
Definition ast.h:180
struct AstNode::@0::@4::@38::@44 field_decl
AstNode * type
Definition ast.h:292
struct AstNode::@0::@5::@59::@61 basic
long long int_val
Definition ast.h:192
AstNode * target
Definition ast.h:227
struct AstNode::@0::@3::@12::@14 literal
AstNode ** param_types
Definition ast.h:397
struct AstNode * default_case
Definition ast.h:471
size_t module_count
Definition ast.h:339
AstNode * then_expr
Definition ast.h:234
const char ** member_names
Definition ast.h:532
struct AstNode::@0::@4::@38::@49 loop_stmt
size_t stmt_count
Definition ast.h:448
struct AstNode::@0::@3::@12::@16 binary
const char * alias
Definition ast.h:167
AstNode * callee
Definition ast.h:220
bool forward_declared
Definition ast.h:405
AstNode * else_stmt
Definition ast.h:425
AstNode * operand
Definition ast.h:215
char char_val
Definition ast.h:195
char ** members
Definition ast.h:387
size_t field_count
Definition ast.h:323
AstNode * command
Definition ast.h:304
bool is_lib_import
Definition ast.h:415
AstNode * size
Definition ast.h:275
char * name
Definition ast.h:153
struct AstNode::@0::@3::@12::@15 identifier
struct AstNode::@0::@3::@12::@27 alloc
AstNode * castee
Definition ast.h:293
AstNode ** field_value
Definition ast.h:322
struct AstNode::@0::@4::@38::@42 var_decl
bool bool_val
Definition ast.h:196
AstNode * expression
Definition ast.h:344
size_t value_count
Definition ast.h:488
NodeCategory category
Definition ast.h:146
void * else_scope
Definition ast.h:428
struct AstNode::@0::@4::@38::@51 block
size_t arm_count
Definition ast.h:174
AstNode * return_type
Definition ast.h:399
struct AstNode::@0::@4::@38::@57 case_clause
AstNode ** elements
Definition ast.h:258
AstNode * left
Definition ast.h:208
AstNode ** member_types
Definition ast.h:531
size_t arg_count
Definition ast.h:222
size_t token_count
Definition ast.h:160
char ** param_names
Definition ast.h:396
size_t count
Definition ast.h:310
struct AstNode::@0::@5::@59::@66 struct_type
AstNode ** expressions
Definition ast.h:454
AstNode * then_stmt
Definition ast.h:422
size_t function_name_count
Definition ast.h:480
AstNode * initializer
Definition ast.h:352
AstNode * msg
Definition ast.h:299
bool ln
Definition ast.h:456
size_t struct_name_count
Definition ast.h:481
struct AstNode::@0::@2 preprocessor
AstNode * ptr
Definition ast.h:287
const char * dll_name
Definition ast.h:410
const char * name
Definition ast.h:349
AstNode * else_expr
Definition ast.h:235
Token * tokens
Definition ast.h:159
AstNode * right
Definition ast.h:209
struct AstNode::@0::@4::@38::@56 impl_stmt
AstNode * body
Definition ast.h:402
struct AstNode::@0::@5::@59::@62 pointer
struct AstNode::@0::@4::@38::@43 struct_decl
struct AstNode::@0::@4::@38::@52 print_stmt
struct AstNode::@0::@3::@12::@33 syscall
size_t expr_count
Definition ast.h:455
AstNode * pointee_type
Definition ast.h:508
struct AstNode::@0::@3::@12::@30 cast
size_t line
Definition ast.h:144
struct AstNode::@0::@3::@12::@19 assignment
struct AstNode::@0::@4::@38::@50 return_stmt
UnaryOp op
Definition ast.h:214
AstNode ** statements
Definition ast.h:447
struct AstNode::@0::@4::@38::@45 spread_decl
struct AstNode::@0::@3::@12::@36 spread
size_t target_size
Definition ast.h:260
struct AstNode::@0::@4::@38::@54 defer_stmt
AstNode ** public_members
Definition ast.h:361
struct AstNode ** cases
Definition ast.h:469
AstNode ** initializer
Definition ast.h:436
bool is_public
Definition ast.h:354
AstNode * object
Definition ast.h:241
struct AstNode::@0::@4::@38::@53 break_continue
AstNode ** private_members
Definition ast.h:363
struct AstNode::@0::@5 type_data
Represents a single token extracted by the lexer.
Definition lexer.h:151