repeat: |
switch (Z_TYPE_P(val)) { |
case IS_LONG : |
case IS_DOUBLE : |
case IS_STRING : |
case IS_BOOL : |
case IS_RESOURCE : |
case IS_NULL : |
break ; |
case IS_OBJECT : |
if (!val_free) { |
if (Z_OBJ_HT_P(val)->get) { |
val_free = val = Z_OBJ_HT_P(val)->get(val TSRMLS_CC); |
goto repeat; |
} else if (Z_OBJ_HT_P(val)->cast_object) { |
ALLOC_INIT_ZVAL(val_free); |
if (Z_OBJ_HT_P(val)->cast_object(val, val_free, IS_STRING TSRMLS_CC) == SUCCESS) { |
val = val_free; |
break ; |
} |
} |
} |
/* no break */ |
default : |
zend_error(E_WARNING, "Constants may only evaluate to scalar values" ); |
if (val_free) { |
zval_ptr_dtor(&val_free); |
} |
RETURN_FALSE; |
} |