spl

a Simple Programming Language
Log | Files | Refs

commit 5246c1bc8bb53fff55dffeeca75702bbda811f85
parent a7508a7baf1e0c20f8dc4766c1f27ad536b856a9
Author: thing1 <thing1@seacrossedlovers.xyz>
Date:   Sat, 13 Dec 2025 20:22:52 +0000

basic variable support

Diffstat:
Mcback.c | 4++++
Mparse.c | 9++++++++-
Mparse.h | 1+
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;