mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
remove is_virtual
This commit is contained in:
parent
8f7e9f5f6c
commit
5dba2cd8e6
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#define BC_NOARG 0
|
#define BC_NOARG 0
|
||||||
#define BC_KEEPLINE -1
|
#define BC_KEEPLINE -1
|
||||||
|
#define BC_RETURN_VIRTUAL 5
|
||||||
|
|
||||||
typedef enum FuncType {
|
typedef enum FuncType {
|
||||||
FuncType_UNSET,
|
FuncType_UNSET,
|
||||||
@ -62,7 +63,6 @@ typedef struct CodeBlock {
|
|||||||
|
|
||||||
typedef struct BytecodeEx {
|
typedef struct BytecodeEx {
|
||||||
int lineno; // line number for each bytecode
|
int lineno; // line number for each bytecode
|
||||||
bool is_virtual; // whether this bytecode is virtual (not in source code)
|
|
||||||
int iblock; // block index
|
int iblock; // block index
|
||||||
} BytecodeEx;
|
} BytecodeEx;
|
||||||
|
|
||||||
|
@ -76,7 +76,6 @@ static int Ctx__prepare_loop_divert(Ctx* self, int line, bool is_break);
|
|||||||
static int Ctx__enter_block(Ctx* self, CodeBlockType type);
|
static int Ctx__enter_block(Ctx* self, CodeBlockType type);
|
||||||
static void Ctx__exit_block(Ctx* self);
|
static void Ctx__exit_block(Ctx* self);
|
||||||
static int Ctx__emit_(Ctx* self, Opcode opcode, uint16_t arg, int line);
|
static int Ctx__emit_(Ctx* self, Opcode opcode, uint16_t arg, int line);
|
||||||
static int Ctx__emit_virtual(Ctx* self, Opcode opcode, uint16_t arg, int line, bool virtual);
|
|
||||||
// static void Ctx__revert_last_emit_(Ctx* self);
|
// static void Ctx__revert_last_emit_(Ctx* self);
|
||||||
static int Ctx__emit_int(Ctx* self, int64_t value, int line);
|
static int Ctx__emit_int(Ctx* self, int64_t value, int line);
|
||||||
static void Ctx__patch_jump(Ctx* self, int index);
|
static void Ctx__patch_jump(Ctx* self, int index);
|
||||||
@ -1177,9 +1176,9 @@ static void Ctx__s_emit_decorators(Ctx* self, int count) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int Ctx__emit_virtual(Ctx* self, Opcode opcode, uint16_t arg, int line, bool is_virtual) {
|
static int Ctx__emit_(Ctx* self, Opcode opcode, uint16_t arg, int line) {
|
||||||
Bytecode bc = {(uint8_t)opcode, arg};
|
Bytecode bc = {(uint8_t)opcode, arg};
|
||||||
BytecodeEx bcx = {line, is_virtual, self->curr_iblock};
|
BytecodeEx bcx = {line, self->curr_iblock};
|
||||||
c11_vector__push(Bytecode, &self->co->codes, bc);
|
c11_vector__push(Bytecode, &self->co->codes, bc);
|
||||||
c11_vector__push(BytecodeEx, &self->co->codes_ex, bcx);
|
c11_vector__push(BytecodeEx, &self->co->codes_ex, bcx);
|
||||||
int i = self->co->codes.length - 1;
|
int i = self->co->codes.length - 1;
|
||||||
@ -1188,10 +1187,6 @@ static int Ctx__emit_virtual(Ctx* self, Opcode opcode, uint16_t arg, int line, b
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int Ctx__emit_(Ctx* self, Opcode opcode, uint16_t arg, int line) {
|
|
||||||
return Ctx__emit_virtual(self, opcode, arg, line, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static void Ctx__revert_last_emit_(Ctx* self) {
|
// static void Ctx__revert_last_emit_(Ctx* self) {
|
||||||
// c11_vector__pop(&self->co->codes);
|
// c11_vector__pop(&self->co->codes);
|
||||||
// c11_vector__pop(&self->co->codes_ex);
|
// c11_vector__pop(&self->co->codes_ex);
|
||||||
@ -1512,7 +1507,7 @@ static Error* pop_context(Compiler* self) {
|
|||||||
// previously, we only do this if the last opcode is not a return
|
// previously, we only do this if the last opcode is not a return
|
||||||
// however, this is buggy...since there may be a jump to the end (out of bound) even if the last
|
// however, this is buggy...since there may be a jump to the end (out of bound) even if the last
|
||||||
// opcode is a return
|
// opcode is a return
|
||||||
Ctx__emit_virtual(ctx(), OP_RETURN_VALUE, 1, BC_KEEPLINE, true);
|
Ctx__emit_(ctx(), OP_RETURN_VALUE, BC_RETURN_VIRTUAL, BC_KEEPLINE);
|
||||||
|
|
||||||
CodeObject* co = ctx()->co;
|
CodeObject* co = ctx()->co;
|
||||||
// find the last valid token
|
// find the last valid token
|
||||||
|
@ -105,6 +105,8 @@ __NEXT_STEP:
|
|||||||
byte = co_codes[frame->ip];
|
byte = co_codes[frame->ip];
|
||||||
|
|
||||||
if(self->trace_info.func) {
|
if(self->trace_info.func) {
|
||||||
|
bool is_virtual = byte.op == OP_RETURN_VALUE && byte.arg == BC_RETURN_VIRTUAL;
|
||||||
|
if(!is_virtual) {
|
||||||
SourceLocation loc = Frame__source_location(frame);
|
SourceLocation loc = Frame__source_location(frame);
|
||||||
SourceLocation prev_loc = self->trace_info.prev_loc;
|
SourceLocation prev_loc = self->trace_info.prev_loc;
|
||||||
if(loc.lineno != prev_loc.lineno || loc.src != prev_loc.src) {
|
if(loc.lineno != prev_loc.lineno || loc.src != prev_loc.src) {
|
||||||
@ -114,6 +116,7 @@ __NEXT_STEP:
|
|||||||
self->trace_info.func(frame, TRACE_EVENT_LINE);
|
self->trace_info.func(frame, TRACE_EVENT_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if PK_ENABLE_WATCHDOG
|
#if PK_ENABLE_WATCHDOG
|
||||||
if(self->watchdog_info.max_reset_time > 0) {
|
if(self->watchdog_info.max_reset_time > 0) {
|
||||||
@ -1219,7 +1222,8 @@ __NEXT_STEP:
|
|||||||
c11__unreachable();
|
c11__unreachable();
|
||||||
|
|
||||||
__ERROR:
|
__ERROR:
|
||||||
py_BaseException__stpush(frame, &self->curr_exception,
|
py_BaseException__stpush(frame,
|
||||||
|
&self->curr_exception,
|
||||||
frame->co->src,
|
frame->co->src,
|
||||||
Frame__lineno(frame),
|
Frame__lineno(frame),
|
||||||
!frame->is_locals_special ? frame->co->name->data : NULL);
|
!frame->is_locals_special ? frame->co->name->data : NULL);
|
||||||
@ -1306,7 +1310,10 @@ bool pk_stack_binaryop(VM* self, py_Name op, py_Name rop) {
|
|||||||
|
|
||||||
py_Type lhs_t = rop ? TOP()->type : SECOND()->type;
|
py_Type lhs_t = rop ? TOP()->type : SECOND()->type;
|
||||||
py_Type rhs_t = rop ? SECOND()->type : TOP()->type;
|
py_Type rhs_t = rop ? SECOND()->type : TOP()->type;
|
||||||
return TypeError("unsupported operand type(s) for '%s': '%t' and '%t'", pk_op2str(op), lhs_t, rhs_t);
|
return TypeError("unsupported operand type(s) for '%s': '%t' and '%t'",
|
||||||
|
pk_op2str(op),
|
||||||
|
lhs_t,
|
||||||
|
rhs_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool py_binaryop(py_Ref lhs, py_Ref rhs, py_Name op, py_Name rop) {
|
bool py_binaryop(py_Ref lhs, py_Ref rhs, py_Name op, py_Name rop) {
|
||||||
|
@ -44,7 +44,7 @@ static bool disassemble(CodeObject* co) {
|
|||||||
c11_sbuf__write_cstr(&ss, buf);
|
c11_sbuf__write_cstr(&ss, buf);
|
||||||
|
|
||||||
c11_sbuf__write_cstr(&ss, pk_opname(byte.op));
|
c11_sbuf__write_cstr(&ss, pk_opname(byte.op));
|
||||||
c11_sbuf__write_char(&ss, ex.is_virtual ? '*' : ' ');
|
c11_sbuf__write_char(&ss, ' ');
|
||||||
int padding = 24 - strlen(pk_opname(byte.op));
|
int padding = 24 - strlen(pk_opname(byte.op));
|
||||||
for(int j = 0; j < padding; j++)
|
for(int j = 0; j < padding; j++)
|
||||||
c11_sbuf__write_char(&ss, ' ');
|
c11_sbuf__write_char(&ss, ' ');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user