LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Wez Furlong Date: Sat Jul 5 22:37:18 2008 Subject: cvs: php-objc / extension.m
wez Sun Jul 6 04:37:18 2008 UTC
Modified files:
/php-objc extension.m
Log:
fixup byref handling for objects
http://cvs.php.net/viewvc.cgi/php-objc/extension.m?r1=1.2&r2=1.3&diff_format=u
Index: php-objc/extension.m
diff -u php-objc/extension.m:1.2 php-objc/extension.m:1.3
--- php-objc/extension.m:1.2 Sat Jul 5 19:14:40 2008
+++ php-objc/extension.m Sun Jul 6 04:37:18 2008
@@ -1727,7 +1727,7 @@
ffi_args[1] = &sel;
NS_DURING
-// printf("method type: %s(%s)\n", method, meth->method_types);
+ printf("method type: %s(%s)\n", method, meth->method_types);
ALLOC_HASHTABLE(byref_hash);
zend_hash_init(byref_hash, 2, NULL, NULL, 0);
@@ -1757,6 +1757,7 @@
argtype++;
is_ref = 1;
}
+ printf("arg %d is_ref=%d\n", i, is_ref);
switch (*argtype) {
case _C_CHARPTR:
@@ -1932,11 +1933,15 @@
}
if (is_ref) {
- id *idptr = NULL;
- zend_hash_index_update(byref_hash, i, &idptr, sizeof(idptr),
- (void**)&idptr);
- *idptr = idval;
- ffi_args[2 + i] = idptr;
+ struct {
+ id val;
+ id *ptr;
+ } idref, *ptr;
+ zend_hash_index_update(byref_hash, i, &idref,
+ sizeof(idref), (void**)&ptr);
+ ptr->val = idval;
+ ptr->ptr = &ptr->val;
+ ffi_args[2+i] = &ptr->ptr;
} else {
zend_hash_index_update(byref_hash, i, &idval, sizeof(idval),
(void**)&ffi_args[2 + i]);
@@ -2144,12 +2149,15 @@
SEPARATE_ZVAL_IF_NOT_REF(args[i + first_passed]);
switch (*argtype) {
case _C_ID: {
- id *idptr;
+ struct {
+ id val;
+ id *ptr;
+ } *ptr;
- zend_hash_index_find(byref_hash, i, (void**)&idptr);
+ zend_hash_index_find(byref_hash, i, (void**)&ptr);
- if (*idptr) {
- php_objc_wrap_id(*idptr, *args[i + first_passed]);
+ if (ptr) {
+ php_objc_wrap_id(ptr->val, *args[i + first_passed]);
} else {
ZVAL_NULL(*args[i + first_passed]);
}
| Navigate in group php.objc at sever news.php.net | |
| Previous | Next |
| © No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |