Exemple #1
0
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),
                                           &copy_fptr,
                                           "__invoke",
                                           NULL,
                                           zobject,
                                           zevent);

            PHPQt5::pq_eventHash.remove(Z_OBJVAL_P(zevent).handle);
            zval_ptr_dtor(&zevent);

            return true;
        }
    }

    return false;
}
Exemple #2
0
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;
}
Exemple #3
0
    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;