static bool has_encoding(int sno, Term t2 USES_REGS) { /* '$set_output'(+Stream,-ErrorMessage) */ if (!IsVarTerm(t2) && !(isatom(t2))) { return FALSE; } if (0 && IsAtomTerm(t2)) { encoding_t e = enc_id(RepAtom(AtomOfTerm(t2))->StrOfAE); GLOBAL_Stream[sno].encoding = e; return true; } else { const char *s = enc_name(LOCAL_encoding); return Yap_unify(t2, MkAtomTerm(Yap_LookupAtom(s))); } }
/* :nodoc: */ static VALUE enc_dump(int argc, VALUE *argv, VALUE self) { rb_scan_args(argc, argv, "01", 0); return enc_name(self); }
// Handle a single keyword argument. static ArgStatus handle_argument(PyObject *self, QObject *qobj, PyObject *name_obj, PyObject *value_obj) { const QMetaObject *mo = qobj->metaObject(); // Get the name encoded name. PyObject *enc_name_obj = name_obj; const char *name = sipString_AsASCIIString(&enc_name_obj); if (!name) return AsError; QByteArray enc_name(name); Py_DECREF(enc_name_obj); // See if it is a property. int idx = mo->indexOfProperty(enc_name.constData()); if (idx >= 0) { QMetaProperty prop = mo->property(idx); // A negative type means a QVariant property. if (prop.userType() >= 0) { const Chimera *ct = Chimera::parse(prop); if (!ct) { PyErr_Format(PyExc_TypeError, "'%s' keyword argument has an invalid type", enc_name.constData()); return AsError; } QVariant value; bool valid = ct->fromPyObject(value_obj, &value); delete ct; if (!valid) return AsError; qobj->setProperty(enc_name.constData(), value); } else { int value_state, iserr = 0; QVariant *value = reinterpret_cast<QVariant *>( sipForceConvertToType(value_obj, sipType_QVariant, 0, SIP_NOT_NONE, &value_state, &iserr)); if (iserr) return AsError; qobj->setProperty(enc_name.constData(), *value); sipReleaseType(value, sipType_QVariant, value_state); } } else { bool unknown = true; // See if it is a signal. PyObject *sig = PyObject_GetAttr(self, name_obj); if (sig) { if (PyObject_TypeCheck(sig, &qpycore_pyqtBoundSignal_Type)) { static PyObject *connect_obj = NULL; if (!connect_obj) { #if PY_MAJOR_VERSION >= 3 connect_obj = PyUnicode_FromString("connect"); #else connect_obj = PyString_FromString("connect"); #endif if (!connect_obj) { Py_DECREF(sig); return AsError; } } // Connect the slot. PyObject *res = PyObject_CallMethodObjArgs(sig, connect_obj, value_obj, 0); if (!res) { Py_DECREF(sig); return AsError; } Py_DECREF(res); unknown = false; } Py_DECREF(sig); } if (unknown) { PyErr_Clear(); return AsUnknown; } } return AsHandled; }
// This is the helper for QObject.pyqtConfigure(). int qpycore_pyqtconfigure(PyObject *self, QObject *qobj, PyObject *kwds) { PyObject *name_obj, *value_obj; SIP_SSIZE_T pos = 0; const QMetaObject *mo = qobj->metaObject(); QByteArray unknown_name; while (PyDict_Next(kwds, &pos, &name_obj, &value_obj)) { // Get the name encoded name. PyObject *enc_name_obj = name_obj; const char *name = sipString_AsASCIIString(&enc_name_obj); if (!name) return -1; QByteArray enc_name(name); Py_DECREF(enc_name_obj); // See if it is a property. int idx = mo->indexOfProperty(enc_name.constData()); if (idx >= 0) { QMetaProperty prop = mo->property(idx); // A negative type means a QVariant property. if (prop.userType() >= 0) { const Chimera *ct = Chimera::parse(prop); if (!ct) { PyErr_Format(PyExc_TypeError, "'%s' keyword argument has an invalid type", enc_name.constData()); return -1; } QVariant value; bool valid = ct->fromPyObject(value_obj, &value); delete ct; if (!valid) return -1; qobj->setProperty(enc_name.constData(), value); } else { int value_state, iserr = 0; QVariant *value = reinterpret_cast<QVariant *>( sipForceConvertToType(value_obj, sipType_QVariant, 0, SIP_NOT_NONE, &value_state, &iserr)); if (iserr) return -1; qobj->setProperty(enc_name.constData(), *value); sipReleaseType(value, sipType_QVariant, value_state); } } else { bool unknown = true; // See if it is a signal. PyObject *sig = PyObject_GetAttr(self, name_obj); if (sig) { if (PyObject_IsInstance(sig, (PyObject *)&qpycore_pyqtBoundSignal_Type)) { static PyObject *connect_obj = NULL; if (!connect_obj) { #if PY_MAJOR_VERSION >= 3 connect_obj = PyUnicode_FromString("connect"); #else connect_obj = PyString_FromString("connect"); #endif if (!connect_obj) { Py_DECREF(sig); return -1; } } // Connect the slot. PyObject *res = PyObject_CallMethodObjArgs(sig, connect_obj, value_obj, 0); if (!res) { Py_DECREF(sig); return -1; } Py_DECREF(res); unknown = false; } Py_DECREF(sig); } if (unknown) // Remember there is an exception but carry on with the // remaining names. This supports the use case where a name // might not be valid in a particular context, but isn't a // problem. unknown_name = enc_name; } } if (!unknown_name.isEmpty()) { PyErr_Format(PyExc_AttributeError, "'%s' is not a Qt property or a signal", unknown_name.constData()); return -1; } return 0; }
/* :nodoc: */ static VALUE enc_dump(int argc, VALUE *argv, VALUE self) { rb_check_arity(argc, 0, 1); return enc_name(self); }
static bool has_encoding(int sno, Term t2 USES_REGS) { /* '$set_output'(+Stream,-ErrorMessage) */ const char *s = enc_name(GLOBAL_Stream[sno].encoding); return Yap_unify(t2, MkAtomTerm(Yap_LookupAtom(s))); }