]> granicus.if.org Git - php/commitdiff
* Use to_string() instead of __print()
authorZeev Suraski <zeev@php.net>
Fri, 11 Jun 1999 11:17:43 +0000 (11:17 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 11 Jun 1999 11:17:43 +0000 (11:17 +0000)
* Support boolean casts ((bool) and (boolean))

Zend/zend-parser.y
Zend/zend-scanner.l
Zend/zend_execute.c

index 43d38a542137579c80cb7f4094ec4c042285af3d..3e3bf43ba7a2938d575c5d460c7749d1e40440a4 100644 (file)
@@ -58,7 +58,7 @@
 %left T_SL T_SR
 %left '+' '-' '.'
 %left '*' '/' '%'
-%right '!' '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST '@'
+%right '!' '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST '@'
 %right '['
 %nonassoc T_NEW
 %token T_EXIT
@@ -426,6 +426,7 @@ expr_without_variable:
        |       T_STRING_CAST expr      { do_cast(&$$, &$2, IS_STRING CLS_CC); } 
        |       T_ARRAY_CAST expr       { do_cast(&$$, &$2, IS_ARRAY CLS_CC); }
        |       T_OBJECT_CAST expr      { do_cast(&$$, &$2, IS_OBJECT CLS_CC); }
+       |       T_BOOL_CAST expr        { do_cast(&$$, &$2, IS_BOOL CLS_CC); }
        |       T_EXIT exit_expr        { do_exit(&$$, &$2 CLS_CC); }
        |       '@' { do_begin_silence(&$1 CLS_CC); } expr { do_end_silence(&$1 CLS_CC); $$ = $3; }
        |       scalar                          { $$ = $1; }
index 051f69ff499253e4fbf25b3bd5797f863ab78244..a9e6d2944ad8236090adc89c98369faf966e15e7 100644 (file)
@@ -737,6 +737,10 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
        return T_OBJECT_CAST;
 }
 
+<ST_IN_SCRIPTING>"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" {
+       return T_BOOL_CAST;
+}
+
 <ST_IN_SCRIPTING>"eval" {
        return T_EVAL;
 }
index e6e7ac3d8ee7d7afd32e2b50e2c54224a82adc11..c0872550350d295b00bdaeef9b2522cb03542f35 100644 (file)
@@ -1667,6 +1667,9 @@ send_by_ref:
                                                zendi_zval_copy_ctor(*result);
                                        }                                       
                                        switch (opline->op2.u.constant.type) {
+                                               case IS_BOOL:
+                                                       convert_to_boolean(result);
+                                                       break;
                                                case IS_LONG:
                                                        convert_to_long(result);
                                                        break;