Re: [PHP-DEV] trying to understand zvals

2002-10-20 Thread Stanislav Malyshev
TDJ Could you go into a little more depth on the problem, just so I TDJ understand? The problem is that passing argument passes only zval *, i.e. pointer to variable itself. To make reference assignment, you need zval **, i.e. the place in the symbol table. -- Stanislav Malyshev, Zend

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Tim Daly, Jr.
Brad LaFountain [EMAIL PROTECTED] writes: PHP_FUNCTION(ref_assign) { zval *bar, *foo; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, zz, bar, foo) == FAILURE) { return; } ZVAL_ADDREF(foo); *bar = *foo; bar-is_ref = TRUE;

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Tim Daly, Jr.
Stanislav Malyshev [EMAIL PROTECTED] writes: OK, looking again on the matter in depth, it seems to me that you cannot do it from C function either, due to the way in which parameters are passed in the engine. Could you go into a little more depth on the problem, just so I understand?

[PHP-DEV] trying to understand zvals

2002-10-18 Thread Tim Daly, Jr.
I'm trying to do some extension programming, and I'm pretty confused by the whole zval thing. In particular, references are a little mysterious. If I have $foo = zonk; $bar = $foo; in PHP, what actually happens? Specifically, if I wanted a function that did such a reference

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Stanislav Malyshev
TDJ I'm trying to do some extension programming, and I'm pretty confused TDJ by the whole zval thing. In particular, references are a little TDJ mysterious. If I have TDJ TDJ $foo = zonk; TDJ $bar = $foo; TDJ TDJ in PHP, what actually happens? Specifically, if I wanted a

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Tim Daly, Jr.
Stanislav Malyshev [EMAIL PROTECTED] writes: *snip* TDJ that did such a reference assignment: TDJ TDJ $foo = zonk; TDJ $bar = baz; TDJ TDJ ref_assign($bar, $foo); // $bar = $foo; TDJ TDJ what has to happen in ref_assign? That's problematic, due to the way

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Brad LaFountain
PHP_FUNCTION(ref_assign) { zval *bar, *foo; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, zz, bar, foo) == FAILURE) { return; } ZVAL_ADDREF(foo); *bar = *foo; bar-is_ref = TRUE; bar-refcount = 1; } this works, but i

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Andrey Hristov
- Original Message - From: Stanislav Malyshev [EMAIL PROTECTED] To: Tim Daly, Jr. [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Sent: Thursday, October 17, 2002 5:34 PM Subject: Re: [PHP-DEV] trying to understand zvals TDJ I'm trying to do some extension programming, and I'm pretty confused

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Tim Daly, Jr.
Stanislav Malyshev [EMAIL PROTECTED] writes: Ah. Then you need to accept the first parameter by reference (this is defined in ZEND_FE definition, put first_arg_force_ref as second parameter). Then you get parameters the usual way (zend_get_parameters_ex, etc.) and have to zval **

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Stanislav Malyshev
TDJ Thanks for your response! While it does not cause a crash, your TDJ function doesn't do what I expected. Do you know where I went TDJ wrong? You are right, this doesn't work. I'll look a bit more into it... -- Stanislav Malyshev, Zend Products Engineer [EMAIL PROTECTED]

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Stanislav Malyshev
TDJ Thanks for your response! While it does not cause a crash, your TDJ function doesn't do what I expected. Do you know where I went TDJ wrong? OK, looking again on the matter in depth, it seems to me that you cannot do it from C function either, due to the way in which parameters are passed

Re: [PHP-DEV] trying to understand zvals

2002-10-18 Thread Stanislav Malyshev
TDJ Sorry, I wasn't clear. I mean ref_assign to be a C function, in my TDJ extension. Ah. Then you need to accept the first parameter by reference (this is defined in ZEND_FE definition, put first_arg_force_ref as second parameter). Then you get parameters the usual way