Aria

A low-level systems programming language
git clone git://git.m21c.me/Aria.git
Log | Files | Refs | LICENSE

commit a1134bf5b2b742729c80494d01da18b6576ca3d3
parent b3e3524087ab46e9a93a197e839e132af399e32b
Author: m21c  <ho*******@gmail.com>
Date:   Fri, 17 Sep 2021 00:33:37 +0200

replaced makenode() by tokennode() in most cases

Diffstat:
Mcompiler.c | 66++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 34 insertions(+), 32 deletions(-)

diff --git a/compiler.c b/compiler.c @@ -1451,11 +1451,13 @@ getunarysuffix(Source *source) { Node nodebuf[4096]; int nodetop; +#define tokennode(source, lhs) makenode(&(source)->tok, (lhs)) + static Node * -makenode(Node *tok, Node *lhs) { +makenode(Node *orig, Node *lhs) { Node *node = nodebuf + nodetop++; - *node = *tok; + *node = *orig; node->lhs = lhs; node->rhs = NULL; @@ -1924,7 +1926,7 @@ stmtlist(Source *source, int indent, EnvKind envkind) { stmt = exprlist(source, false, NULL); - stmt = makenode(&source->tok, stmt); + stmt = tokennode(source, stmt); stmt->kind = ASTMT; if (!tail) { @@ -1946,7 +1948,7 @@ stmtlist(Source *source, int indent, EnvKind envkind) { popenv(source); } else if (env) { - head = makenode(&source->tok, head); + head = tokennode(source, head); head->kind = ASCOPE; head->u.env = env; env->stmts = head; @@ -2046,7 +2048,7 @@ declaration(Source *source, Type *ty) { } } else { - result = makenode(&source->tok, NULL); + result = tokennode(source, NULL); result->kind = 'T'; result->type = ty; return result; @@ -2129,7 +2131,7 @@ declaration(Source *source, Type *ty) { } finish: - result = makenode(&source->tok, decl->content); + result = tokennode(source, decl->content); result->type = decl->type; result->u.declref = decl; result->loc = decl->loc; @@ -2162,7 +2164,7 @@ readident(Source *source, int flags) { return lhs; } - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); lhs->loc = loc; if (decl) { @@ -2190,12 +2192,12 @@ readrecord(Source *source, int indent, bool isunion) { int key = 0; indent = source->lastindent; - recordnode = makenode(&source->tok, NULL); + recordnode = tokennode(source, NULL); recordnode->kind = getkind(source); gettok(source); if (getkind(source) == 'I') { - recordnode->lhs = makenode(&source->tok, NULL); + recordnode->lhs = tokennode(source, NULL); gettok(source); } else { error(getloc(source), "expected identifier"); @@ -2222,9 +2224,9 @@ readatom(Source *source, int flags) { "there is no left-hand-side for 'is'" ); - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); } else { - lhs = makenode(&source->tok, source->lastis->lhs); + lhs = tokennode(source, source->lastis->lhs); } gettok(source); @@ -2241,7 +2243,7 @@ readatom(Source *source, int flags) { /* unary prefix operators */ if (getunary(source)) { - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); /* TODO(m21c): remove redundant function-call */ lhs->kind = getunary(source); @@ -2324,7 +2326,7 @@ readatom(Source *source, int flags) { case 'N': case 'S': case 'C': - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); if (flags & QCONST) { @@ -2335,7 +2337,7 @@ readatom(Source *source, int flags) { case KFALSE: case KTRUE: - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); lhs->kind = 'N'; lhs->type = prim + TBOOL; lhs->u.u = (uint64_t) (getkind(source) == KTRUE); @@ -2344,7 +2346,7 @@ readatom(Source *source, int flags) { break; case KNULL: - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); lhs->kind = 'N'; lhs->type = maketype(&source->tok.loc, prim + TPTR, prim + TVOID); lhs->u.u = (uint64_t) (getkind(source) == KTRUE); @@ -2358,7 +2360,7 @@ readatom(Source *source, int flags) { break; case KNOT: - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = OLNOT; lhs->lhs = readexpr(source, PRELAT); @@ -2367,7 +2369,7 @@ readatom(Source *source, int flags) { case KBREAK: case KCONTINUE: - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); lhs->kind = getkind(source); gettok(source); @@ -2375,7 +2377,7 @@ readatom(Source *source, int flags) { gettok(source); skipnewline(source); if (getkind(source) == 'I') { - lhs->lhs = makenode(&source->tok, NULL); + lhs->lhs = tokennode(source, NULL); gettok(source); } else { error(getloc(source), "expected identifier"); @@ -2385,7 +2387,7 @@ readatom(Source *source, int flags) { break; case KRETURN: - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = ARETURN; @@ -2393,7 +2395,7 @@ readatom(Source *source, int flags) { gettok(source); skipnewline(source); if (getkind(source) == 'I') { - lhs->lhs = makenode(&source->tok, NULL); + lhs->lhs = tokennode(source, NULL); gettok(source); } else { error(getloc(source), "expected identifier"); @@ -2407,7 +2409,7 @@ readatom(Source *source, int flags) { case KDO: indent = source->lastindent; - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = ADO; lhs->lhs = stmtlist(source, indent, SSCOPE); @@ -2416,7 +2418,7 @@ readatom(Source *source, int flags) { case KLOOP: indent = source->lastindent; - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = ALOOP; lhs->lhs = stmtlist(source, indent, SSCOPE); @@ -2434,7 +2436,7 @@ readatom(Source *source, int flags) { case KWHILE: indent = source->lastindent; - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = AWHILE; lhs->u.payload = readexpr(source, POR); @@ -2444,7 +2446,7 @@ readatom(Source *source, int flags) { case KIF: indent = source->lastindent; - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); lhs->kind = AIF; lhs->u.payload = readexpr(source, POR); @@ -2465,13 +2467,13 @@ readatom(Source *source, int flags) { default: joinerror: error(getloc(source), "expected expression"); - lhs = makenode(&source->tok, NULL); + lhs = tokennode(source, NULL); gettok(source); } /* compound-literal */ if (getkind(source) == '{' && lhs->kind == 'T') { - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); lhs->kind = 'A'; lhs->type = lhs->lhs->type; gettok(source); @@ -2483,7 +2485,7 @@ readatom(Source *source, int flags) { /* unary postfix operators */ while (getunarysuffix(source)) { - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); /* TODO(m21c): remove redundant function-call */ lhs->kind = getunarysuffix(source); @@ -2495,7 +2497,7 @@ readatom(Source *source, int flags) { if (getkind(source) != 'I') error(getloc(source), "expected identifier"); - lhs->rhs = makenode(&source->tok, NULL); + lhs->rhs = tokennode(source, NULL); } else if (getkind(source) == '(') { gettok(source); @@ -2521,7 +2523,7 @@ readatom(Source *source, int flags) { /* 'not'-suffix for the binary 'is'-operator (i.e. 'is not') */ while (getkind(source) == KIS) { - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); gettok(source); lhs->kind = 'O'; @@ -2543,7 +2545,7 @@ readexpr(Source *source, int minprec) { /* only binary expr */ while (getprec(getkind(source)) >= minprec) { - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); gettok(source); skipnewline(source); @@ -2555,7 +2557,7 @@ readexpr(Source *source, int minprec) { switch (getprec(lhs->kind)) { case PRELAT: if (last) { - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); lhs->rhs = lhs->lhs; lhs->kind = OLAND; @@ -2646,7 +2648,7 @@ exprlist(Source *source, bool isparam, Type *paramtype) { lhs->kind = 'T'; } - lhs = makenode(&source->tok, lhs); + lhs = tokennode(source, lhs); lhs->kind = ACOMMA; gettok(source);