diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-02-18 02:22:31 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-02-18 02:22:31 -0500 |
| commit | 6d54150755a3addd248f329851d463745cbdb847 (patch) | |
| tree | 4f4a3156b59ee5101cf7527854435b84f94de6ba | |
| parent | 0d3022b34a79e3b2cecd6136e3c90f69881f1016 (diff) | |
Split module code into header/c file
| -rw-r--r-- | compile.c | 33 | ||||
| -rw-r--r-- | compile.h | 6 | ||||
| -rw-r--r-- | nextlang.c | 12 |
3 files changed, 30 insertions, 21 deletions
@@ -685,7 +685,7 @@ CORD compile_type_info(env_t *env, type_t *t) } } -CORD compile_file(ast_t *ast) +module_code_t compile_file(ast_t *ast) { env_t *env = new_compilation_unit(); CORD_appendf(&env->code->imports, "#include \"nextlang.h\"\n"); @@ -697,20 +697,23 @@ CORD compile_file(ast_t *ast) bind_statement(env, stmt->ast); } - return CORD_all( - // CORD_asprintf("#line 0 %r\n", Str__quoted(f->filename, false)), - "// Generated code:\n", - env->code->imports, "\n", - env->code->typedefs, "\n", - env->code->typecode, "\n", - env->code->staticdefs, "\n", - env->code->funcs, "\n", - env->code->typeinfos, "\n", - "\n" - "static void $load(void) {\n", - env->code->main, - "}\n" - ); + return (module_code_t){ + .header=CORD_all( + // CORD_asprintf("#line 0 %r\n", Str__quoted(ast->file->filename, false)), + env->code->imports, "\n", + env->code->typedefs, "\n", + env->code->typecode, "\n"), + .c_file=CORD_all( + // CORD_asprintf("#line 0 %r\n", Str__quoted(ast->file->filename, false)), + env->code->staticdefs, "\n", + env->code->funcs, "\n", + env->code->typeinfos, "\n", + "\n" + "static void $load(void) {\n", + env->code->main, + "}\n" + ), + }; } // vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0 @@ -7,7 +7,11 @@ #include "util.h" #include "environment.h" -CORD compile_file(ast_t *ast); +typedef struct { + CORD header, c_file; +} module_code_t; + +module_code_t compile_file(ast_t *ast); CORD compile_type_ast(env_t *env, type_ast_t *t); CORD compile(env_t *env, ast_t *ast); CORD compile_statement(env_t *env, ast_t *ast); @@ -44,13 +44,15 @@ int main(int argc, char *argv[]) fclose(out); } - CORD module = compile_file(ast); + module_code_t module = compile_file(ast); CORD program = CORD_all( - // CORD_asprintf("#line 0 %r\n", Str__quoted(f->filename, false)), - "// Generated code:\n", - module, - "\n" + "// File: ", f->filename, ".h\n", + module.header, + "\n", + "// File: ", f->filename, ".c\n", + module.c_file, + "\n", "int main(int argc, const char *argv[]) {\n" "(void)argc;\n" "(void)argv;\n" |
