diff options
Diffstat (limited to 'bootstrap/cgen.c')
| -rw-r--r-- | bootstrap/cgen.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c index 5c64a30..39cbba0 100644 --- a/bootstrap/cgen.c +++ b/bootstrap/cgen.c @@ -50,7 +50,11 @@ pristring(const char *s, u64 n) { extern int isprint(int); pri("\""); for (int i = 0; i < n; ++i) { - if (isprint(s[i])) + if (s[i] == '"') + pri("\\\""); + else if (s[i] == '\\') + pri("\\\\"); + else if (isprint(s[i])) pri("%c", s[i]); else fprintf(outfp, "\\%.3o", s[i]); @@ -699,6 +703,7 @@ genstatic(bool externp, const char *cname, struct var *var) { static void gendecl(struct decl *decl, bool toplevel) { const char *p = fileid2path(decl->span.fileid); + if (decl->_gen) return; switch (decl->t) { case Dfn: pri("#line %d %S\n", decl->span.line, p, (u64)strlen(p)); @@ -718,6 +723,7 @@ gendecl(struct decl *decl, bool toplevel) { case Dtype: case Ddef: case Dtepl: case Dmacro: case Dlabel: break; } + decl->_gen = 1; } static void |