51 lines
837 B
C
51 lines
837 B
C
/********
|
|
* Generate intermediate
|
|
* representation for
|
|
* further target code
|
|
* generation
|
|
********/
|
|
|
|
#include<stdio.h>
|
|
#include<stdlib.h>
|
|
#include"ir.h"
|
|
#include"state.h"
|
|
|
|
void gen_ir(Gen*gen,const PNode*pn,FILE*file)
|
|
{
|
|
if(!pn)
|
|
{
|
|
err_log("NULL PNode passed to gen_ir");
|
|
return;
|
|
}
|
|
|
|
if(!file)
|
|
{
|
|
err_log("NULL FILE* passed to gen_ir");
|
|
return;
|
|
}
|
|
|
|
switch(pn->type)
|
|
{
|
|
|
|
case PCOMMENT:
|
|
printf("; %s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
|
|
break;
|
|
|
|
case PFUNDECL:
|
|
printf("%s:\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
for(size_t i=0;i<pn->pnodes.size;++i)
|
|
gen_ir(gen,vec_at(&pn->pnodes,i,const PNode*),file);
|
|
if(pn->tokens.size>0)
|
|
{
|
|
for(size_t i=0;i<pn->tokens.size;++i)
|
|
printf("%s ",vec_at(&pn->tokens,i,const Tok*)->str.buffer);
|
|
puts("");
|
|
}
|
|
}
|