diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-10-22 11:48:55 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-10-30 13:20:42 -0400 |
commit | 525d4db4ea4f7b1562f39863e174f025ccc59a0b (patch) | |
tree | bc435525480fda3003e16571071d782f4810abcb | |
parent | 8ef0e2d0278688473fefac726ddb96fe3cda25e1 (diff) | |
download | roux-525d4db4ea4f7b1562f39863e174f025ccc59a0b.tar.gz |
new function to add constants
-rw-r--r-- | lisc/lisc.h | 1 | ||||
-rw-r--r-- | lisc/util.c | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lisc/lisc.h b/lisc/lisc.h index 4903961..efae900 100644 --- a/lisc/lisc.h +++ b/lisc/lisc.h @@ -326,6 +326,7 @@ void *vnew(ulong, size_t); void vgrow(void *, ulong); Ref newtmp(char *, Fn *); Ref getcon(int64_t, Fn *); +void addcon(Con *, Con *); /* parse.c */ extern OpDesc opdesc[NOp]; diff --git a/lisc/util.c b/lisc/util.c index 53aad55..90fa1bb 100644 --- a/lisc/util.c +++ b/lisc/util.c @@ -192,3 +192,18 @@ getcon(int64_t val, Fn *fn) fn->con[c] = (Con){.type = CNum, .val = val}; return CON(c); } + +void +addcon(Con *c0, Con *c1) +{ + if (c0->type == CUndef) + *c0 = *c1; + else { + if (c1->type == CAddr) { + if (c0->type == CAddr) + diag("addcon: adding two addresses"); + strcpy(c0->label, c1->label); + } + c0->val += c1->val; + } +} |