From bb497eca7c70d2b9162ace7a95b01a5b2d4e59e4 Mon Sep 17 00:00:00 2001 From: TomAwezome Date: Sun, 26 Jul 2020 17:46:51 -0500 Subject: [PATCH] Reformat ParseStatement.CC --- ...o => Zenith-latest-2020-07-26-17_46_39.iso | Bin 34357248 -> 34359296 bytes src/Compiler/ParseStatement.CC | 1720 +++++++++-------- src/Home/FilesRefactored.DD | 1 + 3 files changed, 932 insertions(+), 789 deletions(-) rename Zenith-latest-2020-07-26-22_11_33.iso => Zenith-latest-2020-07-26-17_46_39.iso (99%) diff --git a/Zenith-latest-2020-07-26-22_11_33.iso b/Zenith-latest-2020-07-26-17_46_39.iso similarity index 99% rename from Zenith-latest-2020-07-26-22_11_33.iso rename to Zenith-latest-2020-07-26-17_46_39.iso index 545d5381ed37b28d5fd623f0d204a85180522c9b..7d5ceaf1c6e8c572f7d048950d7425b8c9f47cda 100644 GIT binary patch delta 66370 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 - LexExcept(cc,"Expecting identifier at "); - if (is_extern) { - tmpc=ParseClassNew; - tmpc->str=cc->cur_str; - cc->cur_str=NULL; - HashAdd(tmpc,cc->htc.global_hash_table); - LBts(&tmpc->flags,Cf_EXTERN); - HashSrcFileSet(cc,tmpc); + CHashClass *tmpc, *base_class; + if (cc->token != TK_IDENT) + LexExcept(cc, "Expecting identifier at "); + if (is_extern) + { + tmpc = ParseClassNew; + tmpc->str = cc->cur_str; + cc->cur_str = NULL; + HashAdd(tmpc, cc->htc.global_hash_table); + LBts(&tmpc->flags, Cf_EXTERN); + HashSrcFileSet(cc, tmpc); Lex(cc); - } else { - if (cc->flags&CCF_AOT_COMPILE) - tmpc=HashFind(cc->cur_str,cc->htc.global_hash_table,HTT_CLASS); + } + else + { + if (cc->flags & CCF_AOT_COMPILE) + tmpc = HashFind(cc->cur_str, cc->htc.global_hash_table, HTT_CLASS); else - tmpc=HashSingleTableFind(cc->cur_str,cc->htc.global_hash_table,HTT_CLASS); - if (tmpc) { - if (!Bt(&tmpc->flags,Cf_EXTERN)) - tmpc=NULL; - else if (tmpc->use_count<3) - UnusedExternWarning(cc,tmpc); + tmpc = HashSingleTableFind(cc->cur_str, cc->htc.global_hash_table, HTT_CLASS); + if (tmpc) + { + if (!Bt(&tmpc->flags, Cf_EXTERN)) + tmpc = NULL; + else if (tmpc->use_count < 3) + UnusedExternWarning(cc, tmpc); } - if (tmpc) { + if (tmpc) + { Free(tmpc->src_link); - tmpc->src_link=NULL; + tmpc->src_link = NULL; Free(tmpc->idx); - tmpc->idx=NULL; - } else { - tmpc=ParseClassNew; - tmpc->str=cc->cur_str; - cc->cur_str=NULL; - HashAdd(tmpc,cc->htc.global_hash_table); + tmpc->idx = NULL; } - LBtr(&tmpc->flags,Cf_EXTERN); - if (fsp_flags&FSF_PUBLIC) - tmpc->type|=HTF_PUBLIC; - tmpc->use_count=0; - if (cc->last_U16=='\n') - HashSrcFileSet(cc,tmpc,-1); else - HashSrcFileSet(cc,tmpc,0); - if (Lex(cc)==':') { - if (Lex(cc)!=TK_IDENT || !(base_class=cc->hash_entry) || - !(base_class->type&HTT_CLASS)) - LexExcept(cc,"Invalid class at "); - if (Lex(cc)==',') - LexExcept(cc,"Only one base class allowed at this time at "); - tmpc->base_class=base_class; - tmpc->size+=base_class->size; + { + tmpc = ParseClassNew; + tmpc->str = cc->cur_str; + cc->cur_str = NULL; + HashAdd(tmpc, cc->htc.global_hash_table); } - if (keyword==KW_UNION) - ParseVarList(cc,tmpc,PRS0_NULL|PRS1_CLASS|PRSF_UNION); + LBtr(&tmpc->flags, Cf_EXTERN); + if (fsp_flags & FSF_PUBLIC) + tmpc->type |= HTF_PUBLIC; + tmpc->use_count = 0; + if (cc->last_U16 == '\n') + HashSrcFileSet(cc, tmpc, -1); else - ParseVarList(cc,tmpc,PRS0_NULL|PRS1_CLASS); - tmpc->size+=tmpc->neg_offset; + HashSrcFileSet(cc, tmpc,0); + if (Lex(cc) == ':') + { + if (Lex(cc) != TK_IDENT || !(base_class = cc->hash_entry) || !(base_class->type & HTT_CLASS)) + LexExcept(cc, "Invalid class at "); + if (Lex(cc) == ',') + LexExcept(cc, "Only one base class allowed at this time at "); + tmpc->base_class = base_class; + tmpc->size += base_class->size; + } + if (keyword == KW_UNION) + ParseVarList(cc, tmpc, PRS0_NULL | PRS1_CLASS | PRSF_UNION); + else + ParseVarList(cc, tmpc, PRS0_NULL | PRS1_CLASS); + tmpc->size += tmpc->neg_offset; } return tmpc; } -CHashFun *ParseFunJoin(CCompCtrl *cc,CHashClass *tmp_return, - U8 *name,I64 fsp_flags) +CHashFun *ParseFunJoin(CCompCtrl *cc, CHashClass *tmp_return, U8 *name, I64 fsp_flags) { - CMemberList *tmpm,*header_list; - CAOTCtrl *aotc=cc->aotc; + CMemberList *tmpm, *header_list; + CAOTCtrl *aotc = cc->aotc; CHashClass *header_return; CHashFun *tmpf; I64 header_arg_count; - if (name) {//if not fun_ptr - if (cc->flags&CCF_AOT_COMPILE) { - if ((tmpf=HashFind(name,cc->htc.global_hash_table,HTT_FUN)) && - tmpf->type & HTF_IMPORT) + if (name) + {//if not fun_ptr + if (cc->flags & CCF_AOT_COMPILE) + { + if ((tmpf = HashFind(name, cc->htc.global_hash_table, HTT_FUN)) && tmpf->type & HTF_IMPORT) tmpf=NULL; - } else - if ((tmpf=HashSingleTableFind(name,cc->htc.global_hash_table,HTT_FUN)) && - !Bt(&tmpf->flags,Cf_EXTERN)) - tmpf=NULL; - if (tmpf && tmpf->use_count<3) - UnusedExternWarning(cc,tmpf); - } else - tmpf=NULL; - if (tmpf) { - tmpf->used_reg_mask=REGG_CLOBBERED+REGG_SAVED+REGG_STACK_TMP; - Free(tmpf->src_link); - tmpf->src_link=NULL; - Free(tmpf->idx); - tmpf->idx=NULL; - Free(name); - header_arg_count=tmpf->arg_count; - header_list=tmpf->member_list_and_root; - header_return=tmpf->return_class; - tmpf->member_list_and_root=NULL; - ClassMemberListDel(tmpf); - } else { - tmpf=ParseFunNew; - header_return=NULL; - tmpf->used_reg_mask=REGG_CLOBBERED+REGG_SAVED+REGG_STACK_TMP; - tmpf->clobbered_reg_mask=REGG_CLOBBERED+REGG_STACK_TMP; - tmpf->str=name; - if (cc->flags&CCF_AOT_COMPILE) - tmpf->exe_addr=aotc->rip; + } else - tmpf->exe_addr=&UndefinedExtern; - LBts(&tmpf->flags,Cf_EXTERN); - tmpf->flags|=fsp_flags&FSG_FUN_FLAGS1; + if ((tmpf = HashSingleTableFind(name, cc->htc.global_hash_table, HTT_FUN)) && !Bt(&tmpf->flags, Cf_EXTERN)) + tmpf = NULL; + if (tmpf && tmpf->use_count < 3) + UnusedExternWarning(cc, tmpf); + } + else + tmpf = NULL; + if (tmpf) + { + tmpf->used_reg_mask = REGG_CLOBBERED + REGG_SAVED + REGG_STACK_TMP; + Free(tmpf->src_link); + tmpf->src_link = NULL; + Free(tmpf->idx); + tmpf->idx = NULL; + Free(name); + header_arg_count = tmpf->arg_count; + header_list = tmpf->member_list_and_root; + header_return = tmpf->return_class; + tmpf->member_list_and_root = NULL; + ClassMemberListDel(tmpf); + } + else + { + tmpf = ParseFunNew; + header_return = NULL; + tmpf->used_reg_mask = REGG_CLOBBERED + REGG_SAVED + REGG_STACK_TMP; + tmpf->clobbered_reg_mask = REGG_CLOBBERED + REGG_STACK_TMP; + tmpf->str = name; + if (cc->flags & CCF_AOT_COMPILE) + tmpf->exe_addr = aotc->rip; + else + tmpf->exe_addr = &UndefinedExtern; + LBts(&tmpf->flags, Cf_EXTERN); + tmpf->flags |= fsp_flags & FSG_FUN_FLAGS1; if (name) //if not fun_ptr - HashAdd(tmpf,cc->htc.global_hash_table); + HashAdd(tmpf, cc->htc.global_hash_table); } - BEqual(&tmpf->type,HTf_PUBLIC,fsp_flags&FSF_PUBLIC); - tmpf->return_class=tmp_return; - tmpf->use_count=0; - HashSrcFileSet(cc,tmpf); - ParseVarList(cc,tmpf,PRS0_NULL|PRS1_FUN_ARG); - tmpf->arg_count=tmpf->member_count; - if (0arg_count<<3<=I16_MAX && !Bt(&tmpf->flags,Ff_DOT_DOT_DOT)) - LBts(&tmpf->flags,Ff_RET1); - tmpm=tmpf->member_list_and_root; - while (tmpm) { - tmpm->offset+=16; //RBP+RETURN - tmpm=tmpm->next; + BEqual(&tmpf->type, HTf_PUBLIC, fsp_flags & FSF_PUBLIC); + tmpf->return_class = tmp_return; + tmpf->use_count = 0; + HashSrcFileSet(cc, tmpf); + ParseVarList(cc, tmpf, PRS0_NULL | PRS1_FUN_ARG); + tmpf->arg_count = tmpf->member_count; + if (0 < tmpf->arg_count << 3 <= I16_MAX && !Bt(&tmpf->flags, Ff_DOT_DOT_DOT)) + LBts(&tmpf->flags, Ff_RET1); + tmpm = tmpf->member_list_and_root; + while (tmpm) + { + tmpm->offset += 16; //RBP+RETURN + tmpm = tmpm->next; } - tmpf->size=0; - if (header_return) { - if (OptionGet(OPTf_WARN_HEADER_MISMATCH)) { - if (tmpf->return_class!=header_return) { - PrintWarn("Fun Header return mismatch '%s'\n",tmpf->str); + tmpf->size = 0; + if (header_return) + { + if (OptionGet(OPTf_WARN_HEADER_MISMATCH)) + { + if (tmpf->return_class != header_return) + { + PrintWarn("Fun Header return mismatch '%s'\n", tmpf->str); cc->warning_count++; } - if (!MemberListCmp(tmpf->member_list_and_root,header_list,header_arg_count)) { - PrintWarn("Fun header args mismatch '%s'\n",tmpf->str); + if (!MemberListCmp(tmpf->member_list_and_root, header_list, header_arg_count)) + { + PrintWarn("Fun header args mismatch '%s'\n", tmpf->str); cc->warning_count++; } } @@ -137,318 +153,354 @@ CHashFun *ParseFunJoin(CCompCtrl *cc,CHashClass *tmp_return, return tmpf; } -U0 ParseFun(CCompCtrl *cc,CHashClass *tmp_return,U8 *name,I64 fsp_flags) +U0 ParseFun(CCompCtrl *cc, CHashClass *tmp_return, U8 *name, I64 fsp_flags) { CMemberList *tmpm; CCodeMisc *saved_leave_label; - I64 i,j,size,*r; + I64 i, j, size, *r; Bool old_trace; - cc->fun_lex_file=cc->lex_include_stack; - cc->min_line=cc->max_line=cc->lex_include_stack->line_num; + cc->fun_lex_file = cc->lex_include_stack; + cc->min_line=cc->max_line = cc->lex_include_stack->line_num; - cc->flags&=~CCF_NO_REG_OPT; - cc->htc.local_var_list=cc->htc.fun=ParseFunJoin(cc,tmp_return,name,fsp_flags); + cc->flags &= ~CCF_NO_REG_OPT; + cc->htc.local_var_list = cc->htc.fun = ParseFunJoin(cc, tmp_return, name, fsp_flags); COCPush(cc); - Btr(&cc->flags,CCf_PASS_TRACE_PRESENT); + Btr(&cc->flags, CCf_PASS_TRACE_PRESENT); COCInit(cc); - ICAdd(cc,IC_ENTER,0,0); - saved_leave_label=cc->lb_leave; - cc->lb_leave=COCMiscNew(cc,CMT_LABEL); - cc->flags&=~CCF_HAS_RETURN; - ParseStatement(cc,,,0); + ICAdd(cc, IC_ENTER, 0, 0); + saved_leave_label = cc->lb_leave; + cc->lb_leave = COCMiscNew(cc,CMT_LABEL); + cc->flags &= ~CCF_HAS_RETURN; + ParseStatement(cc,,, 0); - if (cc->max_linemin_line) - cc->max_line=cc->min_line; + if (cc->max_line < cc->min_line) + cc->max_line = cc->min_line; - if (cc->htc.fun->return_class->size && !(cc->flags&CCF_HAS_RETURN)) - LexWarn(cc,"Function should return val "); - ICAdd(cc,IC_LABEL,cc->lb_leave,0); - cc->lb_leave=saved_leave_label; - ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class); - cc->htc.fun->size&=~7; - if (cc->flags&CCF_AOT_COMPILE) { - cc->htc.fun->exe_addr=cc->aotc->rip; - cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; - r=COCCompile(cc,&size,&cc->htc.fun->debug_info,NULL); - if (r) { - j=(size+7)>>3; - for (i=0;ihtc.fun->return_class->size && !(cc->flags & CCF_HAS_RETURN)) + LexWarn(cc, "Function should return val "); + ICAdd(cc, IC_LABEL, cc->lb_leave, 0); + cc->lb_leave = saved_leave_label; + ICAdd(cc, IC_LEAVE, 0, cc->htc.fun->return_class); + cc->htc.fun->size &= ~7; + if (cc->flags & CCF_AOT_COMPILE) + { + cc->htc.fun->exe_addr = cc->aotc->rip; + cc->htc.fun->type |= HTF_EXPORT | HTF_RESOLVE; + r = COCCompile(cc, &size, &cc->htc.fun->debug_info, NULL); + if (r) + { + j = (size + 7) >> 3; + for (i = 0; i < j; i++) + AOTStoreCodeU64(cc, r[i]); Free(r); } - } else { - old_trace=Btr(&cc->opts,OPTf_TRACE); - cc->htc.fun->exe_addr=COCCompile( - cc,&size,&cc->htc.fun->debug_info,NULL); - if (old_trace) { - Bts(&cc->opts,OPTf_TRACE); - Un(cc->htc.fun->exe_addr,size,64); + } + else + { + old_trace = Btr(&cc->opts, OPTf_TRACE); + cc->htc.fun->exe_addr = COCCompile(cc, &size, &cc->htc.fun->debug_info, NULL); + if (old_trace) + { + Bts(&cc->opts, OPTf_TRACE); + Un(cc->htc.fun->exe_addr, size, 64); } SysSymImportsResolve(cc->htc.fun->str); } - LBtr(&cc->htc.fun->flags,Cf_EXTERN); + LBtr(&cc->htc.fun->flags, Cf_EXTERN); COCPop(cc); - tmpm=cc->htc.fun->member_list_and_root; - while (tmpm) { - if (tmpm->flags & MLF_NO_UNUSED_WARN) { - if (tmpm->use_count>1&&StrCompare(tmpm->str,"_anon_")) + tmpm = cc->htc.fun->member_list_and_root; + while (tmpm) + { + if (tmpm->flags & MLF_NO_UNUSED_WARN) + { + if (tmpm->use_count > 1 && StrCompare(tmpm->str, "_anon_")) PrintWarn("Unneeded no_warn\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - cc->lex_include_stack->full_name,cc->lex_include_stack->line_num, - tmpm->str,cc->htc.fun->str); - } else if (!tmpm->use_count && OptionGet(OPTf_WARN_UNUSED_VAR)) + cc->lex_include_stack->full_name, cc->lex_include_stack->line_num, tmpm->str, cc->htc.fun->str); + } + else if (!tmpm->use_count && OptionGet(OPTf_WARN_UNUSED_VAR)) PrintWarn("Unused var\n $$LK,\"FL:%s,%d\"$$ '%s' in '%s'\n", - cc->lex_include_stack->full_name,cc->lex_include_stack->line_num, - tmpm->str,cc->htc.fun->str); - tmpm=tmpm->next; + cc->lex_include_stack->full_name, cc->lex_include_stack->line_num, tmpm->str, cc->htc.fun->str); + tmpm = tmpm->next; } - cc->htc.local_var_list=cc->htc.fun=cc->fun_lex_file=NULL; + cc->htc.local_var_list = cc->htc.fun=cc->fun_lex_file = NULL; } -U0 ParseGlobalVarList(CCompCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, - I64 saved_val,I64 fsp_flags) +U0 ParseGlobalVarList(CCompCtrl *cc, I64 saved_mode, CHashClass *saved_tmpc, I64 saved_val, I64 fsp_flags) { - I64 i,j,mode,k,val; + I64 i, j, mode, k, val; U8 *st; CHashExport *tmpex; CHashGlobalVar *tmpg; - CAOTCtrl *aotc=cc->aotc; + CAOTCtrl *aotc = cc->aotc; CAOTHeapGlobal *tmphg; CHashClass *tmpc; - CHashFun *tmpf,*tmpf_fun_ptr; + CHashFun *tmpf, *tmpf_fun_ptr; CArrayDim tmpad; - Bool has_alias,undef_array_size,is_array; - while (TRUE) { - tmpc=ParseType(cc,&saved_tmpc,&saved_mode,NULL,&st, - &tmpf_fun_ptr,&tmpex,&tmpad,fsp_flags); + Bool has_alias, undef_array_size, is_array; + while (TRUE) + { + tmpc = ParseType(cc, &saved_tmpc, &saved_mode, NULL, &st, &tmpf_fun_ptr, &tmpex, &tmpad, fsp_flags); - if (!st) return; + if (!st) + return; if (tmpad.next) - is_array=TRUE; - else if (tmpad.total_count<0) { - is_array=TRUE; + is_array = TRUE; + else if (tmpad.total_count < 0) + { + is_array = TRUE; tmpc--; - } else - is_array=FALSE; - - val=saved_val; - mode=saved_mode; - if (tmpex && mode&255==PRS0_EXTERN && !(cc->flags&CCF_AOT_COMPILE) && - tmpex->type&HTT_EXPORT_SYS_SYM) { - val=tmpex->val; - mode=PRS0__EXTERN|PRS1_NOT_REALLY__EXTERN; } - if (cc->token=='(') { - switch (mode&255) { + else + is_array = FALSE; + + val = saved_val; + mode = saved_mode; + if (tmpex && mode & 255 == PRS0_EXTERN && !(cc->flags & CCF_AOT_COMPILE) && tmpex->type & HTT_EXPORT_SYS_SYM) + { + val = tmpex->val; + mode = PRS0__EXTERN | PRS1_NOT_REALLY__EXTERN; + } + if (cc->token == '(') + { + switch (mode & 255) + { case PRS0__INTERN: - tmpf=ParseFunJoin(cc,tmpc,st,fsp_flags); - tmpf->exe_addr=val; - Bts(&tmpf->flags,Ff_INTERNAL); - LBtr(&tmpf->flags,Cf_EXTERN); + tmpf = ParseFunJoin(cc, tmpc, st, fsp_flags); + tmpf->exe_addr = val; + Bts(&tmpf->flags, Ff_INTERNAL); + LBtr(&tmpf->flags, Cf_EXTERN); return; case PRS0__EXTERN: - if (!(fsp_flags&FSF__) && !(mode&PRS1_NOT_REALLY__EXTERN)) - LexExcept(cc,"Expecting label with underscore at "); - tmpf=ParseFunJoin(cc,tmpc,st,fsp_flags); - tmpf->exe_addr=val; + if (!(fsp_flags & FSF__) && !(mode & PRS1_NOT_REALLY__EXTERN)) + LexExcept(cc, "Expecting label with underscore at "); + tmpf = ParseFunJoin(cc, tmpc, st, fsp_flags); + tmpf->exe_addr = val; SysSymImportsResolve(tmpf->str); - LBtr(&tmpf->flags,Cf_EXTERN); - if (saved_mode&255==PRS0__EXTERN) - LBts(&tmpf->flags,Ff__EXTERN); - if (cc->flags&CCF_AOT_COMPILE) - tmpf->type|=HTF_RESOLVE; + LBtr(&tmpf->flags, Cf_EXTERN); + if (saved_mode & 255 == PRS0__EXTERN) + LBts(&tmpf->flags, Ff__EXTERN); + if (cc->flags & CCF_AOT_COMPILE) + tmpf->type |= HTF_RESOLVE; return; case PRS0_EXTERN: - ParseFunJoin(cc,tmpc,st,fsp_flags); + ParseFunJoin(cc, tmpc, st, fsp_flags); return; case PRS0__IMPORT: - if (!(fsp_flags&FSF__)) - LexExcept(cc,"Expecting label with underscore at "); + if (!(fsp_flags & FSF__)) + LexExcept(cc, "Expecting label with underscore at "); case PRS0_IMPORT: - if (!(cc->flags&CCF_AOT_COMPILE)) - LexExcept(cc,"import not needed at "); - else { - tmpf=ParseFunJoin(cc,tmpc,st,fsp_flags); - tmpf->type|=HTF_IMPORT; - if (mode&255==PRS0__IMPORT) - tmpf->import_name=StrNew(val); + if (!(cc->flags & CCF_AOT_COMPILE)) + LexExcept(cc, "import not needed at "); + else + { + tmpf = ParseFunJoin(cc, tmpc, st, fsp_flags); + tmpf->type |= HTF_IMPORT; + if (mode & 255 == PRS0__IMPORT) + tmpf->import_name = StrNew(val); else - tmpf->import_name=StrNew(st); + tmpf->import_name = StrNew(st); } return; default: - ParseFun(cc,tmpc,st,fsp_flags); + ParseFun(cc, tmpc, st, fsp_flags); return; } - } else { - if (tmpad.total_count<0) { - i=0; - undef_array_size=TRUE; - } else { - i=tmpad.total_count; - undef_array_size=FALSE; + } + else + { + if (tmpad.total_count < 0) + { + i = 0; + undef_array_size = TRUE; + } + else + { + i = tmpad.total_count; + undef_array_size = FALSE; } if (tmpf_fun_ptr) - j=sizeof(U8 *); + j = sizeof(U8 *); else - j=tmpc->size; - j*=i; - has_alias=FALSE; - tmphg=NULL; - switch (mode&255) { + j = tmpc->size; + j *= i; + has_alias = FALSE; + tmphg = NULL; + switch (mode & 255) + { case PRS0__EXTERN: - if (cc->flags&CCF_AOT_COMPILE) { - tmpg=CAlloc(sizeof(CHashGlobalVar)); - tmpg->data_addr_rip=val; - tmpg->type=HTT_GLOBAL_VAR | HTF_EXPORT; - } else { - tmpg=CAlloc(sizeof(CHashGlobalVar),Fs->code_heap); - tmpg->data_addr=val; - tmpg->type=HTT_GLOBAL_VAR; + if (cc->flags & CCF_AOT_COMPILE) + { + tmpg = CAlloc(sizeof(CHashGlobalVar)); + tmpg->data_addr_rip = val; + tmpg->type = HTT_GLOBAL_VAR | HTF_EXPORT; } - tmpg->flags|=GVF_ALIAS; + else + { + tmpg = CAlloc(sizeof(CHashGlobalVar), Fs->code_heap); + tmpg->data_addr = val; + tmpg->type = HTT_GLOBAL_VAR; + } + tmpg->flags |= GVF_ALIAS; break; case PRS0__IMPORT: case PRS0_IMPORT: - if (!(cc->flags&CCF_AOT_COMPILE)) - LexExcept(cc,"import not needed at "); - else { - tmpg=CAlloc(sizeof(CHashGlobalVar)); - tmpg->type=HTT_GLOBAL_VAR | HTF_IMPORT; - if (mode&255==PRS0__IMPORT) - tmpg->import_name=StrNew(val); + if (!(cc->flags & CCF_AOT_COMPILE)) + LexExcept(cc, "import not needed at "); + else + { + tmpg = CAlloc(sizeof(CHashGlobalVar)); + tmpg->type = HTT_GLOBAL_VAR | HTF_IMPORT; + if (mode & 255 == PRS0__IMPORT) + tmpg->import_name = StrNew(val); else - tmpg->import_name=StrNew(st); + tmpg->import_name = StrNew(st); } break; case PRS0_EXTERN: - if (cc->flags&CCF_AOT_COMPILE) { - tmpg=CAlloc(sizeof(CHashGlobalVar)); - tmpg->type=HTT_GLOBAL_VAR; - } else { - tmpg=CAlloc(sizeof(CHashGlobalVar),Fs->code_heap); - tmpg->type=HTT_GLOBAL_VAR|HTF_UNRESOLVED; + if (cc->flags & CCF_AOT_COMPILE) + { + tmpg = CAlloc(sizeof(CHashGlobalVar)); + tmpg->type = HTT_GLOBAL_VAR; + } + else + { + tmpg = CAlloc(sizeof(CHashGlobalVar), Fs->code_heap); + tmpg->type = HTT_GLOBAL_VAR | HTF_UNRESOLVED; } break; default: - if (cc->flags&CCF_AOT_COMPILE) { - if (Bt(&cc->opts,OPTf_GLOBALS_ON_DATA_HEAP)) { - if (cc->token=='=') - LexExcept(cc,"Can't init global var on data heap in AOT module "); - tmpg=CAlloc(sizeof(CHashGlobalVar)); - tmphg=tmpg->heap_global=CAlloc(sizeof(CAOTHeapGlobal)); - tmphg->size=j; - tmphg->str=StrNew(st); - tmphg->next=aotc->heap_globals; - aotc->heap_globals=tmphg; - tmpg->flags=GVF_DATA_HEAP; - tmpg->type=HTT_GLOBAL_VAR; //TODO: HTF_EXPORT + if (cc->flags & CCF_AOT_COMPILE) + { + if (Bt(&cc->opts, OPTf_GLOBALS_ON_DATA_HEAP)) { + if (cc->token == '=') + LexExcept(cc, "Can't init global var on data heap in AOT module "); + tmpg = CAlloc(sizeof(CHashGlobalVar)); + tmphg = tmpg->heap_global=CAlloc(sizeof(CAOTHeapGlobal)); + tmphg->size = j; + tmphg->str = StrNew(st); + tmphg->next = aotc->heap_globals; + aotc->heap_globals = tmphg; + tmpg->flags = GVF_DATA_HEAP; + tmpg->type = HTT_GLOBAL_VAR; //TODO: HTF_EXPORT if (tmpex && tmpex->type & HTT_GLOBAL_VAR) //TODO!! extern - LexExcept(cc,"Feature not implemented "); - } else { - tmpg=CAlloc(sizeof(CHashGlobalVar)); - if (cc->token=='=') - tmpg->data_addr=CAlloc(j); - if (tmpc->size>=8) //align - while (aotc->rip&7) - AOTStoreCodeU8(cc,0); - else if (tmpc->size==4) - while (aotc->rip&3) - AOTStoreCodeU8(cc,0); - else if (tmpc->size==2) - while (aotc->rip&1) - AOTStoreCodeU8(cc,0); - tmpg->data_addr_rip=aotc->rip; - tmpg->type=HTT_GLOBAL_VAR | HTF_EXPORT; + LexExcept(cc, "Feature not implemented "); + } + else + { + tmpg = CAlloc(sizeof(CHashGlobalVar)); + if (cc->token == '=') + tmpg->data_addr = CAlloc(j); + if (tmpc->size >= 8) //align + while (aotc->rip & 7) + AOTStoreCodeU8(cc, 0); + else if (tmpc->size == 4) + while (aotc->rip & 3) + AOTStoreCodeU8(cc, 0); + else if (tmpc->size == 2) + while (aotc->rip & 1) + AOTStoreCodeU8(cc, 0); + tmpg->data_addr_rip = aotc->rip; + tmpg->type = HTT_GLOBAL_VAR | HTF_EXPORT; if (tmpex && tmpex->type & HTT_GLOBAL_VAR) - has_alias=TRUE; - for (k=0;kopts,OPTf_GLOBALS_ON_DATA_HEAP)) { - tmpg=CAlloc(sizeof(CHashGlobalVar),Fs->code_heap); - tmpg->data_addr=MAlloc(j); - tmpg->flags=GVF_DATA_HEAP; - } else { - tmpg=CAlloc(sizeof(CHashGlobalVar),Fs->code_heap); - tmpg->data_addr=MAlloc(j,Fs->code_heap); + } + else + { + if (Bt(&cc->opts, OPTf_GLOBALS_ON_DATA_HEAP)) + { + tmpg = CAlloc(sizeof(CHashGlobalVar), Fs->code_heap); + tmpg->data_addr = MAlloc(j); + tmpg->flags = GVF_DATA_HEAP; } - tmpg->type=HTT_GLOBAL_VAR; - if (tmpex && tmpex->type&HTT_GLOBAL_VAR && - tmpex->type&HTF_UNRESOLVED && - MHeapCtrl(tmpex)==MHeapCtrl(tmpg)) - has_alias=TRUE; + else + { + tmpg = CAlloc(sizeof(CHashGlobalVar), Fs->code_heap); + tmpg->data_addr = MAlloc(j, Fs->code_heap); + } + tmpg->type = HTT_GLOBAL_VAR; + if (tmpex && tmpex->type & HTT_GLOBAL_VAR && tmpex->type & HTF_UNRESOLVED && + MHeapCtrl(tmpex) == MHeapCtrl(tmpg)) + has_alias = TRUE; if (sys_var_init_flag) - MemSet(tmpg->data_addr,sys_var_init_val,j); + MemSet(tmpg->data_addr, sys_var_init_val, j); } } - tmpg->dim.next=tmpad.next; - if (fsp_flags&FSF_PUBLIC) - tmpg->type|=HTF_PUBLIC; - tmpg->var_class=tmpc; - tmpg->str=st; - tmpg->size=j; - tmpg->dim.total_count=i; - tmpg->use_count=0; - if (cc->last_U16=='\n') - HashSrcFileSet(cc,tmpg,-1); + tmpg->dim.next = tmpad.next; + if (fsp_flags & FSF_PUBLIC) + tmpg->type |= HTF_PUBLIC; + tmpg->var_class = tmpc; + tmpg->str = st; + tmpg->size = j; + tmpg->dim.total_count = i; + tmpg->use_count = 0; + if (cc->last_U16 == '\n') + HashSrcFileSet(cc, tmpg, -1); else - HashSrcFileSet(cc,tmpg,0); - if (mode&255==PRS0_IMPORT || mode&255==PRS0__IMPORT) - tmpg->flags|=GVF_IMPORT; - if (mode&255==PRS0_EXTERN) - tmpg->flags|=GVF_EXTERN; - if (tmpf_fun_ptr) { - tmpg->fun_ptr=tmpf_fun_ptr; - tmpg->flags|=GVF_FUN; + HashSrcFileSet(cc, tmpg, 0); + if (mode & 255 == PRS0_IMPORT || mode & 255 == PRS0__IMPORT) + tmpg->flags |= GVF_IMPORT; + if (mode & 255 == PRS0_EXTERN) + tmpg->flags |= GVF_EXTERN; + if (tmpf_fun_ptr) + { + tmpg->fun_ptr = tmpf_fun_ptr; + tmpg->flags |= GVF_FUN; } if (is_array) - tmpg->flags|=GVF_ARRAY; - HashAdd(tmpg,cc->htc.global_hash_table); - if (!(cc->flags&CCF_AOT_COMPILE) && !(tmpg->flags&GVF_EXTERN)) + tmpg->flags |= GVF_ARRAY; + HashAdd(tmpg, cc->htc.global_hash_table); + if (!(cc->flags & CCF_AOT_COMPILE) && !(tmpg->flags & GVF_EXTERN)) SysSymImportsResolve(tmpg->str); - if (cc->token=='=') { - if (undef_array_size) { + if (cc->token == '=') + { + if (undef_array_size) + { LexPush(cc); LexPush(cc); Lex(cc); - ParseGlobalInit(cc,tmpg,1); + ParseGlobalInit(cc, tmpg, 1); LexPopNoRestore(cc); - tmpg->size=tmpg->dim.total_count*tmpc->size; + tmpg->size = tmpg->dim.total_count * tmpc->size; if (tmphg) - tmphg->size=tmpg->size; - if (cc->flags&CCF_AOT_COMPILE) - for (k=0;ksize;k++) - AOTStoreCodeU8(cc,0); + tmphg->size = tmpg->size; + if (cc->flags & CCF_AOT_COMPILE) + for (k = 0; k < tmpg->size; k++) + AOTStoreCodeU8(cc, 0); else if (sys_var_init_flag) - MemSet(tmpg->data_addr,sys_var_init_val,k); + MemSet(tmpg->data_addr, sys_var_init_val, k); LexPopRestore(cc); } LexPush(cc); Lex(cc); - ParseGlobalInit(cc,tmpg,2); - if (cc->flags&CCF_AOT_COMPILE) - for (k=0;ksize;k++) - AOTStoreCodeU8At(cc,tmpg->data_addr_rip+k,tmpg->data_addr[k]); + ParseGlobalInit(cc, tmpg, 2); + if (cc->flags & CCF_AOT_COMPILE) + for (k = 0; k < tmpg->size; k++) + AOTStoreCodeU8At(cc, tmpg->data_addr_rip + k, tmpg->data_addr[k]); LexPopNoRestore(cc); } - if (has_alias) { - if (tmpex(CHashGlobalVar *)->use_count<2) { - PrintWarn("Unused extern '%s'\n",tmpex(CHashGlobalVar *)->str); + if (has_alias) + { + if (tmpex(CHashGlobalVar *)->use_count < 2) + { + PrintWarn("Unused extern '%s'\n", tmpex(CHashGlobalVar *)->str); cc->warning_count++; } - tmpex(CHashGlobalVar *)->flags|=GVF_ALIAS; - tmpex(CHashGlobalVar *)->data_addr=tmpg->data_addr; - tmpex(CHashGlobalVar *)->data_addr_rip=tmpg->data_addr_rip; + tmpex(CHashGlobalVar *)->flags |= GVF_ALIAS; + tmpex(CHashGlobalVar *)->data_addr = tmpg->data_addr; + tmpex(CHashGlobalVar *)->data_addr_rip = tmpg->data_addr_rip; } - if (cc->token==',') + if (cc->token == ',') Lex(cc); - else { - if (cc->token!=';') - LexExcept(cc,"Missing ';' at"); + else + { + if (cc->token != ';') + LexExcept(cc, "Missing ';' at"); Lex(cc); return; } @@ -456,685 +508,747 @@ U0 ParseGlobalVarList(CCompCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, } } -U0 ParseIf(CCompCtrl *cc,I64 try_count,CCodeMisc *lb_break) +U0 ParseIf(CCompCtrl *cc, I64 try_count, CCodeMisc *lb_break) { - CCodeMisc *lb,*lb1; + CCodeMisc *lb, *lb1; I64 k; - if (cc->token!='(') - LexExcept(cc,"Expecting '(' at "); + if (cc->token != '(') + LexExcept(cc, "Expecting '(' at "); Lex(cc); - if (!ParseExpression(cc,NULL,FALSE)) + if (!ParseExpression(cc, NULL, FALSE)) throw('Compiler'); - if (cc->token!=')') - LexExcept(cc,"Missing ')' at "); + if (cc->token != ')') + LexExcept(cc, "Missing ')' at "); Lex(cc); - lb=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_BR_ZERO,lb,0); - ParseStatement(cc,try_count,lb_break); - k=ParseKeyWord(cc); - if (k==KW_ELSE) { + lb = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_BR_ZERO, lb, 0); + ParseStatement(cc, try_count, lb_break); + k = ParseKeyWord(cc); + if (k == KW_ELSE) + { Lex(cc); - lb1=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_JMP,lb1,0); - ICAdd(cc,IC_LABEL,lb,0); - ParseStatement(cc,try_count,lb_break); - ICAdd(cc,IC_LABEL,lb1,0); - } else - ICAdd(cc,IC_LABEL,lb,0); + lb1 = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_JMP, lb1, 0); + ICAdd(cc, IC_LABEL, lb, 0); + ParseStatement(cc, try_count, lb_break); + ICAdd(cc, IC_LABEL, lb1, 0); + } + else + ICAdd(cc, IC_LABEL, lb, 0); } -U0 ParseWhile(CCompCtrl *cc,I64 try_count) +U0 ParseWhile(CCompCtrl *cc, I64 try_count) { - CCodeMisc *lb,*lb_done; - if (cc->token!='(') - LexExcept(cc,"Expecting '(' at "); + CCodeMisc *lb, *lb_done; + if (cc->token != '(') + LexExcept(cc, "Expecting '(' at "); Lex(cc); - lb=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_LABEL,lb,0); - if (!ParseExpression(cc,NULL,FALSE)) + lb = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_LABEL, lb, 0); + if (!ParseExpression(cc, NULL,FALSE)) throw('Compiler'); - if (cc->token!=')') - LexExcept(cc,"Missing ')' at "); + if (cc->token != ')') + LexExcept(cc, "Missing ')' at "); Lex(cc); - lb_done=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_BR_ZERO,lb_done,0); - ParseStatement(cc,try_count,lb_done); - ICAdd(cc,IC_JMP,lb,0); - ICAdd(cc,IC_LABEL,lb_done,0); + lb_done = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_BR_ZERO, lb_done, 0); + ParseStatement(cc, try_count, lb_done); + ICAdd(cc, IC_JMP, lb, 0); + ICAdd(cc, IC_LABEL, lb_done, 0); } -U0 ParseDoWhile(CCompCtrl *cc,I64 try_count) +U0 ParseDoWhile(CCompCtrl *cc, I64 try_count) { - CCodeMisc *lb,*lb_done; - lb=COCMiscNew(cc,CMT_LABEL); - lb_done=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_LABEL,lb,0); - ParseStatement(cc,try_count,lb_done); - if (ParseKeyWord(cc)!=KW_WHILE) - LexExcept(cc,"Missing 'while' at"); - if (Lex(cc)!='(') - LexExcept(cc,"Expecting '(' at "); + CCodeMisc *lb, *lb_done; + lb = COCMiscNew(cc, CMT_LABEL); + lb_done = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_LABEL, lb, 0); + ParseStatement(cc, try_count, lb_done); + if (ParseKeyWord(cc) != KW_WHILE) + LexExcept(cc, "Missing 'while' at"); + if (Lex(cc) != '(') + LexExcept(cc, "Expecting '(' at "); Lex(cc); - if (!ParseExpression(cc,NULL,FALSE)) + if (!ParseExpression(cc, NULL, FALSE)) throw('Compiler'); - if (cc->token!=')') - LexExcept(cc,"Missing ')' at "); - ICAdd(cc,IC_BR_NOT_ZERO,lb,0); - ICAdd(cc,IC_LABEL,lb_done,0); - if (Lex(cc)!=';') - LexExcept(cc,"Missing ';' at"); + if (cc->token != ')') + LexExcept(cc, "Missing ')' at "); + ICAdd(cc, IC_BR_NOT_ZERO, lb, 0); + ICAdd(cc, IC_LABEL, lb_done, 0); + if (Lex(cc) != ';') + LexExcept(cc, "Missing ';' at"); Lex(cc); } -U0 ParseFor(CCompCtrl *cc,I64 try_count) +U0 ParseFor(CCompCtrl *cc, I64 try_count) { CCodeCtrl *tmpcbh; - CCodeMisc *lb,*lb_done; + CCodeMisc *lb, *lb_done; - if (cc->token!='(') - LexExcept(cc,"Expecting '(' at "); + if (cc->token != '(') + LexExcept(cc, "Expecting '(' at "); Lex(cc); - ParseStatement(cc,try_count); + ParseStatement(cc, try_count); - lb=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_LABEL,lb,0); - if (!ParseExpression(cc,NULL,FALSE)) + lb = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_LABEL, lb, 0); + if (!ParseExpression(cc, NULL, FALSE)) throw('Compiler'); - lb_done=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_BR_ZERO,lb_done,0); - if (cc->token!=';') - LexExcept(cc,"Missing ';' at"); + lb_done = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_BR_ZERO, lb_done, 0); + if (cc->token != ';') + LexExcept(cc, "Missing ';' at"); Lex(cc); COCPush(cc); COCInit(cc); - if (cc->token!=')') - ParseStatement(cc,try_count,NULL,0); + if (cc->token != ')') + ParseStatement(cc, try_count, NULL, 0); COCPush(cc); - tmpcbh=COCPopNoFree(cc); + tmpcbh = COCPopNoFree(cc); COCPop(cc); - if (cc->token!=')') - LexExcept(cc,"Missing ')' at "); + if (cc->token != ')') + LexExcept(cc, "Missing ')' at "); Lex(cc); - ParseStatement(cc,try_count,lb_done); - COCAppend(cc,tmpcbh); - ICAdd(cc,IC_JMP,lb,0); - ICAdd(cc,IC_LABEL,lb_done,0); + ParseStatement(cc, try_count, lb_done); + COCAppend(cc, tmpcbh); + ICAdd(cc, IC_JMP, lb, 0); + ICAdd(cc, IC_LABEL, lb_done, 0); } -class CSubSwitch { - CSubSwitch *next,*last; - CCodeMisc *lb_start,*lb_break; +class CSubSwitch +{ + CSubSwitch *next, *last; + CCodeMisc *lb_start, *lb_break; }; -class CSwitchCase { +class CSwitchCase +{ CSwitchCase *next; CCodeMisc *label; I64 val; CSubSwitch *ss; }; -U0 ParseSwitch(CCompCtrl *cc,I64 try_count) +U0 ParseSwitch(CCompCtrl *cc, I64 try_count) { - CSwitchCase *header=NULL,*tmps,*tmps1; //Leaks on except - CSubSwitch head,*tmpss; //Leaks on except - CCodeMisc *lb_default,*lb_fwd_case,*mc_jt,*lb_entry,**jmp_table; - CIntermediateCode *tmpi_sub,*tmpi_cmp,*tmpi_jmp,*tmpi_start; - Bool default_found=FALSE,nobound; - I64 i,k_start=I64_MIN,k_end,lo=I64_MAX,hi=I64_MIN,range; + CSwitchCase *header = NULL, *tmps, *tmps1; //Leaks on except + CSubSwitch head, *tmpss; //Leaks on except + CCodeMisc *lb_default, *lb_fwd_case, *mc_jt, *lb_entry, **jmp_table; + CIntermediateCode *tmpi_sub, *tmpi_cmp, *tmpi_jmp, *tmpi_start; + Bool default_found = FALSE, nobound; + I64 i, k_start = I64_MIN, k_end, lo = I64_MAX, hi = I64_MIN, range; - if (cc->token=='(') - nobound=FALSE; - else if (cc->token=='[') - nobound=TRUE; + if (cc->token == '(') + nobound = FALSE; + else if (cc->token == '[') + nobound = TRUE; else - LexExcept(cc,"Expecting '(' or '[' at "); + LexExcept(cc, "Expecting '(' or '[' at "); Lex(cc); QueueInit(&head); - head.last->lb_break=COCMiscNew(cc,CMT_LABEL); + head.last->lb_break = COCMiscNew(cc, CMT_LABEL); head.last->lb_break->use_count++; - lb_default=COCMiscNew(cc,CMT_LABEL); + lb_default = COCMiscNew(cc, CMT_LABEL); lb_default->use_count++; - mc_jt=COCMiscNew(cc,CMT_JMP_TABLE); - mc_jt->begin=COCMiscNew(cc,CMT_LABEL); + mc_jt = COCMiscNew(cc, CMT_JMP_TABLE); + mc_jt->begin = COCMiscNew(cc, CMT_LABEL); mc_jt->begin->use_count++; - if (!ParseExpression(cc,NULL,FALSE)) + if (!ParseExpression(cc, NULL, FALSE)) throw('Compiler'); - tmpi_sub=ICAdd(cc,IC_IMM_I64,0,cmp.internal_types[RT_I64]); - ICAdd(cc,IC_SUB,0,cmp.internal_types[RT_I64]); - tmpi_cmp=ICAdd(cc,IC_IMM_I64,0,cmp.internal_types[RT_I64]); - if (nobound) { - ICAdd(cc,IC_NOBOUND_SWITCH,mc_jt,0); - if (cc->token!=']') - LexExcept(cc,"Missing ']' at "); - } else { - ICAdd(cc,IC_SWITCH,mc_jt,0); - if (cc->token!=')') - LexExcept(cc,"Missing ')' at "); + tmpi_sub = ICAdd(cc, IC_IMM_I64, 0, cmp.internal_types[RT_I64]); + ICAdd(cc, IC_SUB, 0, cmp.internal_types[RT_I64]); + tmpi_cmp = ICAdd(cc, IC_IMM_I64, 0, cmp.internal_types[RT_I64]); + if (nobound) + { + ICAdd(cc, IC_NOBOUND_SWITCH, mc_jt, 0); + if (cc->token != ']') + LexExcept(cc, "Missing ']' at "); } - if (Lex(cc)!='{') - LexExcept(cc,"Expecting '{' at "); + else + { + ICAdd(cc, IC_SWITCH, mc_jt, 0); + if (cc->token != ')') + LexExcept(cc, "Missing ')' at "); + } + if (Lex(cc) != '{') + LexExcept(cc, "Expecting '{' at "); Lex(cc); - ICAdd(cc,IC_LABEL,mc_jt->begin,0); - while (TRUE) { - while (cc->token && cc->token!='}') { + ICAdd(cc, IC_LABEL, mc_jt->begin, 0); + while (TRUE) + { + while (cc->token && cc->token != '}') + { sw_cont: - switch (ParseKeyWord(cc)) { + switch (ParseKeyWord(cc)) + { case KW_END: goto sw_sub_end; case KW_START: - if (Lex(cc)==':') + if (Lex(cc) == ':') Lex(cc); else - LexExcept(cc,"Expecting ':' at "); - tmpss=MAlloc(sizeof(CSubSwitch)); - QueueInsert(tmpss,head.last); - head.last->lb_break=COCMiscNew(cc,CMT_LABEL); + LexExcept(cc, "Expecting ':' at "); + tmpss = MAlloc(sizeof(CSubSwitch)); + QueueInsert(tmpss, head.last); + head.last->lb_break = COCMiscNew(cc, CMT_LABEL); head.last->lb_break->use_count++; - lb_fwd_case=COCMiscNew(cc,CMT_LABEL); - tmpi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0); + lb_fwd_case = COCMiscNew(cc, CMT_LABEL); + tmpi_jmp = ICAdd(cc, IC_JMP, lb_fwd_case, 0); - tmpss->lb_start=COCMiscNew(cc,CMT_LABEL); - tmpi_start=ICAdd(cc,IC_LABEL,tmpss->lb_start,0); - while (cc->token && cc->token!='}') { - switch (ParseKeyWord(cc)) { + tmpss->lb_start = COCMiscNew(cc, CMT_LABEL); + tmpi_start = ICAdd(cc, IC_LABEL, tmpss->lb_start, 0); + while (cc->token && cc->token != '}') + { + switch (ParseKeyWord(cc)) + { case KW_END: OptFree(tmpi_jmp); goto sw_sub_end; case KW_START: case KW_CASE: case KW_DEFAULT: - if (cc->coc.coc_head.last==tmpi_start) { + if (cc->coc.coc_head.last == tmpi_start) + { OptFree(tmpi_jmp); - tmpss->lb_start=NULL; - } else { - ICAdd(cc,IC_RET,0,0); - ICAdd(cc,IC_LABEL,lb_fwd_case,0); - ICAdd(cc,IC_SUB_CALL,tmpss->lb_start,0);//In case fall-thru + tmpss->lb_start = NULL; + } + else + { + ICAdd(cc, IC_RET, 0, 0); + ICAdd(cc, IC_LABEL, lb_fwd_case, 0); + ICAdd(cc, IC_SUB_CALL, tmpss->lb_start, 0);//In case fall-thru } goto sw_cont; default: - ParseStatement(cc,try_count); + ParseStatement(cc, try_count); } } break; case KW_CASE: - if (head.next!=&head) { - lb_fwd_case=COCMiscNew(cc,CMT_LABEL); - tmpi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru + if (head.next != &head) + { + lb_fwd_case = COCMiscNew(cc, CMT_LABEL); + tmpi_jmp = ICAdd(cc, IC_JMP, lb_fwd_case, 0);//In case fall-thru } Lex(cc); - lb_entry=COCMiscNew(cc,CMT_LABEL); - ICAdd(cc,IC_LABEL,lb_entry,0); + lb_entry = COCMiscNew(cc, CMT_LABEL); + ICAdd(cc, IC_LABEL, lb_entry, 0); lb_entry->use_count++; - if (head.next!=&head) { - tmpss=head.next; - while (tmpss!=&head) { + if (head.next != &head) + { + tmpss = head.next; + while (tmpss != &head) + { if (tmpss->lb_start) - ICAdd(cc,IC_SUB_CALL,tmpss->lb_start,0); - tmpss=tmpss->next; + ICAdd(cc, IC_SUB_CALL, tmpss->lb_start, 0); + tmpss = tmpss->next; } - ICAdd(cc,IC_LABEL,lb_fwd_case,0); + ICAdd(cc, IC_LABEL, lb_fwd_case, 0); } - if (cc->token==':') { - if (k_start==I64_MIN) - k_start=0; + if (cc->token == ':') + { + if (k_start == I64_MIN) + k_start = 0; else k_start++; - } else - k_start=LexExpressionI64(cc); - if (k_starthi) hi=k_start; - if (cc->token==':') { + } + else + k_start = LexExpressionI64(cc); + if (k_start < lo) + lo = k_start; + if (k_start > hi) + hi = k_start; + if (cc->token == ':') + { Lex(cc); - tmps=MAlloc(sizeof(CSwitchCase)); - tmps->label=lb_entry; - tmps->val=k_start; - tmps->next=header; - header=tmps; - } else if (cc->token==TK_ELLIPSIS) { + tmps = MAlloc(sizeof(CSwitchCase)); + tmps->label = lb_entry; + tmps->val = k_start; + tmps->next = header; + header = tmps; + } + else if (cc->token == TK_ELLIPSIS) + { Lex(cc); - k_end=LexExpressionI64(cc); - if (cc->token==':') { + k_end = LexExpressionI64(cc); + if (cc->token == ':') + { Lex(cc); - if (k_endhi) hi=k_end; - if (k_start>k_end) - SwapI64(&k_start,&k_end); - for (i=k_start;i<=k_end;i++) { - tmps=MAlloc(sizeof(CSwitchCase)); - tmps->label=lb_entry; - tmps->val=i; - tmps->next=header; - header=tmps; + if (k_end < lo) + lo = k_end; + if (k_end > hi) + hi = k_end; + if (k_start > k_end) + SwapI64(&k_start, &k_end); + for (i = k_start; i <= k_end; i++) + { + tmps = MAlloc(sizeof(CSwitchCase)); + tmps->label = lb_entry; + tmps->val = i; + tmps->next = header; + header = tmps; } - k_start=k_end; - } else - LexExcept(cc,"Expecting ':' at "); - } else - LexExcept(cc,"Expecting ':' at "); + k_start = k_end; + } + else + LexExcept(cc, "Expecting ':' at "); + } + else + LexExcept(cc, "Expecting ':' at "); break; case KW_DEFAULT: - if (head.next!=&head) { - lb_fwd_case=COCMiscNew(cc,CMT_LABEL); - tmpi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru + if (head.next != &head) + { + lb_fwd_case = COCMiscNew(cc, CMT_LABEL); + tmpi_jmp = ICAdd(cc, IC_JMP, lb_fwd_case, 0);//In case fall-thru } Lex(cc); - ICAdd(cc,IC_LABEL,lb_default,0); - if (cc->token==':') + ICAdd(cc, IC_LABEL, lb_default, 0); + if (cc->token == ':') Lex(cc); else - LexExcept(cc,"Expecting ':' at "); - if (head.next!=&head) { - tmpss=head.next; - while (tmpss!=&head) { + LexExcept(cc, "Expecting ':' at "); + if (head.next != &head) + { + tmpss = head.next; + while (tmpss != &head) + { if (tmpss->lb_start) - ICAdd(cc,IC_SUB_CALL,tmpss->lb_start,0); - tmpss=tmpss->next; + ICAdd(cc, IC_SUB_CALL, tmpss->lb_start, 0); + tmpss = tmpss->next; } - ICAdd(cc,IC_LABEL,lb_fwd_case,0); + ICAdd(cc, IC_LABEL, lb_fwd_case, 0); } - default_found=TRUE; + default_found = TRUE; break; default: - ParseStatement(cc,try_count,head.last->lb_break); + ParseStatement(cc, try_count, head.last->lb_break); } } sw_sub_end: - tmpss=head.last; - ICAdd(cc,IC_LABEL,tmpss->lb_break,0); - if (tmpss==&head) { - if (cc->token!='}') - LexExcept(cc,"Missing '}' at "); + tmpss = head.last; + ICAdd(cc, IC_LABEL, tmpss->lb_break, 0); + if (tmpss == &head) + { + if (cc->token != '}') + LexExcept(cc, "Missing '}' at "); Lex(cc); break; - } else { + } + else + { QueueRemove(tmpss); Free(tmpss); - if (ParseKeyWord(cc)!=KW_END) - LexExcept(cc,"Missing 'end' at "); - if (Lex(cc)==':') + if (ParseKeyWord(cc) != KW_END) + LexExcept(cc, "Missing 'end' at "); + if (Lex(cc) == ':') Lex(cc); else - LexExcept(cc,"Expecting ':' at "); + LexExcept(cc, "Expecting ':' at "); } } if (!default_found) - ICAdd(cc,IC_LABEL,lb_default,0); + ICAdd(cc, IC_LABEL, lb_default, 0); - if (0hi || !(0ic_data=lo; - tmpi_cmp->ic_data=range; - tmps=header; - while (tmps) { - tmps1=tmps->next; - if (jmp_table[tmps->val-lo]!=lb_default) - LexExcept(cc,"Duplicate case at "); + if (0 < lo <= 16) + lo = 0; + range = hi - lo + 1; + if (lo > hi || !(0 < range <= 0xFFFF)) + LexExcept(cc, "switch range error at "); + jmp_table = MAlloc((sizeof(CCodeMisc *) * range + 0x1FF) & ~0x1FF); + MemSetI64(jmp_table, lb_default, range); + tmpi_sub->ic_data = lo; + tmpi_cmp->ic_data = range; + tmps = header; + while (tmps) + { + tmps1 = tmps->next; + if (jmp_table[tmps->val - lo] != lb_default) + LexExcept(cc, "Duplicate case at "); else - jmp_table[tmps->val-lo]=tmps->label; + jmp_table[tmps->val - lo] = tmps->label; Free(tmps); - tmps=tmps1; + tmps = tmps1; } - mc_jt->default=lb_default; - mc_jt->jmp_table=jmp_table; - mc_jt->range=range; + mc_jt->default = lb_default; + mc_jt->jmp_table = jmp_table; + mc_jt->range = range; } U0 ParseNoWarn(CCompCtrl *cc) { CMemberList *tmpm; - while (cc->token==TK_IDENT) { - if (!(tmpm=cc->local_var_entry)) - LexExcept(cc,"Expecting local var at "); - tmpm->flags|=MLF_NO_UNUSED_WARN; - if (Lex(cc)==',') + while (cc->token == TK_IDENT) + { + if (!(tmpm = cc->local_var_entry)) + LexExcept(cc, "Expecting local var at "); + tmpm->flags |= MLF_NO_UNUSED_WARN; + if (Lex(cc) == ',') Lex(cc); - else if (cc->token!=';') - LexExcept(cc,"Expecting ',' at "); + else if (cc->token != ';') + LexExcept(cc, "Expecting ',' at "); } } U0 ParseStreamBlk(CCompCtrl *cc) { - CLexHashTableContext *htc=MAlloc(sizeof(CLexHashTableContext)); - CStreamBlk *tmpe=MAlloc(sizeof(CStreamBlk)); - tmpe->body=StrNew(""); - QueueInsert(tmpe,cc->last_stream_blk); + CLexHashTableContext *htc = MAlloc(sizeof(CLexHashTableContext)); + CStreamBlk *tmpe = MAlloc(sizeof(CStreamBlk)); + tmpe->body = StrNew(""); + QueueInsert(tmpe, cc->last_stream_blk); COCPush(cc); QueueInit(&cc->coc.coc_next_misc); - MemCopy(htc,&cc->htc,sizeof(CLexHashTableContext)); - htc->old_flags=cc->flags; - cc->htc.next=htc; - cc->htc.fun=cc->htc.local_var_list=NULL; - cc->htc.define_hash_table=cc->htc.hash_table_list= - cc->htc.global_hash_table=cc->htc.local_hash_table=Fs->hash_table; - cc->flags=cc->flags & ~(CCF_ASM_EXPRESSIONS|CCF_AOT_COMPILE) | CCF_EXE_BLK; - if (cc->token=='{') + MemCopy(htc, &cc->htc, sizeof(CLexHashTableContext)); + htc->old_flags = cc->flags; + cc->htc.next = htc; + cc->htc.fun = cc->htc.local_var_list =NULL; + cc->htc.define_hash_table = cc->htc.hash_table_list = + cc->htc.global_hash_table = cc->htc.local_hash_table = Fs->hash_table; + cc->flags = cc->flags & ~(CCF_ASM_EXPRESSIONS | CCF_AOT_COMPILE) | CCF_EXE_BLK; + if (cc->token == '{') Lex(cc); else - LexExcept(cc,"Missing '}' at "); - while (cc->token && cc->token!='}') + LexExcept(cc, "Missing '}' at "); + while (cc->token && cc->token != '}') ExeCmdLine(cc); - MemCopy(&cc->htc,htc,sizeof(CLexHashTableContext)); - cc->flags=cc->flags&~CCF_EXE_BLK | - htc->old_flags & (CCF_ASM_EXPRESSIONS|CCF_EXE_BLK|CCF_AOT_COMPILE); + MemCopy(&cc->htc, htc, sizeof(CLexHashTableContext)); + cc->flags = cc->flags & ~CCF_EXE_BLK | htc->old_flags & (CCF_ASM_EXPRESSIONS | CCF_EXE_BLK | CCF_AOT_COMPILE); Free(htc); COCPop(cc); QueueRemove(tmpe); if (*tmpe->body) - LexIncludeStr(cc,"StreamBlk",tmpe->body,FALSE); + LexIncludeStr(cc, "StreamBlk", tmpe->body, FALSE); else Free(tmpe->body); Free(tmpe); Lex(cc); //Skip '}' } -U0 ParseTryBlk(CCompCtrl *cc,I64 try_count) +U0 ParseTryBlk(CCompCtrl *cc, I64 try_count) { - CCodeMisc *lb_catch,*lb_done,*lb_untry; - CHashClass *tmpc=cmp.internal_types[RT_PTR]; - CHashFun *tmp_try=HashFind("SysTry",cc->htc.hash_table_list,HTT_FUN), - *tmp_untry=HashFind("SysUntry",cc->htc.hash_table_list,HTT_FUN); + CCodeMisc *lb_catch, *lb_done, *lb_untry; + CHashClass *tmpc = cmp.internal_types[RT_PTR]; + CHashFun *tmp_try = HashFind("SysTry", cc->htc.hash_table_list, HTT_FUN), + *tmp_untry = HashFind("SysUntry", cc->htc.hash_table_list, HTT_FUN); if (!tmp_try || !tmp_untry) - LexExcept(cc,"Missing header for SysTry() and SysUntry() at "); + LexExcept(cc, "Missing header for SysTry() and SysUntry() at "); - cc->flags|=CCF_NO_REG_OPT; //TODO:Currently no reg vars in funs with try/catch + cc->flags |= CCF_NO_REG_OPT; //TODO:Currently no reg vars in funs with try/catch - lb_catch=COCMiscNew(cc,CMT_LABEL); - lb_done =COCMiscNew(cc,CMT_LABEL); - lb_untry=COCMiscNew(cc,CMT_LABEL); + lb_catch = COCMiscNew(cc, CMT_LABEL); + lb_done = COCMiscNew(cc, CMT_LABEL); + lb_untry = COCMiscNew(cc, CMT_LABEL); - ICAdd(cc,IC_CALL_START,0,0); - ICAdd(cc,IC_GET_LABEL,lb_untry,tmpc,ICF_PUSH_RES); - ICAdd(cc,IC_GET_LABEL,lb_catch,tmpc,ICF_PUSH_RES); - if (Bt(&tmp_try->flags,Cf_EXTERN)) { + ICAdd(cc, IC_CALL_START, 0, 0); + ICAdd(cc, IC_GET_LABEL, lb_untry, tmpc, ICF_PUSH_RES); + ICAdd(cc, IC_GET_LABEL, lb_catch, tmpc, ICF_PUSH_RES); + if (Bt(&tmp_try->flags, Cf_EXTERN)) + { cc->abs_counts.externs++; - if (cc->flags&CCF_AOT_COMPILE) - ICAdd(cc,IC_CALL_IMPORT,tmp_try,tmpc); + if (cc->flags & CCF_AOT_COMPILE) + ICAdd(cc, IC_CALL_IMPORT, tmp_try, tmpc); else - ICAdd(cc,IC_CALL_INDIRECT2,&tmp_try->exe_addr,tmpc); - } else - ICAdd(cc,IC_CALL,tmp_try->exe_addr,tmpc); - if ((Bt(&tmp_try->flags,Ff_RET1) || - Bt(&tmp_try->flags,Ff_ARGPOP)) && !Bt(&tmp_try->flags,Ff_NOARGPOP)) - ICAdd(cc,IC_ADD_RSP1,16,tmpc); + ICAdd(cc, IC_CALL_INDIRECT2, &tmp_try->exe_addr, tmpc); + } else - ICAdd(cc,IC_ADD_RSP,16,tmpc); - ICAdd(cc,IC_CALL_END,0,tmpc); - ICAdd(cc,IC_END_EXP,0,0,ICF_RES_NOT_USED); + ICAdd(cc, IC_CALL, tmp_try->exe_addr, tmpc); + if ((Bt(&tmp_try->flags, Ff_RET1) || Bt(&tmp_try->flags, Ff_ARGPOP)) && !Bt(&tmp_try->flags, Ff_NOARGPOP)) + ICAdd(cc, IC_ADD_RSP1, 16, tmpc); + else + ICAdd(cc, IC_ADD_RSP, 16, tmpc); + ICAdd(cc, IC_CALL_END, 0, tmpc); + ICAdd(cc, IC_END_EXP, 0, 0, ICF_RES_NOT_USED); - ParseStatement(cc,try_count+1); + ParseStatement(cc, try_count + 1); - ICAdd(cc,IC_LABEL,lb_untry,0); - ICAdd(cc,IC_CALL_START,0,0); - if (Bt(&tmp_untry->flags,Cf_EXTERN)) { + ICAdd(cc, IC_LABEL, lb_untry, 0); + ICAdd(cc, IC_CALL_START, 0, 0); + if (Bt(&tmp_untry->flags, Cf_EXTERN)) + { cc->abs_counts.externs++; - if (cc->flags&CCF_AOT_COMPILE) - ICAdd(cc,IC_CALL_IMPORT,tmp_untry,tmpc); + if (cc->flags & CCF_AOT_COMPILE) + ICAdd(cc, IC_CALL_IMPORT, tmp_untry, tmpc); else - ICAdd(cc,IC_CALL_INDIRECT2,&tmp_untry->exe_addr,tmpc); - } else - ICAdd(cc,IC_CALL,tmp_untry->exe_addr,tmpc); - ICAdd(cc,IC_CALL_END,0,tmpc); - ICAdd(cc,IC_END_EXP,0,0,ICF_RES_NOT_USED); + ICAdd(cc, IC_CALL_INDIRECT2, &tmp_untry->exe_addr, tmpc); + } + else + ICAdd(cc, IC_CALL, tmp_untry->exe_addr, tmpc); + ICAdd(cc, IC_CALL_END, 0, tmpc); + ICAdd(cc, IC_END_EXP, 0, 0, ICF_RES_NOT_USED); - ICAdd(cc,IC_JMP,lb_done,0); + ICAdd(cc, IC_JMP, lb_done, 0); - if (ParseKeyWord(cc)!=KW_CATCH) - LexExcept(cc,"Missing 'catch' at"); + if (ParseKeyWord(cc) != KW_CATCH) + LexExcept(cc, "Missing 'catch' at"); Lex(cc); - ICAdd(cc,IC_LABEL,lb_catch,0); - ParseStatement(cc,try_count+1); - ICAdd(cc,IC_RET,0,tmpc); - ICAdd(cc,IC_LABEL,lb_done,0); + ICAdd(cc, IC_LABEL, lb_catch, 0); + ParseStatement(cc, try_count + 1); + ICAdd(cc, IC_RET, 0, tmpc); + ICAdd(cc, IC_LABEL, lb_done, 0); } -Bool ParseStatement(CCompCtrl *cc,I64 try_count=0, - CCodeMisc *lb_break=NULL,I64 comp_flags=CMPF_PRS_SEMICOLON) +Bool ParseStatement(CCompCtrl *cc, I64 try_count=0, CCodeMisc *lb_break=NULL, I64 comp_flags=CMPF_PRS_SEMICOLON) { - I64 i,fsp_flags=0; + I64 i, fsp_flags = 0; CHashExport *tmpex; CCodeMisc *g_lb; U8 *import_name; CHashFun *tmp_untry; CAOT *tmpaot; - if (comp_flags&CMPF_ONE_ASM_INS) { - if (cc->flags&CCF_AOT_COMPILE || cc->aot_depth) - ParseAsmBlk(cc,CMPF_ONE_ASM_INS); - else if (tmpaot=CompJoin(cc,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) - CompFixUpJITAsm(cc,tmpaot); - fsp_flags=FSF_ASM; - } else - while (TRUE) { - while (cc->token==',') + if (comp_flags & CMPF_ONE_ASM_INS) + { + if (cc->flags & CCF_AOT_COMPILE || cc->aot_depth) + ParseAsmBlk(cc, CMPF_ONE_ASM_INS); + else if (tmpaot = CompJoin(cc, CMPF_ASM_BLK | CMPF_ONE_ASM_INS)) + CompFixUpJITAsm(cc, tmpaot); + fsp_flags = FSF_ASM; + } + else + while (TRUE) + { + while (cc->token == ',') Lex(cc); - if (cc->token=='{') { + if (cc->token == '{') + { Lex(cc); - while (cc->token!='}' && cc->token!=TK_EOF) - ParseStatement(cc,try_count,lb_break); - if (cc->lex_include_stack==cc->fun_lex_file) - cc->max_line=cc->lex_include_stack->line_num; - if (Lex(cc)!=',') goto sm_done; - } else if (cc->token==';') { - if (comp_flags&CMPF_PRS_SEMICOLON) + while (cc->token != '}' && cc->token != TK_EOF) + ParseStatement(cc, try_count, lb_break); + if (cc->lex_include_stack == cc->fun_lex_file) + cc->max_line = cc->lex_include_stack->line_num; + if (Lex(cc) != ',') + goto sm_done; + } + else if (cc->token == ';') + { + if (comp_flags & CMPF_PRS_SEMICOLON) Lex(cc); - if (cc->token!=',') goto sm_done; - } else { - if (cc->token==TK_IDENT) { - if (tmpex=cc->hash_entry) { - if (tmpex->type & HTT_KEYWORD) { - i=tmpex(CHashGeneric *)->user_data0; - switch [i] { - case KW_KWS_NUM-1: //nobound switch + if (cc->token != ',') + goto sm_done; + } + else + { + if (cc->token == TK_IDENT) + { + if (tmpex = cc->hash_entry) + { + if (tmpex->type & HTT_KEYWORD) + { + i = tmpex(CHashGeneric *)->user_data0; + switch [i] + { + case KW_KWS_NUM - 1: //nobound switch default: //A keyword that is not valid here is just a symbol. goto sm_not_keyword_afterall; start: case KW_ASM: - if (cc->htc.fun) { - if (tmpaot=CompJoin(cc,CMPF_ASM_BLK)) - ICAdd(cc,IC_ASM,tmpaot,0); + if (cc->htc.fun) + { + if (tmpaot = CompJoin(cc, CMPF_ASM_BLK)) + ICAdd(cc, IC_ASM, tmpaot, 0); Lex(cc); //Skip '}' of asm{} - } else { - if (cc->flags&CCF_AOT_COMPILE || cc->aot_depth) { + } + else + { + if (cc->flags & CCF_AOT_COMPILE || cc->aot_depth) + { Lex(cc); - ParseAsmBlk(cc,0); - if (cc->flags&CCF_AOT_COMPILE && cc->aot_depth==1) + ParseAsmBlk(cc, 0); + if (cc->flags & CCF_AOT_COMPILE && cc->aot_depth == 1) Lex(cc); //Skip '}' of asm{} - } else { - if (tmpaot=CompJoin(cc,CMPF_ASM_BLK)) - CompFixUpJITAsm(cc,tmpaot); + } + else + { + if (tmpaot = CompJoin(cc, CMPF_ASM_BLK)) + CompFixUpJITAsm(cc, tmpaot); Lex(cc); //Skip '}' of asm{} } - fsp_flags=FSF_ASM; + fsp_flags = FSF_ASM; } break; start: Lex(cc); case KW_LOCK: cc->lock_count++; - ParseStatement(cc,try_count); + ParseStatement(cc, try_count); cc->lock_count--; break; case KW_TRY: - ParseTryBlk(cc,try_count); + ParseTryBlk(cc, try_count); break; case KW_IF: - ParseIf(cc,try_count,lb_break); + ParseIf(cc, try_count, lb_break); break; case KW_FOR: - ParseFor(cc,try_count); + ParseFor(cc, try_count); break; case KW_WHILE: - ParseWhile(cc,try_count); + ParseWhile(cc, try_count); break; case KW_DO: - ParseDoWhile(cc,try_count); + ParseDoWhile(cc, try_count); break; case KW_SWITCH: - ParseSwitch(cc,try_count); + ParseSwitch(cc, try_count); break; end: end: - if (cc->token!=',') goto sm_done; + if (cc->token != ',') + goto sm_done; break; start: if (cc->htc.fun) - LexExcept(cc,"Not allowed in fun"); + LexExcept(cc, "Not allowed in fun"); Lex(cc); case KW__EXTERN: - if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS)) + if (Bt(&cc->opts, OPTf_EXTERNS_TO_IMPORTS)) goto sm_underscore_import; - if (cc->token!=TK_IDENT || !(tmpex=cc->hash_entry) || - !(tmpex->type & HTT_EXPORT_SYS_SYM)) - LexExcept(cc,"Expecting system sym at "); - if (*cc->cur_str=='_') - fsp_flags|=FSF__; - i=tmpex->val; + if (cc->token != TK_IDENT || !(tmpex = cc->hash_entry) || + !(tmpex->type & HTT_EXPORT_SYS_SYM)) + LexExcept(cc, "Expecting system sym at "); + if (*cc->cur_str == '_') + fsp_flags |= FSF__; + i = tmpex->val; Lex(cc); - if (cc->token!=TK_IDENT || !(tmpex=cc->hash_entry) || - !(tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(cc,"Expecting type at "); + if (cc->token != TK_IDENT || !(tmpex = cc->hash_entry) || + !(tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE))) + LexExcept(cc, "Expecting type at "); Lex(cc); - ParseGlobalVarList(cc,PRS0__EXTERN|PRS1_NULL,tmpex,i,fsp_flags); + ParseGlobalVarList(cc, PRS0__EXTERN | PRS1_NULL, tmpex, i, fsp_flags); break; case KW__IMPORT: sm_underscore_import: - if (cc->token!=TK_IDENT) - LexExcept(cc,"Expecting system sym at "); - if (*cc->cur_str=='_') - fsp_flags|=FSF__; - import_name=cc->cur_str; - cc->cur_str=0; - if (Lex(cc)!=TK_IDENT || !(tmpex=cc->hash_entry) || - !(tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(cc,"Expecting type at "); + if (cc->token != TK_IDENT) + LexExcept(cc, "Expecting system sym at "); + if (*cc->cur_str == '_') + fsp_flags |= FSF__; + import_name = cc->cur_str; + cc->cur_str = 0; + if (Lex(cc) != TK_IDENT || !(tmpex = cc->hash_entry) || + !(tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE))) + LexExcept(cc, "Expecting type at "); Lex(cc); - ParseGlobalVarList(cc,PRS0__IMPORT|PRS1_NULL,tmpex, - import_name,fsp_flags); + ParseGlobalVarList(cc, PRS0__IMPORT | PRS1_NULL, tmpex, import_name, fsp_flags); Free(import_name); break; case KW_EXTERN: - if (cc->token!=TK_IDENT) - LexExcept(cc,"Expecting type at "); - tmpex=cc->hash_entry; - i=ParseKeyWord(cc); - if (i==KW_CLASS||i==KW_UNION) { + if (cc->token != TK_IDENT) + LexExcept(cc, "Expecting type at "); + tmpex = cc->hash_entry; + i = ParseKeyWord(cc); + if (i == KW_CLASS || i == KW_UNION) + { Lex(cc); - ParseClass(cc,i,fsp_flags,TRUE); - fsp_flags&=FSF_ASM; + ParseClass(cc, i, fsp_flags, TRUE); + fsp_flags &= FSF_ASM; goto sm_semicolon; } - if (!tmpex || - !(tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(cc,"Expecting type at "); - if (Bt(&cc->opts,OPTf_EXTERNS_TO_IMPORTS)) + if (!tmpex || !(tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE))) + LexExcept(cc, "Expecting type at "); + if (Bt(&cc->opts, OPTf_EXTERNS_TO_IMPORTS)) goto sm_import; Lex(cc); - ParseGlobalVarList(cc,PRS0_EXTERN|PRS1_NULL,tmpex,0,fsp_flags); + ParseGlobalVarList(cc, PRS0_EXTERN | PRS1_NULL, tmpex, 0, fsp_flags); break; case KW_IMPORT: - if (cc->token!=TK_IDENT || !(tmpex=cc->hash_entry) || - !(tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(cc,"Expecting type at "); + if (cc->token != TK_IDENT || !(tmpex = cc->hash_entry) || + !(tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE))) + LexExcept(cc, "Expecting type at "); sm_import: Lex(cc); - ParseGlobalVarList(cc,PRS0_IMPORT|PRS1_NULL,tmpex,0,fsp_flags); + ParseGlobalVarList(cc, PRS0_IMPORT | PRS1_NULL, tmpex, 0, fsp_flags); break; case KW__INTERN: - i=LexExpressionI64(cc); - if (cc->token!=TK_IDENT || !(tmpex=cc->hash_entry) || - !(tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE))) - LexExcept(cc,"Expecting type at "); + i = LexExpressionI64(cc); + if (cc->token != TK_IDENT || !(tmpex = cc->hash_entry) || + !(tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE))) + LexExcept(cc, "Expecting type at "); Lex(cc); - ParseGlobalVarList(cc,PRS0__INTERN|PRS1_NULL,tmpex,i,fsp_flags); + ParseGlobalVarList(cc, PRS0__INTERN | PRS1_NULL, tmpex, i, fsp_flags); break; end: - fsp_flags&=FSF_ASM; + fsp_flags &= FSF_ASM; break; start: case KW_STATIC: - fsp_flags=FSF_STATIC|fsp_flags&FSF_ASM; + fsp_flags = FSF_STATIC | fsp_flags & FSF_ASM; break; case KW_INTERRUPT: - fsp_flags=FSF_INTERRUPT|FSF_NOARGPOP| - fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags = FSF_INTERRUPT | FSF_NOARGPOP | fsp_flags & (FSG_FUN_FLAGS2 | FSF_ASM); break; case KW_HASERRCODE: - fsp_flags=FSF_HASERRCODE|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags = FSF_HASERRCODE | fsp_flags & (FSG_FUN_FLAGS2 | FSF_ASM); break; case KW_ARGPOP: - fsp_flags=FSF_ARGPOP|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags = FSF_ARGPOP | fsp_flags & (FSG_FUN_FLAGS2 | FSF_ASM); break; case KW_NOARGPOP: - fsp_flags=FSF_NOARGPOP|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags = FSF_NOARGPOP | fsp_flags & (FSG_FUN_FLAGS2 | FSF_ASM); break; case KW_PUBLIC: - fsp_flags=FSF_PUBLIC|fsp_flags&(FSG_FUN_FLAGS2|FSF_ASM); + fsp_flags = FSF_PUBLIC | fsp_flags & (FSG_FUN_FLAGS2 | FSF_ASM); break; end: Lex(cc); break; case KW_RETURN: if (!cc->htc.fun) - LexExcept(cc,"Not in fun. Can't return a val "); - if (try_count) { - tmp_untry=HashFind("SysUntry", - cc->htc.hash_table_list,HTT_FUN); - for (i=0;iflags,Cf_EXTERN)) { + LexExcept(cc, "Not in fun. Can't return a val "); + if (try_count) + { + tmp_untry = HashFind("SysUntry", cc->htc.hash_table_list, HTT_FUN); + for (i = 0; i < try_count; i++) + { + if (Bt(&tmp_untry->flags, Cf_EXTERN)) + { cc->abs_counts.externs++; - if (cc->flags&CCF_AOT_COMPILE) - ICAdd(cc,IC_CALL_IMPORT, - tmp_untry,cmp.internal_types[RT_PTR]); + if (cc->flags & CCF_AOT_COMPILE) + ICAdd(cc, IC_CALL_IMPORT, tmp_untry, cmp.internal_types[RT_PTR]); else - ICAdd(cc,IC_CALL_INDIRECT2, - &tmp_untry->exe_addr, - cmp.internal_types[RT_PTR]); - } else - ICAdd(cc,IC_CALL,tmp_untry->exe_addr, - cmp.internal_types[RT_PTR]); + ICAdd(cc, IC_CALL_INDIRECT2, &tmp_untry->exe_addr, + cmp.internal_types[RT_PTR]); + } + else + ICAdd(cc, IC_CALL, tmp_untry->exe_addr, cmp.internal_types[RT_PTR]); } } - if (Lex(cc)!=';') { + if (Lex(cc) != ';') + { if (!cc->htc.fun->return_class->size) - LexWarn(cc,"Function should NOT return val "); - if (!ParseExpression(cc,NULL,FALSE)) + LexWarn(cc, "Function should NOT return val "); + if (!ParseExpression(cc, NULL, FALSE)) throw('Compiler'); - ICAdd(cc,IC_RETURN_VAL,0,cc->htc.fun->return_class); - cc->flags|=CCF_HAS_RETURN; - } else if (cc->htc.fun->return_class->size) - LexWarn(cc,"Function should return val "); - ICAdd(cc,IC_JMP,cc->lb_leave,0); + ICAdd(cc, IC_RETURN_VAL, 0, cc->htc.fun->return_class); + cc->flags |= CCF_HAS_RETURN; + } + else if (cc->htc.fun->return_class->size) + LexWarn(cc, "Function should return val "); + ICAdd(cc, IC_JMP, cc->lb_leave, 0); goto sm_semicolon; case KW_GOTO: - if (Lex(cc)!=TK_IDENT) - LexExcept(cc,"Expecting identifier at "); - if (!(g_lb=COCGoToLabelFind(cc,cc->cur_str))) { - g_lb=COCMiscNew(cc,CMT_GOTO_LABEL); - g_lb->str=cc->cur_str; - cc->cur_str=NULL; + if (Lex(cc) != TK_IDENT) + LexExcept(cc, "Expecting identifier at "); + if (!(g_lb = COCGoToLabelFind(cc, cc->cur_str))) + { + g_lb = COCMiscNew(cc, CMT_GOTO_LABEL); + g_lb->str = cc->cur_str; + cc->cur_str = NULL; } g_lb->use_count++; - ICAdd(cc,IC_JMP,g_lb,0); + ICAdd(cc, IC_JMP, g_lb, 0); Lex(cc); goto sm_semicolon; case KW_BREAK: Lex(cc); if (!lb_break) - LexExcept(cc,"'break' not allowed\n"); - ICAdd(cc,IC_JMP,lb_break,0); + LexExcept(cc, "'break' not allowed\n"); + ICAdd(cc, IC_JMP, lb_break, 0); goto sm_semicolon; case KW_NO_WARN: Lex(cc); @@ -1143,80 +1257,108 @@ sm_import: case KW_UNION: case KW_CLASS: Lex(cc); - tmpex=ParseClass(cc,i,fsp_flags,FALSE); - if (!cc->htc.fun && cc->token!=';') { - ParseGlobalVarList(cc,PRS0_NULL|PRS1_NULL,tmpex,0,fsp_flags); - fsp_flags&=FSF_ASM; + tmpex = ParseClass(cc, i, fsp_flags, FALSE); + if (!cc->htc.fun && cc->token != ';') { + ParseGlobalVarList(cc, PRS0_NULL | PRS1_NULL, tmpex, 0, fsp_flags); + fsp_flags &= FSF_ASM; break; - } else { - fsp_flags&=FSF_ASM; + } + else + { + fsp_flags &= FSF_ASM; goto sm_semicolon; } } - } else {//Ident, found in hash table, not keyword + } + else + {//Ident, found in hash table, not keyword sm_not_keyword_afterall: - if (tmpex->type & (HTT_CLASS|HTT_INTERNAL_TYPE)) { - if (cc->htc.fun) { - if (fsp_flags&FSF_STATIC) - ParseVarList(cc,cc->htc.fun,PRS0_NULL|PRS1_STATIC_LOCAL_VAR); + if (tmpex->type & (HTT_CLASS | HTT_INTERNAL_TYPE)) + { + if (cc->htc.fun) + { + if (fsp_flags & FSF_STATIC) + ParseVarList(cc, cc->htc.fun, PRS0_NULL | PRS1_STATIC_LOCAL_VAR); else - ParseVarList(cc,cc->htc.fun,PRS0_NULL|PRS1_LOCAL_VAR); - if (cc->token=='}') goto sm_done; - } else { - Lex(cc); - ParseGlobalVarList(cc,PRS0_NULL|PRS1_NULL,tmpex,0,fsp_flags); + ParseVarList(cc, cc->htc.fun, PRS0_NULL | PRS1_LOCAL_VAR); + if (cc->token == '}') + goto sm_done; } - } else { - if (tmpex->type & (HTT_OPCODE|HTT_ASM_KEYWORD)) { - if (cc->htc.fun) { - if (tmpaot=CompJoin(cc,CMPF_ASM_BLK|CMPF_ONE_ASM_INS)) - ICAdd(cc,IC_ASM,tmpaot,0); - } else - LexExcept(cc,"Use Asm Blk at "); - if (cc->token!=',') goto sm_done; - } else + else + { + Lex(cc); + ParseGlobalVarList(cc, PRS0_NULL | PRS1_NULL, tmpex, 0, fsp_flags); + } + } + else + { + if (tmpex->type & (HTT_OPCODE | HTT_ASM_KEYWORD)) + { + if (cc->htc.fun) + { + if (tmpaot = CompJoin(cc, CMPF_ASM_BLK | CMPF_ONE_ASM_INS)) + ICAdd(cc, IC_ASM, tmpaot, 0); + } + else + LexExcept(cc, "Use Asm Blk at "); + if (cc->token != ',') + goto sm_done; + } + else goto sm_parse_exp; } - fsp_flags&=FSF_ASM; + fsp_flags &= FSF_ASM; } - } else {//Ident, not in hash table + } + else + {//Ident, not in hash table if (cc->local_var_entry) goto sm_parse_exp; - if (!(g_lb=COCGoToLabelFind(cc,cc->cur_str))) { - g_lb=COCMiscNew(cc,CMT_GOTO_LABEL); - g_lb->str=cc->cur_str; - cc->cur_str=NULL; - } else if (g_lb->flags&CMF_DEFINED) - LexExcept(cc,"Duplicate goto label at "); - g_lb->flags|=CMF_DEFINED; - ICAdd(cc,IC_LABEL,g_lb,0); - if (Lex(cc)==':') //skip cur_str + if (!(g_lb = COCGoToLabelFind(cc, cc->cur_str))) + { + g_lb = COCMiscNew(cc, CMT_GOTO_LABEL); + g_lb->str = cc->cur_str; + cc->cur_str = NULL; + } + else if (g_lb->flags & CMF_DEFINED) + LexExcept(cc, "Duplicate goto label at "); + g_lb->flags |= CMF_DEFINED; + ICAdd(cc, IC_LABEL, g_lb, 0); + if (Lex(cc) == ':') //skip cur_str Lex(cc); //skip colon else - LexExcept(cc,"Undefined identifier at "); + LexExcept(cc, "Undefined identifier at "); if (!cc->htc.fun) - LexExcept(cc,"No global labels at "); - if (cc->token!=',') goto sm_done; + LexExcept(cc, "No global labels at "); + if (cc->token != ',') + goto sm_done; } - } else if (cc->token==TK_STR||cc->token==TK_CHAR_CONST) { - ParseFunCall(cc,NULL,FALSE,NULL); + } + else if (cc->token == TK_STR || cc->token == TK_CHAR_CONST) + { + ParseFunCall(cc, NULL, FALSE, NULL); goto sm_semicolon; - } else if (cc->token!=TK_EOF) {//Non-cur_str symbol, num or something + } + else if (cc->token != TK_EOF) + {//Non-cur_str symbol, num or something sm_parse_exp: - if (!ParseExpression(cc,NULL,TRUE)) + if (!ParseExpression(cc, NULL, TRUE)) throw('Compiler'); sm_semicolon: - if (comp_flags&CMPF_PRS_SEMICOLON) { - if (cc->token==';') + if (comp_flags & CMPF_PRS_SEMICOLON) + { + if (cc->token == ';') Lex(cc); - else if (cc->token!=',') - LexExcept(cc,"Missing ';' at"); + else if (cc->token != ',') + LexExcept(cc, "Missing ';' at"); } - if (cc->token!=',') goto sm_done; - } else + if (cc->token != ',') + goto sm_done; + } + else goto sm_done; //TK_EOF } } sm_done: - return fsp_flags&FSF_ASM; + return fsp_flags & FSF_ASM; } diff --git a/src/Home/FilesRefactored.DD b/src/Home/FilesRefactored.DD index 77060eb..5a8a39e 100755 --- a/src/Home/FilesRefactored.DD +++ b/src/Home/FilesRefactored.DD @@ -64,6 +64,7 @@ StartOS.CC OptPass789A.CC ParseExp.CC ParseLib.CC + ParseStatement.CC Templates.CC OpCodes.DD CompilerA.HH