diff options
Diffstat (limited to 'src/parse.cff')
| -rw-r--r-- | src/parse.cff | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/parse.cff b/src/parse.cff index 45803bf..b1dca70 100644 --- a/src/parse.cff +++ b/src/parse.cff @@ -316,9 +316,9 @@ fn lex(P *Parser) Tok { if ep.tepl { arg.toks[0].loc = tok.loc; } - P.curexpan = memcpy(xmalloc(sizeof Expan), &Expan { - P.curexpan, {}, arg.toks, - }, sizeof Expan); + let old = P.curexpan; + P.curexpan = xcalloc(sizeof Expan, 1); + *P.curexpan = { old, {}, arg.toks }; return lex(P); } } @@ -1031,7 +1031,8 @@ fn parseexpandtepl(P *Parser, tepl *Tepl) *const Type { P.curexpan, args[0::nparam], tepl.toks, tname, tok.loc, #{tepl?} #t, }; ++P.expanno; - P.curexpan = memcpy(xmalloc(sizeof Expan), &expan, sizeof Expan); + P.curexpan = xcalloc(sizeof Expan,1); + *P.curexpan = expan; ty = parseagg(P, loc, tepl.kind, tname, &decl); } P.peektok = :None; @@ -1415,8 +1416,8 @@ fn parseexpandmacro(P *Parser, loc Loc, mac *Macro) void { P.peektok = :None; expan.toks = c.body; ++P.expanno; - P.curexpan = memcpy(xmalloc(sizeof Expan), &expan, sizeof Expan); - + P.curexpan = xmalloc(sizeof Expan); + *P.curexpan = expan; } fn parseblock0(P *Parser) Block; |