Commit 420bdcda authored by Michael Droettboom's avatar Michael Droettboom

Add hasitem and hasattr to Py proxy

parent ced8597f
...@@ -42,8 +42,10 @@ EMSCRIPTEN_BINDINGS(python) { ...@@ -42,8 +42,10 @@ EMSCRIPTEN_BINDINGS(python) {
.function<val>("call", &Py::call) .function<val>("call", &Py::call)
.function<val>("getattr", &Py::getattr) .function<val>("getattr", &Py::getattr)
.function<void>("setattr", &Py::setattr) .function<void>("setattr", &Py::setattr)
.function<val>("hasattr", &Py::hasattr)
.function<val>("getitem", &Py::getitem) .function<val>("getitem", &Py::getitem)
.function<void>("setitem", &Py::setitem); .function<void>("setitem", &Py::setitem)
.function<val>("hasitem", &Py::hasitem);
} }
extern "C" { extern "C" {
......
...@@ -63,6 +63,13 @@ void Py::setattr(val idx, val v) { ...@@ -63,6 +63,13 @@ void Py::setattr(val idx, val v) {
} }
} }
val Py::hasattr(val idx) {
PyObject *pyidx = jsToPython(idx);
val result(PyObject_HasAttr(x, pyidx) ? true : false);
Py_DECREF(pyidx);
return result;
}
val Py::getitem(val idx) { val Py::getitem(val idx) {
PyObject *pyidx = jsToPython(idx); PyObject *pyidx = jsToPython(idx);
PyObject *item = PyObject_GetItem(x, pyidx); PyObject *item = PyObject_GetItem(x, pyidx);
...@@ -87,3 +94,10 @@ void Py::setitem(val idx, val v) { ...@@ -87,3 +94,10 @@ void Py::setitem(val idx, val v) {
pythonExcToJs(); pythonExcToJs();
} }
} }
val Py::hasitem(val idx) {
PyObject *pyidx = jsToPython(idx);
val result(PySequence_Contains(x, pyidx) ? true : false);
Py_DECREF(pyidx);
return result;
}
...@@ -20,8 +20,10 @@ public: ...@@ -20,8 +20,10 @@ public:
emscripten::val call(emscripten::val args, emscripten::val kwargs); emscripten::val call(emscripten::val args, emscripten::val kwargs);
emscripten::val getattr(emscripten::val idx); emscripten::val getattr(emscripten::val idx);
void setattr(emscripten::val idx, emscripten::val v); void setattr(emscripten::val idx, emscripten::val v);
emscripten::val hasattr(emscripten::val idx);
emscripten::val getitem(emscripten::val idx); emscripten::val getitem(emscripten::val idx);
void setitem(emscripten::val idx, emscripten::val v); void setitem(emscripten::val idx, emscripten::val v);
emscripten::val hasitem(emscripten::val idx);
}; };
#endif /* PYPROXY_H */ #endif /* PYPROXY_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment