-PHP_METHOD(Session, onConnect) {}
-PHP_METHOD(Session, onNick) {}
-PHP_METHOD(Session, onQuit) {}
-PHP_METHOD(Session, onJoin) {}
-PHP_METHOD(Session, onPart) {}
-PHP_METHOD(Session, onMode) {}
-PHP_METHOD(Session, onUmode) {}
-PHP_METHOD(Session, onTopic) {}
-PHP_METHOD(Session, onKick) {}
-PHP_METHOD(Session, onChannel) {}
-PHP_METHOD(Session, onPrivmsg) {}
-PHP_METHOD(Session, onNotice) {}
-PHP_METHOD(Session, onChannelNotice) {}
-PHP_METHOD(Session, onInvite) {}
-PHP_METHOD(Session, onCtcpReq) {}
-PHP_METHOD(Session, onCtcpRep) {}
-PHP_METHOD(Session, onAction) {}
-PHP_METHOD(Session, onUnknown) {}
-PHP_METHOD(Session, onNumeric) {}
-PHP_METHOD(Session, onDccChatReq) {}
-PHP_METHOD(Session, onDccSendReq) {}
-PHP_METHOD(Session, onError) {}
-
-#define ME(m) PHP_ME(Session, m, NULL, ZEND_ACC_PUBLIC)
+ if (SUCCESS == zend_copy_parameters_array(ZEND_NUM_ARGS(), &za TSRMLS_CC)) {
+ php_printf("ircclient: %s - ", prop_str);
+ zend_print_flat_zval_r(&za TSRMLS_CC);
+ php_printf("\n");
+ }
+ zval_dtor(&za);
+ }
+
+ if (SUCCESS == zend_get_parameters_array(ZEND_NUM_ARGS(), ZEND_NUM_ARGS(), params)) {
+ zval *prop = zend_read_property(Z_OBJCE_P(getThis()), getThis(), prop_str, prop_len, 0 TSRMLS_CC);
+
+ if (Z_TYPE_P(prop) != IS_NULL) {
+ call_user_function(NULL, NULL, prop, return_value, ZEND_NUM_ARGS(), params TSRMLS_CC);
+ }
+ }
+
+ efree(params);
+}
+
+PHP_METHOD(Session, onConnect) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onConnect")); }
+PHP_METHOD(Session, onNick) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onNick")); }
+PHP_METHOD(Session, onQuit) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onQuit")); }
+PHP_METHOD(Session, onJoin) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onJoin")); }
+PHP_METHOD(Session, onPart) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onPart")); }
+PHP_METHOD(Session, onMode) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onMode")); }
+PHP_METHOD(Session, onUmode) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onUmode")); }
+PHP_METHOD(Session, onTopic) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onTopic")); }
+PHP_METHOD(Session, onKick) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onKick")); }
+PHP_METHOD(Session, onChannel) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onChannel")); }
+PHP_METHOD(Session, onPrivmsg) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onPrivmsg")); }
+PHP_METHOD(Session, onNotice) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onNotice")); }
+PHP_METHOD(Session, onChannelNotice) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onChannelNotice")); }
+PHP_METHOD(Session, onInvite) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onInvite")); }
+PHP_METHOD(Session, onCtcpReq) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onCtcpReq")); }
+PHP_METHOD(Session, onCtcpRep) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onCtcpRep")); }
+PHP_METHOD(Session, onAction) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onAction")); }
+PHP_METHOD(Session, onUnknown) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onUnknown")); }
+PHP_METHOD(Session, onNumeric) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onNumeric")); }
+PHP_METHOD(Session, onDccChatReq) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onDccChatReq")); }
+PHP_METHOD(Session, onDccSendReq) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onDccSendReq")); }
+PHP_METHOD(Session, onError) { call_closure(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_STRL("onError")); }
+/* }}} */
+
+#define ME(m, ai) PHP_ME(Session, m, ai, ZEND_ACC_PUBLIC)