bool pq_PHP_emit(const QString &qosignal, QObject *sender, QEvent *event) { int index = PHPQt5::acceptedPHPSlots_indexes.value(sender, -1); if(index >= 0) { if(PHPQt5::acceptedPHPSlots_list.at(index).contains(qosignal)) { TSRMLS_FETCH(); pq_access_function_entry afe = PHPQt5::acceptedPHPSlots_list.at(index).value(qosignal); zend_function *copy_fptr = zend_get_closure_invoke_method(afe.zo TSRMLS_CC); zval *zevent = PHPQt5::pq_qevent_to_zobject(event TSRMLS_CC); PHPQt5::pq_eventHash.insert(Z_OBJVAL_P(zevent).handle, pq_event_wrapper{zevent, event}); zval *zobject = PHPQt5::objectFactory()->getZObject(sender); zend_call_method_with_2_params(&afe.zo, Z_OBJCE_P(afe.zo), ©_fptr, "__invoke", NULL, zobject, zevent); PHPQt5::pq_eventHash.remove(Z_OBJVAL_P(zevent).handle); zval_ptr_dtor(&zevent); return true; } } return false; }
bool pq_callPHPFunction(const QString &fn_name, QObject *sender, QEvent *event) { #ifdef PQDEBUG PQDBG2("pq_callPHPFunction()", fn_name); #endif TSRMLS_FETCH(); if(!PHPQt5::acceptedPHPFunctions.contains(fn_name)) { //QMessageBox::warning(0, "callPHPFunction", QString("callPHPFunction: cannot call function %1($event)").arg(fn_name)); return false; } pq_access_function_entry afe = PHPQt5::acceptedPHPFunctions.value(fn_name); zval *args[2]; zval *retzval = NULL; zval *pqzobj = PHPQt5::objectFactory()->getZObject(sender); zval *zevent = PHPQt5::pq_qevent_to_zobject(event TSRMLS_CC); int handle = Z_OBJVAL_P(zevent).handle; bool retval = false; MAKE_STD_ZVAL(args[0]); MAKE_STD_ZVAL(args[1]); MAKE_STD_ZVAL(retzval); ZVAL_ZVAL(args[0], pqzobj, 1, 0); ZVAL_ZVAL(args[1], zevent, 1, 0); PHPQt5::pq_eventHash.insert(handle, pq_event_wrapper{zevent, event}); call_user_function(EG(function_table), &afe.zo, afe.zfn_name, retzval, 2, args TSRMLS_CC); PHPQt5::pq_eventHash.remove(handle); if(retzval != NULL && Z_TYPE_P(retzval) == IS_BOOL) { retval = Z_BVAL_P(retzval); } zval_ptr_dtor(&args[0]); zval_ptr_dtor(&args[1]); zval_ptr_dtor(&zevent); zval_ptr_dtor(&retzval); return retval; }
FREE_ZVAL(v); } } } ZEND_API const char *zend_get_type_by_const(int type) { return HPHP::getDataTypeString((HPHP::DataType)type).data(); } ZEND_API const char *zend_zval_type_name(const zval *arg) { return zend_get_type_by_const(Z_TYPE_P(arg)); } ZEND_API zend_class_entry *zend_get_class_entry(const zval *zobject TSRMLS_DC) { auto* hphp_class = Z_OBJVAL_P(zobject)->getVMClass(); return HPHP::zend_hphp_class_to_class_entry(hphp_class); } static int parse_arg_object_to_string(zval **arg, const char **p, int *pl, int type TSRMLS_DC) { HPHP::StringData *sd = tvCastToString(*(*arg)->tv()); *p = sd->data(); *pl = sd->size(); return sd->empty(); } static const char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, const char **spec, char **error, int *severity TSRMLS_DC) { const char *spec_walk = *spec; char c = *spec_walk++; int check_null = 0;