Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:43086 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 29946 invoked from network); 18 Feb 2009 04:08:43 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Feb 2009 04:08:43 -0000 Authentication-Results: pb1.pair.com smtp.mail=quickshiftin@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=quickshiftin@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.217.172 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: quickshiftin@gmail.com X-Host-Fingerprint: 209.85.217.172 mail-gx0-f172.google.com Received: from [209.85.217.172] ([209.85.217.172:35821] helo=mail-gx0-f172.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 6D/90-26384-9C98B994 for ; Tue, 17 Feb 2009 23:08:42 -0500 Received: by gxk20 with SMTP id 20so4639095gxk.23 for ; Tue, 17 Feb 2009 20:08:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=NNFYqxAaiyLco2g+HZX7S3In6vEuqbGoqowK1dw6QnA=; b=TPS23pm7/t2i0YKsyOm292eDPNZyG9hGryL0JJ5u6E2RUu/aD22P0s6LaPkPTuM+VG m41j/L/nHs4sueod92vsDY2Jrpt5BsfROXIh3ctPpGTu8ZWEol2d3xG/WPTUgK3oStL0 JWq+nd5BlA8PYJ8rlx+pfRDGYbCngsnZMrVIk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=aBJAVy6sG7rmlFK/EV+l5fwHLY1eRl1EQSxIgU5XxJQESzV6/f5iyl9Va67nORkN2k jUKLxEM4jnQcOOTopugUt7xxOoC3EkUXC/pxCprtwvLrgb8QPPzxC+KhwASGQS/CLTQ2 CFFTeTZ3LfYiULZUzxxWG8UZVd8GexSfwI3h8= MIME-Version: 1.0 Received: by 10.231.19.204 with SMTP id c12mr922791ibb.55.1234930119456; Tue, 17 Feb 2009 20:08:39 -0800 (PST) Date: Tue, 17 Feb 2009 21:08:39 -0700 Message-ID: <7dd2dc0b0902172008g5a634577pad280d1f0415453b@mail.gmail.com> To: internals@lists.php.net Content-Type: multipart/alternative; boundary=00221532cf6c17b97c0463299373 Subject: zend_call_method() - support for up to 4 parameters From: quickshiftin@gmail.com (Nathan Nobbe) --00221532cf6c17b97c0463299373 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit hi, recently, working on an extension, i wanted to call a method w/ 3 params, and as you know, zend_call_method only supports 2 parameters at most. i came across this thread in the archives, http://marc.info/?l=php-internals&m=120179690310419&w=2 so i tossed together a quick patch w/ no emalloc or va_list against the latest 5.3 snapshot. what do you think? -nathan --- zend_interfaces.c 2009-02-17 20:50:35.000000000 -0700 +++ zend_interfaces.ORIG.c 2009-02-17 20:24:47.000000000 -0700 @@ -31,7 +31,7 @@ /* {{{ zend_call_method Only returns the returned zval if retval_ptr != NULL */ -ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, char *function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2, zval* arg3, zval* arg4 TSRMLS_DC) +ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, char *function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2 TSRMLS_DC) { int result; zend_fcall_info fci; @@ -39,12 +39,10 @@ zval *retval; HashTable *function_table; - zval **params[4]; + zval **params[2]; params[0] = &arg1; params[1] = &arg2; - params[2] = &arg3; - params[3] = &arg4; fci.size = sizeof(fci); /*fci.function_table = NULL; will be read form zend_class_entry of object if needed */ --- zend_interfaces.h 2009-02-17 20:51:22.000000000 -0700 +++ zend_interfaces.ORIG.h 2009-02-17 20:24:36.000000000 -0700 @@ -38,22 +38,16 @@ zval *value; } zend_user_iterator; -ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, char *function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2, zval* arg3, zval* arg4 TSRMLS_DC); +ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, char *function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2 TSRMLS_DC); #define zend_call_method_with_0_params(obj, obj_ce, fn_proxy, function_name, retval) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL, NULL, NULL TSRMLS_CC) + zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL TSRMLS_CC) #define zend_call_method_with_1_params(obj, obj_ce, fn_proxy, function_name, retval, arg1) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL, NULL, NULL TSRMLS_CC) + zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL TSRMLS_CC) #define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2, NULL, NULL TSRMLS_CC) - -#define zend_call_method_with_3_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2, arg3) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 3, arg1, arg2, arg3, NULL TSRMLS_CC) - -#define zend_call_method_with_4_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2, arg3, arg4) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 4, arg1, arg2, arg3, arg4 TSRMLS_CC) + zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2 TSRMLS_CC) ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter TSRMLS_DC); ZEND_API int zend_user_it_valid(zend_object_iterator *_iter TSRMLS_DC); --00221532cf6c17b97c0463299373--