pass Gen to all code generators

This commit is contained in:
corey 2023-11-10 05:34:54 -06:00
parent 0760a1ce5b
commit 49e6954094
5 changed files with 19 additions and 29 deletions

34
ir.c
View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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");
}
}

2
run.h
View File

@ -9,4 +9,4 @@
#include"state.h"
#include"mem.h"
void gen_run(PNode*pn,FILE*file);
void gen_run(Gen*gen,PNode*pn,FILE*file);