use Vec<Var> to store variable state
This commit is contained in:
parent
c3dd9d29c2
commit
0760a1ce5b
7
gen.c
7
gen.c
@ -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
6
gen.h
@ -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
11
mem.c
@ -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
4
mem.h
@ -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);
|
||||
|
1
state.c
1
state.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user