mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
...
This commit is contained in:
parent
ef21ff266b
commit
f91c83e4a1
@ -100,10 +100,12 @@ void gc_marker_ex(CVM* vm) {
|
||||
for(PyObject* obj: *vm->c_data) if(obj!=nullptr) OBJ_MARK(obj);
|
||||
}
|
||||
|
||||
static OutputHandler stdout_handler = nullptr;
|
||||
static OutputHandler stderr_handler = nullptr;
|
||||
|
||||
static void noop_output_handler(VM* vm, const Str& str) {
|
||||
(void) vm;
|
||||
(void) str;
|
||||
void pkpy_set_output_handlers(pkpy_vm*, OutputHandler stdout_handler, OutputHandler stderr_handler){
|
||||
::stdout_handler = stdout_handler;
|
||||
::stderr_handler = stderr_handler;
|
||||
}
|
||||
|
||||
pkpy_vm* pkpy_vm_create(bool use_stdio, bool enable_os) {
|
||||
@ -113,8 +115,14 @@ pkpy_vm* pkpy_vm_create(bool use_stdio, bool enable_os) {
|
||||
vm->_gc_marker_ex = (void (*)(VM*)) gc_marker_ex;
|
||||
|
||||
if (!use_stdio) {
|
||||
vm->_stdout = noop_output_handler;
|
||||
vm->_stderr = noop_output_handler;
|
||||
vm->_stdout = [](VM* vm, const Str& s){
|
||||
std::string str = s.str();
|
||||
if (stdout_handler != nullptr) stdout_handler((pkpy_vm*)vm, str.c_str());
|
||||
};
|
||||
vm->_stderr = [](VM* vm, const Str& s){
|
||||
std::string str = s.str();
|
||||
if (stderr_handler != nullptr) stderr_handler((pkpy_vm*)vm, str.c_str());
|
||||
};
|
||||
}
|
||||
|
||||
return (pkpy_vm*) vm;
|
||||
|
@ -107,6 +107,9 @@ bool pkpy_check_stack(pkpy_vm*, int free);
|
||||
//returns the number of elements on the stack
|
||||
int pkpy_stack_size(pkpy_vm*);
|
||||
|
||||
typedef void (*OutputHandler)(pkpy_vm*, const char*);
|
||||
void pkpy_set_output_handlers(pkpy_vm*, OutputHandler stdout_handler, OutputHandler stderr_handler);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user