|
Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
|
Abstract Syntax Tree definitions with documentation comment support. More...
#include <stdbool.h>#include <stddef.h>#include "../c_libs/memory/memory.h"#include "../lexer/lexer.h"

Go to the source code of this file.
Classes | |
| struct | AstNode |
Macros | |
| #define | create_preprocessor(arena, type, line, column) |
| #define | create_expr(arena, type, line, column) create_expr_node(arena, type, line, column) |
| #define | create_stmt(arena, type, line, column) create_stmt_node(arena, type, line, column) |
| #define | create_type(arena, type, line, column) create_type_node(arena, type, line, column) |
Typedefs | |
| typedef struct AstNode | AstNode |
| typedef AstNode | Preprocessor |
| typedef AstNode | Expr |
| typedef AstNode | Stmt |
| typedef AstNode | Type |
Functions | |
| AstNode * | create_preprocessor_node (ArenaAllocator *arena, NodeType type, NodeCategory category, size_t line, size_t column) |
| AstNode * | create_expr_node (ArenaAllocator *arena, NodeType type, size_t line, size_t column) |
| AstNode * | create_stmt_node (ArenaAllocator *arena, NodeType type, size_t line, size_t column) |
| AstNode * | create_type_node (ArenaAllocator *arena, NodeType type, size_t line, size_t column) |
| AstNode * | create_ast_node (ArenaAllocator *arena, NodeType type, NodeCategory category, size_t line, size_t column) |
| 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) |
| AstNode * | create_use_node (ArenaAllocator *arena, const char *module_name, const char *alias, size_t line, size_t column) |
| 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) |
| AstNode * | create_link_node (ArenaAllocator *arena, const char *lib_name, size_t line, size_t column) |
| void | apply_dll_import (AstNode *func_node, const char *dll_name, const char *callconv) |
| void | apply_lib_import (AstNode *func_node, const char *lib_name) |
| AstNode * | create_literal_expr (ArenaAllocator *arena, LiteralType lit_type, void *value, size_t line, size_t column) |
| AstNode * | create_identifier_expr (ArenaAllocator *arena, const char *name, size_t line, size_t column) |
| AstNode * | create_binary_expr (ArenaAllocator *arena, BinaryOp op, Expr *left, Expr *right, size_t line, size_t column) |
| AstNode * | create_unary_expr (ArenaAllocator *arena, UnaryOp op, Expr *operand, size_t line, size_t column) |
| AstNode * | create_call_expr (ArenaAllocator *arena, Expr *callee, Expr **args, size_t arg_count, size_t line, size_t column) |
| AstNode * | create_assignment_expr (ArenaAllocator *arena, Expr *target, Expr *value, size_t line, size_t column) |
| AstNode * | create_ternary_expr (ArenaAllocator *arena, Expr *condition, Expr *then_expr, Expr *else_expr, size_t line, size_t column) |
| AstNode * | create_member_expr (ArenaAllocator *arena, Expr *object, bool is_compiletime, const char *member, size_t line, size_t column) |
| AstNode * | create_index_expr (ArenaAllocator *arena, Expr *object, Expr *index, size_t line, size_t column) |
| AstNode * | create_grouping_expr (ArenaAllocator *arena, Expr *expr, size_t line, size_t column) |
| AstNode * | create_array_expr (ArenaAllocator *arena, Expr **elements, size_t element_count, size_t line, size_t column) |
| AstNode * | create_deref_expr (ArenaAllocator *arena, Expr *object, size_t line, size_t col) |
| AstNode * | create_addr_expr (ArenaAllocator *arena, Expr *object, size_t line, size_t col) |
| AstNode * | create_alloc_expr (ArenaAllocator *arena, Expr *size, size_t line, size_t col) |
| AstNode * | create_memcpy_expr (ArenaAllocator *arena, Expr *to, Expr *from, Expr *size, size_t line, size_t col) |
| AstNode * | create_free_expr (ArenaAllocator *arena, Expr *ptr, size_t line, size_t col) |
| AstNode * | create_cast_expr (ArenaAllocator *arena, Expr *type, Expr *castee, size_t line, size_t col) |
| AstNode * | create_input_expr (ArenaAllocator *arena, Expr *type, Expr *msg, size_t line, size_t col) |
| AstNode * | create_system_expr (ArenaAllocator *arena, Expr *command, size_t line, size_t col) |
| AstNode * | create_syscall_expr (ArenaAllocator *arena, Expr **args, size_t count, size_t line, size_t col) |
| AstNode * | create_sizeof_expr (ArenaAllocator *arena, Expr *object, bool is_type, size_t line, size_t col) |
| Expr * | create_struct_expr (ArenaAllocator *arena, char *name, char **field_names, AstNode **field_values, size_t field_count, int line, int col) |
| Expr * | create_spread_expr (ArenaAllocator *arena, Expr *expr, size_t line, size_t col) |
| AstNode * | create_program_node (ArenaAllocator *arena, AstNode **statements, size_t stmt_count, size_t line, size_t column) |
| AstNode * | create_expr_stmt (ArenaAllocator *arena, Expr *expression, size_t line, size_t column) |
| 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) |
| 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) |
| 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) |
| 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) |
| AstNode * | create_spread_decl_stmt (ArenaAllocator *arena, AstNode *type, bool via_pointer, bool is_public, size_t line, size_t column) |
| 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) |
| 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) |
| AstNode * | create_infinite_loop_stmt (ArenaAllocator *arena, AstNode *body, size_t line, size_t column) |
| 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) |
| AstNode * | create_loop_stmt (ArenaAllocator *arena, Expr *condition, Expr *optional, AstNode *body, size_t line, size_t column) |
| AstNode * | create_return_stmt (ArenaAllocator *arena, Expr *value, size_t line, size_t column) |
| AstNode * | create_block_stmt (ArenaAllocator *arena, AstNode **statements, size_t stmt_count, size_t line, size_t column) |
| AstNode * | create_print_stmt (ArenaAllocator *arena, Expr **expressions, size_t expr_count, bool ln, size_t line, size_t column) |
| AstNode * | create_break_continue_stmt (ArenaAllocator *arena, bool is_continue, size_t line, size_t column) |
| AstNode * | create_defer_stmt (ArenaAllocator *arena, AstNode *statement, size_t line, size_t column) |
| AstNode * | create_switch_stmt (ArenaAllocator *arena, AstNode *condition, AstNode **cases, size_t case_count, AstNode *default_case, size_t line, size_t column) |
| 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) |
| AstNode * | create_case_stmt (ArenaAllocator *arena, AstNode **values, size_t value_count, AstNode *body, size_t line, size_t column) |
| AstNode * | create_default_stmt (ArenaAllocator *arena, AstNode *body, size_t line, size_t column) |
| AstNode * | create_basic_type (ArenaAllocator *arena, const char *name, size_t line, size_t column) |
| AstNode * | create_pointer_type (ArenaAllocator *arena, AstNode *pointee_type, size_t line, size_t column) |
| AstNode * | create_array_type (ArenaAllocator *arena, AstNode *element_type, Expr *size, size_t line, size_t column) |
| AstNode * | create_function_type (ArenaAllocator *arena, AstNode **param_types, size_t param_count, AstNode *return_type, size_t line, size_t column) |
| AstNode * | create_resolution_type (ArenaAllocator *arena, char **parts, size_t part_count, size_t line, size_t column) |
Abstract Syntax Tree definitions with documentation comment support.
| #define create_expr | ( | arena, | |
| type, | |||
| line, | |||
| column | |||
| ) | create_expr_node(arena, type, line, column) |
| #define create_preprocessor | ( | arena, | |
| type, | |||
| line, | |||
| column | |||
| ) |
| #define create_stmt | ( | arena, | |
| type, | |||
| line, | |||
| column | |||
| ) | create_stmt_node(arena, type, line, column) |
| #define create_type | ( | arena, | |
| type, | |||
| line, | |||
| column | |||
| ) | create_type_node(arena, type, line, column) |
| typedef AstNode Preprocessor |
| enum BinaryOp |
| enum LiteralType |
| enum NodeCategory |
| enum NodeType |
| enum UnaryOp |
| void apply_dll_import | ( | AstNode * | func_node, |
| const char * | dll_name, | ||
| const char * | callconv | ||
| ) |
| void apply_lib_import | ( | AstNode * | func_node, |
| const char * | lib_name | ||
| ) |
| AstNode * create_addr_expr | ( | ArenaAllocator * | arena, |
| Expr * | object, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_alloc_expr | ( | ArenaAllocator * | arena, |
| Expr * | size, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_array_expr | ( | ArenaAllocator * | arena, |
| Expr ** | elements, | ||
| size_t | element_count, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_array_type | ( | ArenaAllocator * | arena, |
| AstNode * | element_type, | ||
| Expr * | size, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_assignment_expr | ( | ArenaAllocator * | arena, |
| Expr * | target, | ||
| Expr * | value, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_ast_node | ( | ArenaAllocator * | arena, |
| NodeType | type, | ||
| NodeCategory | category, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_basic_type | ( | ArenaAllocator * | arena, |
| const char * | name, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_binary_expr | ( | ArenaAllocator * | arena, |
| BinaryOp | op, | ||
| Expr * | left, | ||
| Expr * | right, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_block_stmt | ( | ArenaAllocator * | arena, |
| AstNode ** | statements, | ||
| size_t | stmt_count, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_break_continue_stmt | ( | ArenaAllocator * | arena, |
| bool | is_continue, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_call_expr | ( | ArenaAllocator * | arena, |
| Expr * | callee, | ||
| Expr ** | args, | ||
| size_t | arg_count, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_case_stmt | ( | ArenaAllocator * | arena, |
| AstNode ** | values, | ||
| size_t | value_count, | ||
| AstNode * | body, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_cast_expr | ( | ArenaAllocator * | arena, |
| Expr * | type, | ||
| Expr * | castee, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_default_stmt | ( | ArenaAllocator * | arena, |
| AstNode * | body, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_defer_stmt | ( | ArenaAllocator * | arena, |
| AstNode * | statement, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_deref_expr | ( | ArenaAllocator * | arena, |
| Expr * | object, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| 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 | ||
| ) |
| AstNode * create_expr_node | ( | ArenaAllocator * | arena, |
| NodeType | type, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_expr_stmt | ( | ArenaAllocator * | arena, |
| Expr * | expression, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| 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 | ||
| ) |
| 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 | ||
| ) |
| AstNode * create_free_expr | ( | ArenaAllocator * | arena, |
| Expr * | ptr, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| 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 | ||
| ) |
| AstNode * create_function_type | ( | ArenaAllocator * | arena, |
| AstNode ** | param_types, | ||
| size_t | param_count, | ||
| AstNode * | return_type, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_grouping_expr | ( | ArenaAllocator * | arena, |
| Expr * | expr, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_identifier_expr | ( | ArenaAllocator * | arena, |
| const char * | name, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| 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 | ||
| ) |
| 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 | ||
| ) |
| AstNode * create_index_expr | ( | ArenaAllocator * | arena, |
| Expr * | object, | ||
| Expr * | index, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_infinite_loop_stmt | ( | ArenaAllocator * | arena, |
| AstNode * | body, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_input_expr | ( | ArenaAllocator * | arena, |
| Expr * | type, | ||
| Expr * | msg, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_link_node | ( | ArenaAllocator * | arena, |
| const char * | lib_name, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_literal_expr | ( | ArenaAllocator * | arena, |
| LiteralType | lit_type, | ||
| void * | value, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_loop_stmt | ( | ArenaAllocator * | arena, |
| Expr * | condition, | ||
| Expr * | optional, | ||
| AstNode * | body, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_member_expr | ( | ArenaAllocator * | arena, |
| Expr * | object, | ||
| bool | is_compiletime, | ||
| const char * | member, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_memcpy_expr | ( | ArenaAllocator * | arena, |
| Expr * | to, | ||
| Expr * | from, | ||
| Expr * | size, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| 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 | ||
| ) |
| 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 | ||
| ) |
| AstNode * create_pointer_type | ( | ArenaAllocator * | arena, |
| AstNode * | pointee_type, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_preprocessor_node | ( | ArenaAllocator * | arena, |
| NodeType | type, | ||
| NodeCategory | category, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_print_stmt | ( | ArenaAllocator * | arena, |
| Expr ** | expressions, | ||
| size_t | expr_count, | ||
| bool | ln, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_program_node | ( | ArenaAllocator * | arena, |
| AstNode ** | statements, | ||
| size_t | stmt_count, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_resolution_type | ( | ArenaAllocator * | arena, |
| char ** | parts, | ||
| size_t | part_count, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_return_stmt | ( | ArenaAllocator * | arena, |
| Expr * | value, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_sizeof_expr | ( | ArenaAllocator * | arena, |
| Expr * | object, | ||
| bool | is_type, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_spread_decl_stmt | ( | ArenaAllocator * | arena, |
| AstNode * | type, | ||
| bool | via_pointer, | ||
| bool | is_public, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| Expr * create_spread_expr | ( | ArenaAllocator * | arena, |
| Expr * | expr, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_stmt_node | ( | ArenaAllocator * | arena, |
| NodeType | type, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| 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 | ||
| ) |
| Expr * create_struct_expr | ( | ArenaAllocator * | arena, |
| char * | name, | ||
| char ** | field_names, | ||
| AstNode ** | field_values, | ||
| size_t | field_count, | ||
| int | line, | ||
| int | col | ||
| ) |
| AstNode * create_switch_stmt | ( | ArenaAllocator * | arena, |
| AstNode * | condition, | ||
| AstNode ** | cases, | ||
| size_t | case_count, | ||
| AstNode * | default_case, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_syscall_expr | ( | ArenaAllocator * | arena, |
| Expr ** | args, | ||
| size_t | count, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_system_expr | ( | ArenaAllocator * | arena, |
| Expr * | command, | ||
| size_t | line, | ||
| size_t | col | ||
| ) |
| AstNode * create_ternary_expr | ( | ArenaAllocator * | arena, |
| Expr * | condition, | ||
| Expr * | then_expr, | ||
| Expr * | else_expr, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_type_node | ( | ArenaAllocator * | arena, |
| NodeType | type, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_unary_expr | ( | ArenaAllocator * | arena, |
| UnaryOp | op, | ||
| Expr * | operand, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| AstNode * create_use_node | ( | ArenaAllocator * | arena, |
| const char * | module_name, | ||
| const char * | alias, | ||
| size_t | line, | ||
| size_t | column | ||
| ) |
| 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 | ||
| ) |