PNode funcs
This commit is contained in:
parent
8cc32f8ab6
commit
506eb67e3b
6
mem.c
6
mem.c
|
@ -4,9 +4,9 @@ Var var_new(void)
|
|||
{
|
||||
Var v={
|
||||
.name=NULL,
|
||||
.type=I32,
|
||||
.location=STACK,
|
||||
.regnum=0,
|
||||
/* .type=I32, */
|
||||
/* .location=STACK, */
|
||||
/* .regnum=0, */
|
||||
};
|
||||
return v;
|
||||
}
|
||||
|
|
13
mem.h
13
mem.h
|
@ -40,12 +40,19 @@ typedef union Mem
|
|||
typedef struct Var
|
||||
{
|
||||
char*name;
|
||||
VTYPE type;
|
||||
VLOC location;
|
||||
size_t regnum; // REG: which register?
|
||||
// VTYPE type;
|
||||
// VLOC location;
|
||||
// size_t regnum; // REG: which register?
|
||||
size_t stackloc; // STACK: rsp-???
|
||||
} Var;
|
||||
|
||||
// Variable descriptor
|
||||
typedef struct Func
|
||||
{
|
||||
char*name;
|
||||
// VTYPE type;
|
||||
} Func;
|
||||
|
||||
Var var_new(void);
|
||||
void var_free(Var*v);
|
||||
void var_set_fromtoken(Var*v,Tok*t);
|
||||
|
|
37
pnode.c
37
pnode.c
|
@ -26,9 +26,10 @@ void parser_free(Parser*p)
|
|||
PNode pnode_new(void)
|
||||
{
|
||||
PNode n={
|
||||
.pnodes=vec_new(sizeof(PNode)), // Empty Vec
|
||||
.tokens=vec_new(sizeof(Tok)), // Empty Vec
|
||||
.vars=vec_new(sizeof(Var)), // Empty Vec
|
||||
.pnodes=vec_new(sizeof(PNode)),
|
||||
.tokens=vec_new(sizeof(Tok)),
|
||||
.vars=vec_new(sizeof(Var)),
|
||||
.funcs=vec_new(sizeof(Func)),
|
||||
.parentnode=NULL,
|
||||
.type=PEMPTY,
|
||||
.firstline=0,
|
||||
|
@ -42,27 +43,33 @@ void pnode_free(PNode*n)
|
|||
{
|
||||
if(!n)return;
|
||||
|
||||
for(size_t i=0;i<n->pnodes.size;++i)
|
||||
pnode_free(vec_at(&n->pnodes,i,PNode*));
|
||||
|
||||
if(n->pnodes.buffer)
|
||||
{
|
||||
pnode_free(vec_at(&n->pnodes,0,PNode*));
|
||||
vec_free(&n->pnodes);
|
||||
}
|
||||
|
||||
if(n->tokens.buffer)
|
||||
{
|
||||
for(size_t i=0;i<n->tokens.size;++i)
|
||||
tok_free(vec_at(&n->tokens,i,Tok*));
|
||||
vec_free(&n->tokens);
|
||||
}
|
||||
vec_free(&n->tokens);
|
||||
|
||||
if(n->vars.buffer)
|
||||
{
|
||||
var_free(vec_at(&n->vars,0,Var*));
|
||||
vec_free(&n->vars);
|
||||
for(size_t i=0;i<n->vars.size;++i)
|
||||
var_free(vec_at(&n->vars,i,Var*));
|
||||
}
|
||||
vec_free(&n->vars);
|
||||
|
||||
if(n->funcs.buffer)
|
||||
{
|
||||
for(size_t i=0;i<n->funcs.size;++i)
|
||||
var_free(vec_at(&n->funcs,i,Var*));
|
||||
}
|
||||
vec_free(&n->funcs);
|
||||
|
||||
if(n->funcs.buffer)
|
||||
vec_free(&n->funcs);
|
||||
|
||||
for(size_t i=0;i<n->pnodes.size;++i)
|
||||
pnode_free(vec_at(&n->pnodes,i,PNode*));
|
||||
vec_free(&n->pnodes);
|
||||
|
||||
}
|
||||
|
||||
|
|
1
pnode.h
1
pnode.h
|
@ -32,6 +32,7 @@ typedef struct PNode
|
|||
Vec tokens;
|
||||
Vec pnodes;
|
||||
Vec vars;
|
||||
Vec funcs;
|
||||
uint32_t type;
|
||||
size_t firstline;
|
||||
size_t stacksize;
|
||||
|
|
6
x86_64.c
6
x86_64.c
|
@ -68,9 +68,9 @@ void gen_x86_64(Gen*gen,const PNode*pn,FILE*file)
|
|||
((PNode*)gen->stackptr)->stacksize+=4;
|
||||
Var var={
|
||||
.name=vec_at(&pn->tokens,0,const Tok*)->str.buffer,
|
||||
.type=I32,
|
||||
.location=STACK,
|
||||
.regnum=0,
|
||||
/* .type=I32, */
|
||||
/* .location=STACK, */
|
||||
/* .regnum=0, */
|
||||
.stackloc=gen->stackptr->stacksize,
|
||||
};
|
||||
vec_push((Vec*)&gen->stackptr->vars,&var);
|
||||
|
|
Loading…
Reference in New Issue
Block a user