mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 03:50:16 +00:00
...
This commit is contained in:
parent
1bbba50003
commit
db0acc854c
@ -38,9 +38,9 @@ typedef struct pk_VM {
|
||||
py_TValue builtins; // builtins module
|
||||
py_TValue main; // __main__ module
|
||||
|
||||
void (*_ceval_on_step)(Frame*, Bytecode);
|
||||
unsigned char* (*_import_file)(const char*);
|
||||
void (*_stdout)(const char*, ...);
|
||||
void (*ceval_on_step)(Frame*, Bytecode);
|
||||
unsigned char* (*import_file)(const char*);
|
||||
void (*print)(const char*);
|
||||
|
||||
py_TValue last_retval;
|
||||
py_TValue curr_exception;
|
||||
|
@ -117,7 +117,8 @@ pk_FrameResult pk_VM__run_top_frame(pk_VM* self) {
|
||||
if(TOP()->type != tp_NoneType) {
|
||||
bool ok = py_repr(TOP());
|
||||
if(!ok) goto __ERROR;
|
||||
self->_stdout("%s\n", py_tostr(&self->last_retval));
|
||||
self->print(py_tostr(&self->last_retval));
|
||||
self->print("\n");
|
||||
}
|
||||
POP();
|
||||
DISPATCH();
|
||||
|
@ -11,13 +11,7 @@
|
||||
|
||||
static unsigned char* pk_default_import_file(const char* path) { return NULL; }
|
||||
|
||||
static void pk_default_stdout(const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
fflush(stdout);
|
||||
}
|
||||
static void pk_default_print(const char* data) { printf("%s", data); }
|
||||
|
||||
static void pk_TypeInfo__ctor(pk_TypeInfo* self,
|
||||
py_Name name,
|
||||
@ -54,9 +48,9 @@ void pk_VM__ctor(pk_VM* self) {
|
||||
self->builtins = *py_NIL;
|
||||
self->main = *py_NIL;
|
||||
|
||||
self->_ceval_on_step = NULL;
|
||||
self->_import_file = pk_default_import_file;
|
||||
self->_stdout = pk_default_stdout;
|
||||
self->ceval_on_step = NULL;
|
||||
self->import_file = pk_default_import_file;
|
||||
self->print = pk_default_print;
|
||||
|
||||
self->last_retval = *py_NIL;
|
||||
self->curr_exception = *py_NIL;
|
||||
@ -168,10 +162,10 @@ void pk_VM__ctor(pk_VM* self) {
|
||||
"ImportError",
|
||||
"AssertionError",
|
||||
"KeyError",
|
||||
NULL, // sentinel
|
||||
NULL, // sentinel
|
||||
};
|
||||
const char** it = builtin_exceptions;
|
||||
while(*it){
|
||||
while(*it) {
|
||||
py_Type type = pk_newtype(*it, tp_Exception, &self->builtins, NULL, false, true);
|
||||
py_setdict(&self->builtins, py_name(*it), py_tpobject(type));
|
||||
it++;
|
||||
@ -269,9 +263,7 @@ bool pk__parse_int_slice(py_Ref slice, int length, int* start, int* stop, int* s
|
||||
|
||||
bool pk__normalize_index(int* index, int length) {
|
||||
if(*index < 0) *index += length;
|
||||
if(*index < 0 || *index >= length) {
|
||||
return IndexError("%d not in [0, %d)", *index, length);
|
||||
}
|
||||
if(*index < 0 || *index >= length) { return IndexError("%d not in [0, %d)", *index, length); }
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -285,9 +277,7 @@ py_Type pk_newtype(const char* name,
|
||||
py_Type index = types->count;
|
||||
pk_TypeInfo* ti = c11_vector__emplace(types);
|
||||
pk_TypeInfo__ctor(ti, py_name(name), index, base, module ? *module : *py_NIL);
|
||||
if(!dtor && base){
|
||||
dtor = c11__at(pk_TypeInfo, types, base)->dtor;
|
||||
}
|
||||
if(!dtor && base) { dtor = c11__at(pk_TypeInfo, types, base)->dtor; }
|
||||
ti->dtor = dtor;
|
||||
ti->is_python = is_python;
|
||||
ti->is_sealed = is_sealed;
|
||||
|
@ -193,7 +193,7 @@ static bool _py_builtins__print(int argc, py_Ref argv) {
|
||||
}
|
||||
c11_sbuf__write_sv(&buf, end);
|
||||
c11_string* res = c11_sbuf__submit(&buf);
|
||||
pk_current_vm->_stdout("%s", res->data);
|
||||
pk_current_vm->print(res->data);
|
||||
c11_string__delete(res);
|
||||
py_newnone(py_retval());
|
||||
return true;
|
||||
|
@ -122,7 +122,8 @@ bool py_checkexc() {
|
||||
void py_printexc() {
|
||||
char* msg = py_formatexc();
|
||||
if(!msg) return;
|
||||
pk_current_vm->_stdout("%s\n", msg);
|
||||
pk_current_vm->print(msg);
|
||||
pk_current_vm->print("\n");
|
||||
free(msg);
|
||||
}
|
||||
|
||||
|
@ -168,7 +168,8 @@ static void disassemble(CodeObject* co) {
|
||||
}
|
||||
|
||||
c11_string* output = c11_sbuf__submit(&ss);
|
||||
pk_current_vm->_stdout("%s\n", output->data);
|
||||
pk_current_vm->print(output->data);
|
||||
pk_current_vm->print("\n");
|
||||
c11_string__delete(output);
|
||||
c11_vector__dtor(&jumpTargets);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user