From 963a0044818cb60b535e2e1f6ac46a46b9d19fb7 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Fri, 11 Jun 1999 11:17:43 +0000 Subject: [PATCH] * Use to_string() instead of __print() * Support boolean casts ((bool) and (boolean)) --- Zend/zend-parser.y | 3 ++- Zend/zend-scanner.l | 4 ++++ Zend/zend_execute.c | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Zend/zend-parser.y b/Zend/zend-parser.y index 43d38a5421..3e3bf43ba7 100644 --- a/Zend/zend-parser.y +++ b/Zend/zend-parser.y @@ -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; } diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index 051f69ff49..a9e6d2944a 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -737,6 +737,10 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ return T_OBJECT_CAST; } +"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" { + return T_BOOL_CAST; +} + "eval" { return T_EVAL; } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index e6e7ac3d8e..c087255035 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -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; -- 2.50.1