use Vec<Var> to store variable state

This commit is contained in:
corey 2023-11-10 05:21:58 -06:00
parent c3dd9d29c2
commit 0760a1ce5b
6 changed files with 24 additions and 8 deletions

7
gen.c
View File

@ -4,6 +4,11 @@ Gen gen_new(void)
{
Gen gen;
gen.labelno=0;
gen.vars=(Var){0};
gen.vars=vec_new(sizeof(Var));
return gen;
}
void gen_free(Gen*gen)
{
vec_free(&gen->vars);
}

6
gen.h
View File

@ -5,15 +5,13 @@
#pragma once
// #include"ir.h"
// #include"x86_64.h"
// #include"run.h"
#include"mem.h"
typedef struct Gen
{
size_t labelno;
Var vars;
Vec vars; //Vec<Var>
} Gen;
Gen gen_new(void);
void gen_free(Gen*gen);

11
mem.c
View File

@ -3,7 +3,8 @@
Var var_new(void)
{
Var v={
.name=str_new(),
.value.u64=0,
.name=NULL,
.type=I32,
};
return v;
@ -12,5 +13,11 @@ Var var_new(void)
void var_free(Var*v)
{
if(!v)return;
str_free(&v->name);
v->name=NULL;
}
void var_set_fromtoken(Var*v,Tok*t)
{
if(!v||!t)return;
v->name=t->str.buffer;
}

4
mem.h
View File

@ -4,6 +4,7 @@
#include<stdio.h>
#include<stdlib.h>
#include"str.h"
#include"tok.h"
// Data types
enum {I8,I16,I32,I64,U8,U16,U32,U64,U8P,U16P,U32P,U64P};
@ -31,9 +32,10 @@ typedef union Mem
typedef struct Var
{
Mem value;
Str name;
char*name;
uint32_t type;
} Var;
Var var_new(void);
void var_free(Var*v);
void var_set_fromtoken(Var*v,Tok*t);

View File

@ -42,6 +42,7 @@ void state_free(State*st)
lex_free(&st->lexer);
parser_free(&st->parser);
str_free(&st->input_buffer);
gen_free(&st->gen);
}
void state_open_outfile(State*st,char*filename)

View File

@ -13,6 +13,9 @@
#include"mem.h"
#include"err.h"
#include"gen.h"
#include"ir.h"
#include"run.h"
#include"x86_64.h"
// Build architecture types
enum {M_IR,M_RUN,M_X86_64};