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) {
.function<val>("call", &Py::call)
.function<val>("getattr", &Py::getattr)
.function<void>("setattr", &Py::setattr)
.function<val>("hasattr", &Py::hasattr)
.function<val>("getitem", &Py::getitem)
.function<void>("setitem", &Py::setitem);
.function<void>("setitem", &Py::setitem)
.function<val>("hasitem", &Py::hasitem);
}
extern "C" {
......
......@@ -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) {
PyObject *pyidx = jsToPython(idx);
PyObject *item = PyObject_GetItem(x, pyidx);
......@@ -87,3 +94,10 @@ void Py::setitem(val idx, val v) {
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:
emscripten::val call(emscripten::val args, emscripten::val kwargs);
emscripten::val getattr(emscripten::val idx);
void setattr(emscripten::val idx, emscripten::val v);
emscripten::val hasattr(emscripten::val idx);
emscripten::val getitem(emscripten::val idx);
void setitem(emscripten::val idx, emscripten::val v);
emscripten::val hasitem(emscripten::val idx);
};
#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