ext keyword
This commit is contained in:
parent
78f4078880
commit
28779da851
2
lex.c
2
lex.c
|
@ -14,7 +14,7 @@ const char*lextype_names[]={"LNONE","LIDENTIFIER","LINTEGER","LFLOAT","LSTRING",
|
|||
const char*lextype_colors[]={"\033[0m","\033[0m","\033[36m","\033[35m","\033[32m","\033[0m","\033[33m","\033[34m"};
|
||||
const char*lexsubtype_names[]={"LENDSTATEMENT","LASSIGN","LLPAREN","LRPAREN","LLCBRACE","LRCBRACE","LSMINUS","LADD","LSMUL","LSDIV",NULL};
|
||||
static const char*operator_chars="-+*/=;(),.{}<>\\";
|
||||
static const char*keywords[]={"do","false","fn","for","if","let","ret","true","while","call","asm",};
|
||||
static const char*keywords[]={"do","false","fn","for","if","let","ret","true","while","call","asm","ext",};
|
||||
/* static char*operators[]={";","=","+=","-=","*=","/=","+","-","/","*","(",")","{","}"}; */
|
||||
|
||||
Lexer lex_new(void)
|
||||
|
|
6
pnode.c
6
pnode.c
|
@ -7,7 +7,7 @@
|
|||
#include"mem.h"
|
||||
#include"state.h"
|
||||
|
||||
const char*partype_names[]={"PNONE","PEMPTY","PEXPRESSION","PSTATEMENT","PASSIGNMENT","PIF","PCOMMENT","PBLOCK","PWHILE","PVARDECL","PFUNDECL","PRET","PCALL","PASM",NULL};
|
||||
const char*partype_names[]={"PNONE","PEMPTY","PEXPRESSION","PSTATEMENT","PASSIGNMENT","PIF","PCOMMENT","PBLOCK","PWHILE","PVARDECL","PFUNDECL","PRET","PCALL","PASM","PEXTERN",NULL};
|
||||
|
||||
Parser parser_new(void)
|
||||
{
|
||||
|
@ -213,6 +213,7 @@ void parser_parse(Parser*pnode,Vec*tokens)
|
|||
else if(strcmp("let",cur_tok->str.buffer)==0){globalcode();++i;descend(PVARDECL);}
|
||||
else if(strcmp("fn",cur_tok->str.buffer)==0){++i;descend(PFUNDECL);}
|
||||
else if(strcmp("asm",cur_tok->str.buffer)==0){globalcode();++i;descend(PASM);}
|
||||
else if(strcmp("ext",cur_tok->str.buffer)==0){globalcode();++i;descend(PEXTERN);}
|
||||
break;
|
||||
|
||||
case LOPERATOR:
|
||||
|
@ -312,7 +313,8 @@ void parser_parse(Parser*pnode,Vec*tokens)
|
|||
else if(strcmp("let",cur_tok->str.buffer)==0){pnode->mode=PVARDECL;current_node->type=PVARDECL;break;}
|
||||
else if(strcmp("ret",cur_tok->str.buffer)==0){pnode->mode=PRET;current_node->type=PRET;break;}
|
||||
else if(strcmp("fn",cur_tok->str.buffer)==0){pnode->mode=PFUNDECL;current_node->type=PFUNDECL;break;}
|
||||
else if(strcmp("asm",cur_tok->str.buffer)==0){pnode->mode=PFUNDECL;current_node->type=PASM;break;}
|
||||
else if(strcmp("asm",cur_tok->str.buffer)==0){pnode->mode=PASM;current_node->type=PASM;break;}
|
||||
else if(strcmp("ext",cur_tok->str.buffer)==0){pnode->mode=PEXTERN;current_node->type=PEXTERN;break;}
|
||||
}
|
||||
pushcurrenttoken();
|
||||
//vec_pushta(¤t_node->tokens,);
|
||||
|
|
2
pnode.h
2
pnode.h
|
@ -9,7 +9,7 @@
|
|||
|
||||
//#define vec_pushn(v,n) do{PNode x=n;vec_push(v,&x);}while(0)
|
||||
|
||||
typedef enum PARTYPE {PNONE, PEMPTY, PEXPRESSION, PSTATEMENT, PASSIGNMENT, PIF, PCOMMENT, PBLOCK, PWHILE, PVARDECL, PFUNDECL, PRET, PCALL, PASM, } PARTYPE;
|
||||
typedef enum PARTYPE {PNONE, PEMPTY, PEXPRESSION, PSTATEMENT, PASSIGNMENT, PIF, PCOMMENT, PBLOCK, PWHILE, PVARDECL, PFUNDECL, PRET, PCALL, PASM, PEXTERN, } PARTYPE;
|
||||
|
||||
extern const char*partype_names[];
|
||||
|
||||
|
|
9
x86_64.c
9
x86_64.c
|
@ -267,6 +267,15 @@ void gen_x86_64(Gen*gen,PNode*pn,FILE*file)
|
|||
}
|
||||
break;
|
||||
|
||||
case PEXTERN:
|
||||
{
|
||||
if(pn->tokens.size<1)
|
||||
err_log("%u: expected identifier after keyword 'ext'",vec_at(&pn->tokens,0,const Tok*)->line);
|
||||
else
|
||||
fprintf(file,".extern %s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
|
||||
}
|
||||
break;
|
||||
|
||||
case PCOMMENT:
|
||||
fprintf(file,"\t;%s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue
Block a user