commit 5246c1bc8bb53fff55dffeeca75702bbda811f85
parent a7508a7baf1e0c20f8dc4766c1f27ad536b856a9
Author: thing1 <thing1@seacrossedlovers.xyz>
Date: Sat, 13 Dec 2025 20:22:52 +0000
basic variable support
Diffstat:
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/cback.c b/cback.c
@@ -61,6 +61,10 @@ compilerexpr_C(rexpr *r, FILE *f) {
compiletype_C(r->type, f);
fprintf(f, " v%d = %lf;\n", vid++, r->f);
return vid - 1;
+ case NAME:
+ compiletype_C(r->type, f);
+ fprintf(f, " v%d = %s;\n", vid++, r->name);
+ return vid - 1;
}
if (isbin(r)) {
diff --git a/parse.c b/parse.c
@@ -29,6 +29,7 @@ getpres(tok t) {
case INT:
case FLOAT:
+ case NAME:
return 6;
case OBRACE:
return 8;
@@ -109,19 +110,25 @@ parsesimple(tok *start, tok *end, tok *lowest, mctx *ctx) {
switch (lowest->op) {
case INT:
case FLOAT:
+ case NAME:
if (start != end) {
parserErr("Trailing expression");
return NULL;
}
e->op = lowest->op;
- e->n = lowest->n;
+ e->n = lowest->n; /* this is okay as n is 64 bits so any pointer types fit here */
switch (e->op) {
case INT:
+ /* TODO make this use smol ints when possible */
e->type = mkbasictype("i64", ctx);
break;
case FLOAT:
e->type = mkbasictype("f64", ctx);
break;
+ case NAME:
+ /* TODO make this lookup the var and assign the type*/
+ e->type = mkbasictype("i64", ctx);
+ break;
}
break;
case OBRACE:
diff --git a/parse.h b/parse.h
@@ -36,6 +36,7 @@ typedef struct rexpr {
/* litterals */
uint64_t n;
double f;
+ char *name;
};
} rexpr;