gen/
.clang-format
570 B
.gitignore
30 B
.gitsigners
112 B
LICENSE
1.1 KiB
Makefile
911 B
README
1.8 KiB
ast.c
5.0 KiB
ast.h
15.1 KiB
desugar.c
23.1 KiB
desugar.h
286 B
gen.c
108.5 KiB
gen.h
4.9 KiB
io.c
1.1 KiB
io.h
444 B
limits.h
1.3 KiB
module.c
10.0 KiB
module.h
2.2 KiB
options.c
1.4 KiB
options.h
472 B
parser.c
68.3 KiB
parser.h
942 B
radiance.c
3.7 KiB
ralloc.c
2.0 KiB
ralloc.h
1.1 KiB
resolver.c
109.7 KiB
resolver.h
5.6 KiB
riscv.c
12.0 KiB
riscv.h
12.0 KiB
scanner.c
10.2 KiB
scanner.h
3.2 KiB
strings.c
2.6 KiB
strings.h
407 B
symtab.c
5.7 KiB
symtab.h
4.6 KiB
types.h
1.0 KiB
util.h
1.5 KiB
module.h
raw
| 1 | #ifndef MODULE_H |
| 2 | #define MODULE_H |
| 3 | |
| 4 | #include "ast.h" |
| 5 | #include "limits.h" |
| 6 | #include "parser.h" |
| 7 | #include "symtab.h" |
| 8 | |
| 9 | /* Extension for source files */ |
| 10 | #define SOURCE_EXT ".rad" |
| 11 | |
| 12 | /* Error codes for module loading */ |
| 13 | enum { |
| 14 | MODULE_OK = 0, |
| 15 | MODULE_NOT_FOUND = 1, |
| 16 | MODULE_PARSE_ERROR = 2, |
| 17 | MODULE_TYPE_ERROR = 3, |
| 18 | MODULE_CIRCULAR_DEP = 4 |
| 19 | }; |
| 20 | |
| 21 | /* State of a module in the dependency graph */ |
| 22 | typedef enum { |
| 23 | MODULE_STATE_UNVISITED = 0, |
| 24 | MODULE_STATE_VISITING = 1, |
| 25 | MODULE_STATE_VISITED = 2 |
| 26 | } module_state_t; |
| 27 | |
| 28 | typedef struct module_t module_t; |
| 29 | |
| 30 | struct module_t { |
| 31 | char path[MAX_PATH_LEN]; |
| 32 | char name[MAX_PATH_LEN]; |
| 33 | char qualified[MAX_PATH_LEN]; |
| 34 | attrib_t attribs; |
| 35 | node_t *ast; |
| 36 | char *source; |
| 37 | parser_t parser; |
| 38 | module_state_t state; |
| 39 | scope_t *scope; |
| 40 | symbol_t *default_fn; |
| 41 | bool declared; |
| 42 | bool checked; |
| 43 | bool compiled; |
| 44 | module_t *parent; |
| 45 | module_t *children[MAX_MODULES]; |
| 46 | u8 nchildren; |
| 47 | }; |
| 48 | |
| 49 | typedef struct { |
| 50 | module_t *root; |
| 51 | module_t modules[MAX_MODULES]; |
| 52 | u8 nmodules; |
| 53 | char rootdir[MAX_PATH_LEN]; |
| 54 | } module_manager_t; |
| 55 | |
| 56 | void module_manager_init(module_manager_t *mm, const char *entryfile); |
| 57 | bool module_manager_parse(module_manager_t *mm, int *err); |
| 58 | module_t *module_manager_register(module_manager_t *mm, const char *path); |
| 59 | module_t *module_manager_register_qualified( |
| 60 | module_manager_t *mm, const char *path, const char *qualified |
| 61 | ); |
| 62 | module_t *module_manager_lookup(module_manager_t *mm, const char *path); |
| 63 | module_t *module_manager_lookup_by_name( |
| 64 | module_manager_t *mm, const char *name, u16 length |
| 65 | ); |
| 66 | module_t *module_manager_lookup_by_qualified_name( |
| 67 | module_manager_t *mm, const char *name |
| 68 | ); |
| 69 | module_t *module_manager_find_relative( |
| 70 | module_manager_t *mm, const char *base_path, const char *import_path |
| 71 | ); |
| 72 | bool module_parse(module_t *module, int *err); |
| 73 | void module_qualify(char dest[MAX_QUALIFIED_NAME], node_t *ident); |
| 74 | void module_qualify_str( |
| 75 | char dest[MAX_QUALIFIED_NAME], const char *child, u16 len |
| 76 | ); |
| 77 | void module_path(char dest[MAX_QUALIFIED_NAME], const char *name); |
| 78 | void module_register_test(module_t *mod, node_t *test); |
| 79 | |
| 80 | #endif |