pass Gen to all code generators
This commit is contained in:
parent
0760a1ce5b
commit
49e6954094
34
ir.c
34
ir.c
@ -10,7 +10,7 @@
|
||||
#include"ir.h"
|
||||
#include"state.h"
|
||||
|
||||
void gen_ir(PNode*pn,FILE*file)
|
||||
void gen_ir(Gen*gen,PNode*pn,FILE*file)
|
||||
{
|
||||
if(!pn)
|
||||
{
|
||||
@ -24,37 +24,27 @@ void gen_ir(PNode*pn,FILE*file)
|
||||
return;
|
||||
}
|
||||
|
||||
/* if(pn->type<=PCALL) */
|
||||
/* printf("; %s\n",partype_names[pn->type]); */
|
||||
switch(pn->type)
|
||||
{
|
||||
|
||||
case PEMPTY:
|
||||
goto recurse_nofinal;
|
||||
break;
|
||||
|
||||
case PCOMMENT:
|
||||
printf("; %s\n",((Tok*)pn->tokens.buffer)[0].str.buffer);
|
||||
printf("; %s\n",vec_at(&pn->tokens,0,Tok*)->str.buffer);
|
||||
break;
|
||||
|
||||
case PFUNDECL:
|
||||
printf("%s:\n",((Tok*)pn->tokens.buffer)[0].str.buffer);
|
||||
goto recurse_nofinal;
|
||||
break;
|
||||
|
||||
case PBLOCK:
|
||||
goto recurse_nofinal;
|
||||
break;
|
||||
|
||||
case PRET:
|
||||
printf("ld a,%s\n",((Tok*)pn->tokens.buffer)[0].str.buffer);
|
||||
printf("ret\n");
|
||||
printf("%s:\n",vec_at(&pn->tokens,0,Tok*)->str.buffer);
|
||||
break;
|
||||
|
||||
default:
|
||||
recurse_nofinal:
|
||||
for(size_t i=0;i<pn->pnodes.size;++i)
|
||||
gen_ir(((PNode*)pn->pnodes.buffer)+i,file);
|
||||
break;
|
||||
}
|
||||
|
||||
for(size_t i=0;i<pn->pnodes.size;++i)
|
||||
gen_ir(gen,vec_at(&pn->pnodes,i,PNode*),file);
|
||||
if(pn->tokens.size>0)
|
||||
{
|
||||
for(size_t i=0;i<pn->tokens.size;++i)
|
||||
printf("%s ",vec_at(&pn->tokens,i,Tok*)->str.buffer);
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
|
2
ir.h
2
ir.h
@ -8,4 +8,4 @@
|
||||
#include"state.h"
|
||||
#include"mem.h"
|
||||
|
||||
void gen_ir(PNode*pn,FILE*file);
|
||||
void gen_ir(Gen*gen,PNode*pn,FILE*file);
|
||||
|
4
main.c
4
main.c
@ -193,11 +193,11 @@ int main(int argc,char**argv)
|
||||
{
|
||||
|
||||
case M_IR:
|
||||
gen_ir(&state.parser.root,state.outfile);
|
||||
gen_ir(&state.gen,&state.parser.root,state.outfile);
|
||||
break;
|
||||
|
||||
case M_RUN:
|
||||
gen_run(&state.parser.root,state.outfile);
|
||||
gen_run(&state.gen,&state.parser.root,state.outfile);
|
||||
break;
|
||||
|
||||
case M_X86_64:
|
||||
|
6
run.c
6
run.c
@ -5,7 +5,7 @@
|
||||
|
||||
void gen_run_eval(Vec*tokens);
|
||||
|
||||
void gen_run(PNode*pn,FILE*file)
|
||||
void gen_run(Gen*gen,PNode*pn,FILE*file)
|
||||
{
|
||||
if(!pn)
|
||||
{
|
||||
@ -42,7 +42,7 @@ void gen_run(PNode*pn,FILE*file)
|
||||
if(pn->pnodes.size>0)
|
||||
{
|
||||
for(size_t i=0;i<pn->pnodes.size;++i)
|
||||
gen_run(vec_at(&pn->pnodes,i,PNode*),file);
|
||||
gen_run(gen,vec_at(&pn->pnodes,i,PNode*),file);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
@ -63,7 +63,7 @@ void gen_run(PNode*pn,FILE*file)
|
||||
if(pn->pnodes.size>0)
|
||||
{
|
||||
for(size_t i=0;i<pn->pnodes.size;++i)
|
||||
gen_run(vec_at(&pn->pnodes,i,PNode*),file);
|
||||
gen_run(gen,vec_at(&pn->pnodes,i,PNode*),file);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user