optimize vm set operators
This commit is contained in:
parent
98005c4832
commit
c9245bbe84
|
@ -811,7 +811,6 @@ codegen_set(pic_state *pic, codegen_context *cxt, pic_value obj, bool tailpos)
|
||||||
type = pic_sym_ptr(pic_list_ref(pic, var, 0));
|
type = pic_sym_ptr(pic_list_ref(pic, var, 0));
|
||||||
if (type == pic->sGREF) {
|
if (type == pic->sGREF) {
|
||||||
emit_i(pic, cxt, OP_GSET, index_symbol(pic, cxt, pic_sym_ptr(pic_list_ref(pic, var, 1))));
|
emit_i(pic, cxt, OP_GSET, index_symbol(pic, cxt, pic_sym_ptr(pic_list_ref(pic, var, 1))));
|
||||||
emit_n(pic, cxt, OP_PUSHUNDEF);
|
|
||||||
emit_ret(pic, cxt, tailpos);
|
emit_ret(pic, cxt, tailpos);
|
||||||
}
|
}
|
||||||
else if (type == pic->sCREF) {
|
else if (type == pic->sCREF) {
|
||||||
|
@ -821,7 +820,6 @@ codegen_set(pic_state *pic, codegen_context *cxt, pic_value obj, bool tailpos)
|
||||||
depth = pic_int(pic_list_ref(pic, var, 1));
|
depth = pic_int(pic_list_ref(pic, var, 1));
|
||||||
name = pic_sym_ptr(pic_list_ref(pic, var, 2));
|
name = pic_sym_ptr(pic_list_ref(pic, var, 2));
|
||||||
emit_r(pic, cxt, OP_CSET, depth, index_capture(cxt, name, depth));
|
emit_r(pic, cxt, OP_CSET, depth, index_capture(cxt, name, depth));
|
||||||
emit_n(pic, cxt, OP_PUSHUNDEF);
|
|
||||||
emit_ret(pic, cxt, tailpos);
|
emit_ret(pic, cxt, tailpos);
|
||||||
}
|
}
|
||||||
else if (type == pic->sLREF) {
|
else if (type == pic->sLREF) {
|
||||||
|
@ -831,11 +829,9 @@ codegen_set(pic_state *pic, codegen_context *cxt, pic_value obj, bool tailpos)
|
||||||
name = pic_sym_ptr(pic_list_ref(pic, var, 1));
|
name = pic_sym_ptr(pic_list_ref(pic, var, 1));
|
||||||
if ((i = index_capture(cxt, name, 0)) != -1) {
|
if ((i = index_capture(cxt, name, 0)) != -1) {
|
||||||
emit_i(pic, cxt, OP_LSET, i + (int)cxt->args->len + (int)cxt->locals->len + 1);
|
emit_i(pic, cxt, OP_LSET, i + (int)cxt->args->len + (int)cxt->locals->len + 1);
|
||||||
emit_n(pic, cxt, OP_PUSHUNDEF);
|
|
||||||
emit_ret(pic, cxt, tailpos);
|
emit_ret(pic, cxt, tailpos);
|
||||||
} else {
|
} else {
|
||||||
emit_i(pic, cxt, OP_LSET, index_local(cxt, name));
|
emit_i(pic, cxt, OP_LSET, index_local(cxt, name));
|
||||||
emit_n(pic, cxt, OP_PUSHUNDEF);
|
|
||||||
emit_ret(pic, cxt, tailpos);
|
emit_ret(pic, cxt, tailpos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -643,6 +643,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
|
|
||||||
val = POP();
|
val = POP();
|
||||||
pic_dict_set(pic, pic->globals, sym, val);
|
pic_dict_set(pic, pic->globals, sym, val);
|
||||||
|
PUSH(pic_undef_value());
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
CASE(OP_LREF) {
|
CASE(OP_LREF) {
|
||||||
|
@ -671,6 +672,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pic->ci->fp[c.u.i] = POP();
|
pic->ci->fp[c.u.i] = POP();
|
||||||
|
PUSH(pic_undef_value());
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
CASE(OP_CREF) {
|
CASE(OP_CREF) {
|
||||||
|
@ -693,6 +695,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
cxt = cxt->up;
|
cxt = cxt->up;
|
||||||
}
|
}
|
||||||
cxt->regs[c.u.r.idx] = POP();
|
cxt->regs[c.u.r.idx] = POP();
|
||||||
|
PUSH(pic_undef_value());
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
CASE(OP_JMP) {
|
CASE(OP_JMP) {
|
||||||
|
|
Loading…
Reference in New Issue