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:
| M | compiler.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);