mirror of
https://github.com/ccxvii/mujs.git
synced 2026-09-21 14:43:34 +08:00
Improve opcode naming.
This commit is contained in:
+10
-13
@@ -124,16 +124,16 @@ static void clval(JF, js_Ast *exp)
|
||||
{
|
||||
switch (exp->type) {
|
||||
case AST_IDENTIFIER:
|
||||
emitstring(J, F, OP_VAR, exp->string);
|
||||
emitstring(J, F, OP_AVAR, exp->string);
|
||||
break;
|
||||
case EXP_INDEX:
|
||||
cexp(J, F, exp->a);
|
||||
cexp(J, F, exp->b);
|
||||
emit(J, F, OP_INDEX);
|
||||
emit(J, F, OP_AINDEX);
|
||||
break;
|
||||
case EXP_MEMBER:
|
||||
cexp(J, F, exp->a);
|
||||
emitstring(J, F, OP_MEMBER, exp->b->string);
|
||||
emitstring(J, F, OP_AMEMBER, exp->b->string);
|
||||
break;
|
||||
default:
|
||||
jsC_error(J, exp, "invalid l-value in assignment");
|
||||
@@ -144,7 +144,7 @@ static void clval(JF, js_Ast *exp)
|
||||
static void assignop(JF, js_Ast *exp, int opcode)
|
||||
{
|
||||
clval(J, F, exp->a);
|
||||
emit(J, F, OP_DUPLOAD);
|
||||
emit(J, F, OP_DUP_LOAD);
|
||||
cexp(J, F, exp->b);
|
||||
emit(J, F, opcode);
|
||||
emit(J, F, OP_STORE);
|
||||
@@ -156,8 +156,7 @@ static void cexp(JF, js_Ast *exp)
|
||||
|
||||
switch (exp->type) {
|
||||
case AST_IDENTIFIER:
|
||||
emitstring(J, F, OP_VAR, exp->string);
|
||||
emit(J, F, OP_LOAD);
|
||||
emitstring(J, F, OP_LOADVAR, exp->string);
|
||||
break;
|
||||
|
||||
case AST_NUMBER: emitnumber(J, F, OP_CONST, exp->number); break;
|
||||
@@ -181,14 +180,12 @@ static void cexp(JF, js_Ast *exp)
|
||||
case EXP_INDEX:
|
||||
cexp(J, F, exp->a);
|
||||
cexp(J, F, exp->b);
|
||||
emit(J, F, OP_INDEX);
|
||||
emit(J, F, OP_LOAD);
|
||||
emit(J, F, OP_LOADINDEX);
|
||||
break;
|
||||
|
||||
case EXP_MEMBER:
|
||||
cexp(J, F, exp->a);
|
||||
emitstring(J, F, OP_MEMBER, exp->b->string);
|
||||
emit(J, F, OP_LOAD);
|
||||
emitstring(J, F, OP_LOADMEMBER, exp->b->string);
|
||||
break;
|
||||
|
||||
case EXP_CALL:
|
||||
@@ -281,7 +278,7 @@ static void cvardec(JF, js_Ast *vardec)
|
||||
cexp(J, F, vardec->b);
|
||||
else
|
||||
emit(J, F, OP_UNDEF);
|
||||
emitstring(J, F, OP_DEFVAR, vardec->a->string);
|
||||
emitstring(J, F, OP_VARDEC, vardec->a->string);
|
||||
}
|
||||
|
||||
static void cvardeclist(JF, js_Ast *list)
|
||||
@@ -346,9 +343,9 @@ static void cstm(JF, js_Ast *stm)
|
||||
|
||||
case STM_WITH:
|
||||
cexp(J, F, stm->a);
|
||||
emit(J, F, OP_PUSHWITH);
|
||||
emit(J, F, OP_WITH);
|
||||
cstm(J, F, stm->b);
|
||||
emit(J, F, OP_POPWITH);
|
||||
emit(J, F, OP_ENDWITH);
|
||||
break;
|
||||
|
||||
// switch
|
||||
|
||||
+22
-13
@@ -3,6 +3,9 @@
|
||||
|
||||
enum
|
||||
{
|
||||
OP_POP,
|
||||
OP_DUP,
|
||||
|
||||
OP_CONST,
|
||||
OP_UNDEF,
|
||||
OP_NULL,
|
||||
@@ -15,17 +18,24 @@ enum
|
||||
OP_OBJECT,
|
||||
OP_OBJECTPUT,
|
||||
|
||||
OP_DEFVAR,
|
||||
OP_VAR,
|
||||
OP_INDEX,
|
||||
OP_MEMBER,
|
||||
OP_VARDEC,
|
||||
OP_FUNDEC,
|
||||
OP_FUNEXP,
|
||||
|
||||
OP_LOADVAR,
|
||||
OP_LOADINDEX,
|
||||
OP_LOADMEMBER,
|
||||
OP_AVAR,
|
||||
OP_AINDEX,
|
||||
OP_AMEMBER,
|
||||
|
||||
OP_LOAD,
|
||||
OP_DUPLOAD,
|
||||
OP_DUP_LOAD,
|
||||
OP_STORE,
|
||||
|
||||
OP_CALL,
|
||||
OP_TCALL,
|
||||
OP_NEW,
|
||||
OP_CLOSURE,
|
||||
|
||||
OP_DELETE,
|
||||
OP_VOID,
|
||||
@@ -63,18 +73,17 @@ enum
|
||||
OP_DIV,
|
||||
OP_MOD,
|
||||
|
||||
OP_JUMP,
|
||||
OP_JTRUE,
|
||||
OP_JFALSE,
|
||||
|
||||
OP_TRY,
|
||||
OP_THROW,
|
||||
OP_RETURN,
|
||||
OP_PUSHWITH,
|
||||
OP_POPWITH,
|
||||
OP_DEBUGGER,
|
||||
|
||||
OP_POP,
|
||||
OP_WITH,
|
||||
OP_ENDWITH,
|
||||
|
||||
OP_JUMP,
|
||||
OP_JTRUE,
|
||||
OP_JFALSE,
|
||||
};
|
||||
|
||||
struct js_Function
|
||||
|
||||
@@ -620,13 +620,16 @@ void jsC_dumpfunction(js_State *J, js_Function *fun)
|
||||
switch (c) {
|
||||
case OP_CONST:
|
||||
case OP_OBJECTPUT:
|
||||
case OP_DEFVAR:
|
||||
case OP_VAR:
|
||||
case OP_MEMBER:
|
||||
case OP_VARDEC:
|
||||
case OP_LOADVAR:
|
||||
case OP_LOADMEMBER:
|
||||
case OP_AVAR:
|
||||
case OP_AMEMBER:
|
||||
pc(' ');
|
||||
jsC_dumpvalue(J, fun->klist[*p++]);
|
||||
break;
|
||||
case OP_CALL:
|
||||
case OP_TCALL:
|
||||
case OP_NEW:
|
||||
printf(" %d", *p++);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user