From 596ecd5c9e85d69399bf94a6eddb8c34f5d74699 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 17 Jun 2023 22:54:02 +0800 Subject: [PATCH] ... --- src/pocketpy.h | 3 +++ src/vm.h | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pocketpy.h b/src/pocketpy.h index e5670159..6b60a2e9 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -1471,6 +1471,9 @@ extern "C" { }catch(pkpy::Exception& e){ *ok = false; *res = e.summary().c_str_dup(); + }catch(std::exception& e){ + *ok = false; + *res = strdup(e.what()); }catch(...){ *ok = false; *res = strdup("unknown error"); diff --git a/src/vm.h b/src/vm.h index d3ee334e..9e154af4 100644 --- a/src/vm.h +++ b/src/vm.h @@ -1566,9 +1566,11 @@ inline void Dict::_probe(PyObject *key, bool &ok, int &i) const{ inline void CodeObjectSerializer::write_object(VM *vm, PyObject *obj){ if(is_int(obj)) write_int(_CAST(i64, obj)); - if(is_float(obj)) write_float(_CAST(f64, obj)); - if(is_type(obj, vm->tp_str)) write_str(_CAST(Str&, obj)); - FATAL_ERROR(); + else if(is_float(obj)) write_float(_CAST(f64, obj)); + else if(is_type(obj, vm->tp_str)) write_str(_CAST(Str&, obj)); + else{ + throw std::runtime_error(fmt(OBJ_NAME(vm->_t(obj)).escape(), " is not serializable")); + } } } // namespace pkpy \ No newline at end of file