Split module code into header/c file
This commit is contained in:
parent
0d3022b34a
commit
6d54150755
33
compile.c
33
compile.c
@ -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);
|
||||
|
12
nextlang.c
12
nextlang.c
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user