]> granicus.if.org Git - php/commitdiff
- Support Cast operator in convert_to_* so that we support internal
authorAndi Gutmans <andi@php.net>
Sun, 14 Mar 2004 13:52:36 +0000 (13:52 +0000)
committerAndi Gutmans <andi@php.net>
Sun, 14 Mar 2004 13:52:36 +0000 (13:52 +0000)
- extensions such as SimpleXML. This is for Sterling.

Zend/zend.c
Zend/zend_object_handlers.c
Zend/zend_object_handlers.h
Zend/zend_operators.c

index 4fc4fdcb214d4883cf3b9f3907d6ff780083dcdf..bd188c1e26b05fae3d518050938953387a795aa2 100644 (file)
@@ -216,7 +216,8 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                case IS_OBJECT:
                        if (expr->value.obj.handlers->cast_object) {
                                TSRMLS_FETCH();
-                               if (expr->value.obj.handlers->cast_object == zend_std_cast_object) {
+                               /* Standard PHP objects */
+                               if (expr->value.obj.handlers == &std_object_handlers) {
                                        if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS) {
                                                break;
                                        }
index b6645a8ebf49e0fcea557ef2b2360c729d4f3c6b..1812a31aa41c81701e4e832ebd26f3ccdcfae941 100644 (file)
@@ -945,10 +945,6 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty
        return FAILURE;
 }
 
-int zend_std_cast_object(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
-{
-       return FAILURE;
-}
 
 ZEND_API zend_object_handlers std_object_handlers = {
        zend_objects_store_add_ref,                             /* add_ref */
@@ -973,7 +969,7 @@ ZEND_API zend_object_handlers std_object_handlers = {
        zend_std_object_get_class,                              /* get_class_entry */
        zend_std_object_get_class_name,                 /* get_class_name */
        zend_std_compare_objects,                               /* compare_objects */
-       zend_std_cast_object,                                   /* cast_object */
+       NULL,                                                                   /* cast_object */
 };
 
 /*
index 2f414c22d308aa11888c186bf0f0e471da6cf12a..a9ad231fb8bbd98d8df62e6adfe7b83b7ef5cd5f 100644 (file)
@@ -129,7 +129,6 @@ ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce,
 ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, char *property_name, int property_name_len, zend_bool silent TSRMLS_DC);
 ZEND_API zend_bool zend_std_unset_static_property(zend_class_entry *ce, char *property_name, int property_name_len TSRMLS_DC);
 
-int zend_std_cast_object(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC);
 ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC);
 
 
index 8698df2096924d8dcfa6f0c8176c125f8a87c12b..4f23d757a71334d89c9a89c82bdfacaafee51653 100644 (file)
@@ -203,7 +203,9 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
                                (holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0);                             \
                                break;                                                                                          \
                        case IS_OBJECT:                                                                                 \
-                               (holder).value.lval = 1; /* TBI!! */                            \
+                               (holder) = (*(op));                                                                     \
+                               zval_copy_ctor(&(holder));                                                      \
+                               convert_to_long(&(holder));                                                     \
                                break;                                                                                          \
                        case IS_BOOL:                                                                                   \
                        case IS_RESOURCE:                                                                               \
@@ -246,7 +248,9 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
                                (holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0);     \
                                break;                                                                                          \
                        case IS_OBJECT:                                                                                 \
-                               (holder).value.lval = 1; /* TBI!! */                            \
+                               (holder) = (*(op));                                                                     \
+                               zval_copy_ctor(&(holder));                                                      \
+                               convert_to_boolean(&(holder));                                          \
                                break;                                                                                          \
                        default:                                                                                                \
                                (holder).value.lval = 0;                                                        \