make undefined as a constant value lazy

closes #268
This commit is contained in:
Andrew Kelley
2017-04-23 13:22:36 -04:00
parent 2ed47070ef
commit 6de33ded81
11 changed files with 139 additions and 93 deletions

View File

@@ -273,6 +273,7 @@ void ast_print(FILE *f, AstNode *node, int indent) {
struct AstRender {
CodeGen *codegen;
int indent;
int indent_size;
FILE *f;
@@ -924,8 +925,9 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
}
void ast_render(FILE *f, AstNode *node, int indent_size) {
void ast_render(CodeGen *codegen, FILE *f, AstNode *node, int indent_size) {
AstRender ar = {0};
ar.codegen = codegen;
ar.f = f;
ar.indent_size = indent_size;
ar.indent = 0;
@@ -1030,15 +1032,16 @@ static void ast_render_tld_var(AstRender *ar, Buf *name, TldVar *tld_var) {
} else {
Buf buf = BUF_INIT;
buf_resize(&buf, 0);
render_const_value(&buf, var->value);
render_const_value(ar->codegen, &buf, var->value);
fprintf(ar->f, "%s", buf_ptr(&buf));
}
fprintf(ar->f, ";\n");
}
void ast_render_decls(FILE *f, int indent_size, ImportTableEntry *import) {
void ast_render_decls(CodeGen *codegen, FILE *f, int indent_size, ImportTableEntry *import) {
AstRender ar = {0};
ar.codegen = codegen;
ar.f = f;
ar.indent_size = indent_size;
ar.indent = 0;