📝 change some identifiers' name.

This commit is contained in:
ValKmjolnir
2022-07-08 18:16:00 +08:00
parent 5d4cff0aa8
commit 11e9567b55
4 changed files with 390 additions and 395 deletions
+6 -7
View File
@@ -127,18 +127,17 @@ double str2num(const char* str)
return is_negative?-ret_num:ret_num;
}
int utf8_hdchk(char head)
int utf8_hdchk(const char head)
{
// RFC-2279 but now we use RFC-3629 so nbytes is less than 4
uint8_t c=(uint8_t)head;
uint32_t nbytes=0;
const uint8_t c=(uint8_t)head;
if((c>>5)==0x06) // 110x xxxx (10xx xxxx)^1
nbytes=1;
return 1;
if((c>>4)==0x0e) // 1110 xxxx (10xx xxxx)^2
nbytes=2;
return 2;
if((c>>3)==0x1e) // 1111 0xxx (10xx xxxx)^3
nbytes=3;
return nbytes;
return 3;
return 0;
}
std::string chrhex(const char c)
+33 -33
View File
@@ -17,8 +17,8 @@ enum op_code
op_newf, // push new function to the stack
op_happ, // hash append
op_para, // normal parameter
op_defpara, // default parameter
op_dynpara, // dynamic parameter
op_deft, // default parameter
op_dyn, // dynamic parameter
op_unot, // !
op_usub, // -
op_add, // +
@@ -68,7 +68,7 @@ enum op_code
op_callfv, // call function(vector as parameters)
op_callfh, // call function(hash as parameters)
op_callb, // call builtin-function
op_slcbegin,// begin of slice like: vec[1,2,3:6,0,-1]
op_slcbeg, // begin of slice like: vec[1,2,3:6,0,-1]
op_slcend, // end of slice
op_slc, // slice like vec[1]
op_slc2, // slice like vec[nil:10]
@@ -100,8 +100,8 @@ struct
{op_newf, "newf "},
{op_happ, "happ "},
{op_para, "para "},
{op_defpara, "def "},
{op_dynpara, "dyn "},
{op_deft, "def "},
{op_dyn, "dyn "},
{op_unot, "not "},
{op_usub, "usub "},
{op_add, "add "},
@@ -151,7 +151,7 @@ struct
{op_callfv, "callfv"},
{op_callfh, "callfh"},
{op_callb, "callb "},
{op_slcbegin,"slcbeg"},
{op_slcbeg, "slcbeg"},
{op_slcend, "slcend"},
{op_slc, "slc "},
{op_slc2, "slc2 "},
@@ -189,8 +189,8 @@ private:
nasal_err& nerr;
const std::string* file;
std::stack<uint32_t> in_iterloop;
std::unordered_map<double,int> num_table;
std::unordered_map<std::string,int> str_table;
std::unordered_map<double,uint32_t> num_table;
std::unordered_map<std::string,uint32_t> str_table;
std::vector<double> num_res;
std::vector<std::string> str_res;
std::vector<opcode> code;
@@ -206,8 +206,8 @@ private:
std::stack<uint32_t> festk;
void die(std::string,const uint32_t);
void regist_number(const double);
void regist_string(const std::string&);
void regist_num(const double);
void regist_str(const std::string&);
void find_symbol(const nasal_ast&);
void add_sym(const std::string&);
int local_find(const std::string&);
@@ -261,21 +261,21 @@ void nasal_codegen::die(std::string info,const uint32_t line)
nerr.err("code",line,info);
}
void nasal_codegen::regist_number(const double num)
void nasal_codegen::regist_num(const double num)
{
int size=num_table.size();
if(!num_table.count(num))
{
uint32_t size=num_table.size();
num_table[num]=size;
num_res.push_back(num);
}
}
void nasal_codegen::regist_string(const std::string& str)
void nasal_codegen::regist_str(const std::string& str)
{
int size=str_table.size();
if(!str_table.count(str))
{
uint32_t size=str_table.size();
str_table[str]=size;
str_res.push_back(str);
}
@@ -356,13 +356,13 @@ void nasal_codegen::gen(uint8_t op,uint32_t num,uint32_t line)
void nasal_codegen::num_gen(const nasal_ast& ast)
{
double num=ast.num();
regist_number(num);
regist_num(num);
gen(op_pnum,num_table[num],ast.line());
}
void nasal_codegen::str_gen(const nasal_ast& ast)
{
regist_string(ast.str());
regist_str(ast.str());
gen(op_pstr,str_table[ast.str()],ast.line());
}
@@ -380,7 +380,7 @@ void nasal_codegen::hash_gen(const nasal_ast& ast)
{
calc_gen(node[1]);
const std::string& str=node[0].str();
regist_string(str);
regist_str(str);
gen(op_happ,str_table[str],node.line());
}
}
@@ -405,15 +405,15 @@ void nasal_codegen::func_gen(const nasal_ast& ast)
const std::string& str=tmp.str();
if(str=="me")
die("\"me\" should not be a parameter",tmp.line());
regist_string(str);
regist_str(str);
switch(tmp.type())
{
case ast_id:gen(op_para,str_table[str],tmp.line());break;
case ast_default:
calc_gen(tmp[0]);
gen(op_defpara,str_table[str],tmp.line());
gen(op_deft,str_table[str],tmp.line());
break;
case ast_dynamic:gen(op_dynpara,str_table[str],tmp.line());break;
case ast_dynamic:gen(op_dyn,str_table[str],tmp.line());break;
}
add_sym(str);
}
@@ -492,7 +492,7 @@ void nasal_codegen::call_id(const nasal_ast& ast)
void nasal_codegen::call_hash(const nasal_ast& ast)
{
regist_string(ast.str());
regist_str(ast.str());
gen(op_callh,str_table[ast.str()],ast.line());
}
@@ -505,7 +505,7 @@ void nasal_codegen::call_vec(const nasal_ast& ast)
gen(op_callv,0,ast[0].line());
return;
}
gen(op_slcbegin,0,ast.line());
gen(op_slcbeg,0,ast.line());
for(auto& tmp:ast.child())
{
if(tmp.type()!=ast_subvec)
@@ -614,7 +614,7 @@ void nasal_codegen::mcall_vec(const nasal_ast& ast)
void nasal_codegen::mcall_hash(const nasal_ast& ast)
{
regist_string(ast.str());
regist_str(ast.str());
gen(op_mcallh,str_table[ast.str()],ast.line());
}
@@ -1041,7 +1041,7 @@ void nasal_codegen::calc_gen(const nasal_ast& ast)
gen(ast.type()-ast_addeq+op_addeq,0,ast.line());
else
{
regist_number(ast[1].num());
regist_num(ast[1].num());
gen(ast.type()-ast_addeq+op_addeqc,num_table[ast[1].num()],ast.line());
}
break;
@@ -1049,7 +1049,7 @@ void nasal_codegen::calc_gen(const nasal_ast& ast)
if(ast[1].type()!=ast_str)
calc_gen(ast[1]);
else
regist_string(ast[1].str());
regist_str(ast[1].str());
mcall(ast[0]);
if(ast[1].type()!=ast_str)
gen(op_lnkeq,0,ast.line());
@@ -1068,7 +1068,7 @@ void nasal_codegen::calc_gen(const nasal_ast& ast)
}
else
{
regist_number(ast[1].num());
regist_num(ast[1].num());
gen(ast.type()-ast_add+op_addc,num_table[ast[1].num()],ast.line());
}
break;
@@ -1081,7 +1081,7 @@ void nasal_codegen::calc_gen(const nasal_ast& ast)
}
else
{
regist_string(ast[1].str());
regist_str(ast[1].str());
gen(op_lnkc,str_table[ast[1].str()],ast.line());
}
break;
@@ -1100,7 +1100,7 @@ void nasal_codegen::calc_gen(const nasal_ast& ast)
}
else
{
regist_number(ast[1].num());
regist_num(ast[1].num());
gen(ast.type()-ast_less+op_lessc,num_table[ast[1].num()],ast.line());
}
break;
@@ -1225,8 +1225,8 @@ void nasal_codegen::compile(const nasal_parse& parse,const nasal_import& import)
file=import.get_file().data();
in_iterloop.push(0);
regist_number(0);
regist_number(1);
regist_num(0);
regist_num(1);
find_symbol(parse.ast()); // search symbols first
gen(op_intg,global.size(),0);
@@ -1299,7 +1299,7 @@ void nasal_codegen::print_op(uint32_t index)
case op_happ: case op_pstr:
case op_lnkc:
case op_callh: case op_mcallh:
case op_para: case op_defpara:case op_dynpara:
case op_para: case op_deft: case op_dyn:
printf("0x%x (\"%s\")\n",c.num,rawstr(str_res[c.num],16).c_str());break;
default:printf("\n");break;
}
@@ -1308,11 +1308,11 @@ void nasal_codegen::print_op(uint32_t index)
void nasal_codegen::print()
{
for(auto& num:num_res)
std::cout<<" .number "<<num<<'\n';
std::cout<<" .number "<<num<<"\n";
for(auto& str:str_res)
std::cout<<" .symbol \""<<rawstr(str)<<"\"\n";
std::cout<<"\n";
for(uint32_t i=0;i<code.size();++i)
for(size_t i=0;i<code.size();++i)
print_op(i);
}
+7 -7
View File
@@ -187,7 +187,7 @@ void nasal_dbg::run(
&&vmexit, &&intg, &&intl, &&loadg,
&&loadl, &&loadu, &&pnum, &&pnil,
&&pstr, &&newv, &&newh, &&newf,
&&happ, &&para, &&defpara,&&dynpara,
&&happ, &&para, &&deft, &&dyn,
&&unot, &&usub, &&add, &&sub,
&&mul, &&div, &&lnk, &&addc,
&&subc, &&mulc, &&divc, &&lnkc,
@@ -197,10 +197,10 @@ void nasal_dbg::run(
&&neq, &&less, &&leq, &&grt,
&&geq, &&lessc, &&leqc, &&grtc,
&&geqc, &&pop, &&jmp, &&jt,
&&jf, &&counter, &&findex, &&feach,
&&jf, &&cnt, &&findex, &&feach,
&&callg, &&calll, &&upval, &&callv,
&&callvi, &&callh, &&callfv, &&callfh,
&&callb, &&slcbegin, &&slcend, &&slc,
&&callb, &&slcbeg, &&slcend, &&slc,
&&slc2, &&mcallg, &&mcalll, &&mupval,
&&mcallv, &&mcallh, &&ret
};
@@ -235,8 +235,8 @@ newh: dbg(opr_newh );
newf: dbg(opr_newf );
happ: dbg(opr_happ );
para: dbg(opr_para );
defpara: dbg(opr_defpara );
dynpara: dbg(opr_dynpara );
deft: dbg(opr_deft );
dyn: dbg(opr_dyn );
unot: dbg(opr_unot );
usub: dbg(opr_usub );
add: dbg(opr_add );
@@ -274,7 +274,7 @@ pop: dbg(opr_pop );
jmp: dbg(opr_jmp );
jt: dbg(opr_jt );
jf: dbg(opr_jf );
counter: dbg(opr_counter );
cnt: dbg(opr_cnt );
findex: dbg(opr_findex);
feach: dbg(opr_feach );
callg: dbg(opr_callg );
@@ -286,7 +286,7 @@ callh: dbg(opr_callh );
callfv: dbg(opr_callfv);
callfh: dbg(opr_callfh);
callb: dbg(opr_callb );
slcbegin:dbg(opr_slcbegin);
slcbeg: dbg(opr_slcbeg);
slcend: dbg(opr_slcend);
slc: dbg(opr_slc );
slc2: dbg(opr_slc2 );
+22 -26
View File
@@ -61,8 +61,8 @@ protected:
void opr_newf();
void opr_happ();
void opr_para();
void opr_defpara();
void opr_dynpara();
void opr_deft();
void opr_dyn();
void opr_unot();
void opr_usub();
void opr_add();
@@ -100,7 +100,7 @@ protected:
void opr_jmp();
void opr_jt();
void opr_jf();
void opr_counter();
void opr_cnt();
void opr_findex();
void opr_feach();
void opr_callg();
@@ -112,7 +112,7 @@ protected:
void opr_callfv();
void opr_callfh();
void opr_callb();
void opr_slcbegin();
void opr_slcbeg();
void opr_slcend();
void opr_slc();
void opr_slc2();
@@ -179,13 +179,9 @@ void nasal_vm::bytecodeinfo(const char* header,const uint32_t p)
{
const opcode& c=bytecode[p];
printf("%s0x%.8x: %.2x %.2x %.2x %.2x %.2x %s ",
header,
p,
c.op,
uint8_t((c.num>>24)&0xff),
uint8_t((c.num>>16)&0xff),
uint8_t((c.num>>8)&0xff),
uint8_t(c.num&0xff),
header,p,c.op,
uint8_t((c.num>>24)&0xff),uint8_t((c.num>>16)&0xff),
uint8_t((c.num>>8)&0xff),uint8_t(c.num&0xff),
code_table[c.op].name
);
switch(c.op)
@@ -217,7 +213,7 @@ void nasal_vm::bytecodeinfo(const char* header,const uint32_t p)
case op_happ: case op_pstr:
case op_lnkc:
case op_callh: case op_mcallh:
case op_para: case op_defpara:case op_dynpara:
case op_para: case op_deft: case op_dyn:
printf("0x%x (\"%s\")",c.num,rawstr(str_table[c.num],16).c_str());
break;
default:printf("0x%x",c.num);break;
@@ -471,14 +467,14 @@ inline void nasal_vm::opr_para()
func.keys[str_table[imm[pc]]]=func.psize;// func->size has 1 place reserved for "me"
func.local[func.psize++]={vm_none};
}
inline void nasal_vm::opr_defpara()
inline void nasal_vm::opr_deft()
{
nasal_ref val=top[0];
nasal_func& func=(--top)[0].func();
func.keys[str_table[imm[pc]]]=func.psize;// func->size has 1 place reserved for "me"
func.local[func.psize++]=val;
}
inline void nasal_vm::opr_dynpara()
inline void nasal_vm::opr_dyn()
{
top[0].func().dynpara=imm[pc];
}
@@ -646,7 +642,7 @@ inline void nasal_vm::opr_jf()
pc=imm[pc]-1;
--top;
}
inline void nasal_vm::opr_counter()
inline void nasal_vm::opr_cnt()
{
(++top)[0]={vm_cnt,(int64_t)-1};
if(top[-1].type!=vm_vec)
@@ -829,7 +825,7 @@ inline void nasal_vm::opr_callb()
if(top[0].type==vm_none)
die("native function error.");
}
inline void nasal_vm::opr_slcbegin()
inline void nasal_vm::opr_slcbeg()
{
// +--------------+
// | slice_vector | <-- top[0]
@@ -998,13 +994,12 @@ void nasal_vm::run(
{
detail_info=detail;
init(gen.get_strs(),gen.get_nums(),gen.get_code(),linker.get_file(),argv);
uint64_t count[op_ret+1]={0};
const void* oprs[]=
{
&&vmexit, &&intg, &&intl, &&loadg,
&&loadl, &&loadu, &&pnum, &&pnil,
&&pstr, &&newv, &&newh, &&newf,
&&happ, &&para, &&defpara,&&dynpara,
&&happ, &&para, &&deft, &&dyn,
&&unot, &&usub, &&add, &&sub,
&&mul, &&div, &&lnk, &&addc,
&&subc, &&mulc, &&divc, &&lnkc,
@@ -1014,13 +1009,14 @@ void nasal_vm::run(
&&neq, &&less, &&leq, &&grt,
&&geq, &&lessc, &&leqc, &&grtc,
&&geqc, &&pop, &&jmp, &&jt,
&&jf, &&counter, &&findex, &&feach,
&&jf, &&cnt, &&findex, &&feach,
&&callg, &&calll, &&upval, &&callv,
&&callvi, &&callh, &&callfv, &&callfh,
&&callb, &&slcbegin, &&slcend, &&slc,
&&callb, &&slcbeg, &&slcend, &&slc,
&&slc2, &&mcallg, &&mcalll, &&mupval,
&&mcallv, &&mcallh, &&ret
};
uint64_t count[op_ret+1]={0};
std::vector<const void*> code;
for(auto& i:gen.get_code())
{
@@ -1041,9 +1037,9 @@ vmexit:
imm.clear();
return;
// may cause stackoverflow
#define exec_operand(op,num) {op();++count[num];if(top<canary)goto *code[++pc];goto vmexit;}
#define exec_operand(op,num) {++count[num];op();if(top<canary)goto *code[++pc];goto vmexit;}
// do not cause stackoverflow
#define exec_opnodie(op,num) {op();++count[num];goto *code[++pc];}
#define exec_opnodie(op,num) {++count[num];op();goto *code[++pc];}
intg: exec_opnodie(opr_intg ,op_intg ); // +imm[pc] (detected at codegen)
intl: exec_opnodie(opr_intl ,op_intl ); // -0
@@ -1058,8 +1054,8 @@ newh: exec_operand(opr_newh ,op_newh ); // +1
newf: exec_operand(opr_newf ,op_newf ); // +1
happ: exec_opnodie(opr_happ ,op_happ ); // -1
para: exec_opnodie(opr_para ,op_para ); // -0
defpara: exec_opnodie(opr_defpara ,op_defpara ); // -1
dynpara: exec_opnodie(opr_dynpara ,op_dynpara ); // -0
deft: exec_opnodie(opr_deft ,op_deft ); // -1
dyn: exec_opnodie(opr_dyn ,op_dyn ); // -0
unot: exec_opnodie(opr_unot ,op_unot ); // -0
usub: exec_opnodie(opr_usub ,op_usub ); // -0
add: exec_opnodie(opr_add ,op_add ); // -1
@@ -1097,7 +1093,7 @@ pop: exec_opnodie(opr_pop ,op_pop ); // -1
jmp: exec_opnodie(opr_jmp ,op_jmp ); // -0
jt: exec_opnodie(opr_jt ,op_jt ); // -0
jf: exec_opnodie(opr_jf ,op_jf ); // -1
counter: exec_opnodie(opr_counter ,op_cnt ); // -0
cnt: exec_opnodie(opr_cnt ,op_cnt ); // -0
findex: exec_operand(opr_findex,op_findex); // +1
feach: exec_operand(opr_feach ,op_feach ); // +1
callg: exec_operand(opr_callg ,op_callg ); // +1
@@ -1109,7 +1105,7 @@ callh: exec_opnodie(opr_callh ,op_callh ); // -0
callfv: exec_opnodie(opr_callfv,op_callfv); // check in the function
callfh: exec_opnodie(opr_callfh,op_callfh); // check in the function
callb: exec_opnodie(opr_callb ,op_callb ); // -0
slcbegin:exec_operand(opr_slcbegin,op_slcbegin); // +1
slcbeg: exec_operand(opr_slcbeg,op_slcbeg); // +1
slcend: exec_opnodie(opr_slcend,op_slcend); // -1
slc: exec_opnodie(opr_slc ,op_slc ); // -1
slc2: exec_opnodie(opr_slc2 ,op_slc2 ); // -2