diff --git a/docs/C-API/stack.md b/docs/C-API/stack.md index d33424ed..f3c6636a 100644 --- a/docs/C-API/stack.md +++ b/docs/C-API/stack.md @@ -88,7 +88,7 @@ PK_EXPORT bool pkpy_is_none(pkpy_vm*, int i); + `bool pkpy_getattr(pkpy_vm*, pkpy_CName name)` - Push `b.` onto the stack. + Push `b.` onto the stack. Return false if the attribute is not found. ``` [b] -> [b.] @@ -105,7 +105,7 @@ PK_EXPORT bool pkpy_is_none(pkpy_vm*, int i); + `bool pkpy_getglobal(pkpy_vm*, pkpy_CName name)` - Push a global variable onto the stack. + Push a global/builtin variable onto the stack. Return false if the variable is not found. ``` [] -> [value] diff --git a/src/pocketpy_c.cpp b/src/pocketpy_c.cpp index 194dc8c6..a9c3cccd 100644 --- a/src/pocketpy_c.cpp +++ b/src/pocketpy_c.cpp @@ -384,9 +384,8 @@ bool pkpy_getattr(pkpy_vm* vm_handle, pkpy_CName name) { PK_ASSERT_NO_ERROR() PK_ASSERT_N_EXTRA_ELEMENTS(1) PyObject* o = vm->s_data.top(); - PK_PROTECTED( - o = vm->getattr(o, StrName(name)); - ) + o = vm->getattr(o, StrName(name), false); + if(o == nullptr) return false; vm->s_data.top() = o; return true; } @@ -411,10 +410,7 @@ bool pkpy_getglobal(pkpy_vm* vm_handle, pkpy_CName name) { PyObject* o = vm->_main->attr().try_get(StrName(name)); if (o == nullptr) { o = vm->builtins->attr().try_get(StrName(name)); - if (o == nullptr){ - pkpy_error(vm_handle, "NameError", pkpy_name_to_string(name)); - return false; - } + if (o == nullptr) return false; } vm->s_data.push(o); return true;