From 22bbf4c3d52377a7df7f2fe503cd3a45e22262ae Mon Sep 17 00:00:00 2001 From: David Walker Date: Wed, 7 Dec 2016 16:28:00 -0700 Subject: [PATCH] Implement Comparison Chaining This feature implements support for arbitrary comparison chaining. This change sets the precedence for equality operations as well as comparison operations to the same level. This enables us to, parse in a left-to-right fashion continuing to compare against the previous operations right operator. The implementation enables short-circuiting in the event if a left operation is false, we will skip over further right operations. --- Zend/zend_ast.c | 74 +- Zend/zend_ast.h | 7 +- Zend/zend_compile.c | 280 +- Zend/zend_compile.h | 5 + Zend/zend_language_parser.y | 35 +- Zend/zend_language_scanner.c | 7693 ++++++++--------- Zend/zend_language_scanner_defs.h | 2 +- Zend/zend_vm_def.h | 106 +- Zend/zend_vm_execute.h | 918 +- .../operator_compare_chaining_false.phpt | 44 + .../operator_compare_chaining_true.phpt | 44 + 11 files changed, 4960 insertions(+), 4248 deletions(-) create mode 100644 tests/lang/operators/operator_compare_chaining_false.phpt create mode 100644 tests/lang/operators/operator_compare_chaining_true.phpt diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 87c20e19292ec..8de4b9ddb7ec5 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -236,22 +236,6 @@ ZEND_API int zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *sc zval_dtor(&op2); } break; - case ZEND_AST_GREATER: - case ZEND_AST_GREATER_EQUAL: - if (UNEXPECTED(zend_ast_evaluate(&op1, ast->child[0], scope) != SUCCESS)) { - ret = FAILURE; - } else if (UNEXPECTED(zend_ast_evaluate(&op2, ast->child[1], scope) != SUCCESS)) { - zval_dtor(&op1); - ret = FAILURE; - } else { - /* op1 > op2 is the same as op2 < op1 */ - binary_op_type op = ast->kind == ZEND_AST_GREATER - ? is_smaller_function : is_smaller_or_equal_function; - ret = op(result, &op2, &op1); - zval_dtor(&op1); - zval_dtor(&op2); - } - break; case ZEND_AST_UNARY_OP: if (UNEXPECTED(zend_ast_evaluate(&op1, ast->child[0], scope) != SUCCESS)) { ret = FAILURE; @@ -571,8 +555,9 @@ ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn) { * 140 left | * 150 left ^ * 160 left & - * 170 non-associative == != === !== - * 180 non-associative < <= > >= <=> + * 170 left == != === !== + * 175 non-associative <=> + * 180 left < <= > >= * 190 left << >> * 200 left + - . * 210 left * / % @@ -973,6 +958,42 @@ static void zend_ast_export_class_no_header(smart_str *str, zend_ast_decl *decl, smart_str_appends(str, "}"); } +static void zend_ast_export_comparison(smart_str *str, zend_ast *ast, int p, int priority, int indent) +{ + uint16_t greater = ast->attr & ZEND_COMPARE_GREATER; + + if (priority > p) smart_str_appendc(str, '('); + zend_ast_export_ex(str, ast->child[0], p, indent); + + switch (ast->attr) { + case ZEND_IS_IDENTICAL: + smart_str_appends(str, " === "); break; + case ZEND_IS_NOT_IDENTICAL: + smart_str_appends(str, " !== "); break; + case ZEND_IS_EQUAL: + smart_str_appends(str, " == "); break; + case ZEND_IS_NOT_EQUAL: + smart_str_appends(str, " != "); break; + case ZEND_IS_SMALLER: + if (greater) { + smart_str_appends(str, " > "); + } else { + smart_str_appends(str, " < "); + } + break; + case ZEND_IS_SMALLER_OR_EQUAL: + if (greater) { + smart_str_appends(str, " >= "); + } else { + smart_str_appends(str, " <= "); + } + break; + } + + zend_ast_export_ex(str, ast->child[1], p, indent); + if (priority > p) smart_str_appendc(str, ')'); +} + #define BINARY_OP(_op, _p, _pl, _pr) do { \ op = _op; \ p = _p; \ @@ -1359,20 +1380,19 @@ static void zend_ast_export_ex(smart_str *str, zend_ast *ast, int priority, int case ZEND_BW_OR: BINARY_OP(" | ", 140, 140, 141); case ZEND_BW_AND: BINARY_OP(" & ", 160, 160, 161); case ZEND_BW_XOR: BINARY_OP(" ^ ", 150, 150, 151); - case ZEND_IS_IDENTICAL: BINARY_OP(" === ", 170, 171, 171); - case ZEND_IS_NOT_IDENTICAL: BINARY_OP(" !== ", 170, 171, 171); - case ZEND_IS_EQUAL: BINARY_OP(" == ", 170, 171, 171); - case ZEND_IS_NOT_EQUAL: BINARY_OP(" != ", 170, 171, 171); - case ZEND_IS_SMALLER: BINARY_OP(" < ", 180, 181, 181); - case ZEND_IS_SMALLER_OR_EQUAL: BINARY_OP(" <= ", 180, 181, 181); case ZEND_POW: BINARY_OP(" ** ", 250, 251, 250); case ZEND_BOOL_XOR: BINARY_OP(" xor ", 40, 40, 41); - case ZEND_SPACESHIP: BINARY_OP(" <=> ", 180, 181, 181); + case ZEND_SPACESHIP: BINARY_OP(" <=> ", 175, 176, 176); EMPTY_SWITCH_DEFAULT_CASE(); } break; - case ZEND_AST_GREATER: BINARY_OP(" > ", 180, 181, 181); - case ZEND_AST_GREATER_EQUAL: BINARY_OP(" >= ", 180, 181, 181); + case ZEND_AST_COMPARE_OP: + if (ast->attr & ZEND_COMPARE_EQUALITY) { + zend_ast_export_comparison(str, ast, 170, priority, indent); + } else { + zend_ast_export_comparison(str, ast, 180, priority, indent); + } + break; case ZEND_AST_AND: BINARY_OP(" && ", 130, 130, 131); case ZEND_AST_OR: BINARY_OP(" || ", 120, 120, 121); case ZEND_AST_ARRAY_ELEM: diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h index 11b098cc3d490..fd026a7d9b42c 100644 --- a/Zend/zend_ast.h +++ b/Zend/zend_ast.h @@ -106,8 +106,7 @@ enum _zend_ast_kind { ZEND_AST_ASSIGN_REF, ZEND_AST_ASSIGN_OP, ZEND_AST_BINARY_OP, - ZEND_AST_GREATER, - ZEND_AST_GREATER_EQUAL, + ZEND_AST_COMPARE_OP, ZEND_AST_AND, ZEND_AST_OR, ZEND_AST_ARRAY_ELEM, @@ -263,9 +262,13 @@ static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t opcode, z static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) { return zend_ast_create_ex(ZEND_AST_ASSIGN_OP, opcode, op0, op1); } +static zend_always_inline zend_ast *zend_ast_create_compare_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) { + return zend_ast_create_ex(ZEND_AST_COMPARE_OP, opcode, op0, op1); +} static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, zend_ast *op0) { return zend_ast_create_ex(ZEND_AST_CAST, type, op0); } + static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) { zend_ast_list *list = zend_ast_get_list(ast); if (list->children && list->child[list->children - 1] == NULL) { diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 84a3e6a021299..793fe3926558f 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2121,11 +2121,8 @@ static void zend_check_live_ranges(zend_op *opline) /* {{{ */ } /* }}} */ -static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2) /* {{{ */ +static zend_always_inline void zend_emit_op_set_ops(zend_op *opline, znode *op1, znode *op2) /* {{{ */ { - zend_op *opline = get_next_op(CG(active_op_array)); - opline->opcode = opcode; - if (op1 == NULL) { SET_UNUSED(opline->op1); } else { @@ -2139,32 +2136,65 @@ static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode } zend_check_live_ranges(opline); +} +/* }}} */ + +static zend_op *zend_emit_op_at(uint32_t opnum, znode *result, zend_uchar opcode, znode *op1, znode *op2) /* {{{ */ +{ + uint32_t i; + zend_op *opline = get_next_op(CG(active_op_array)); + zend_op *tmp_op; + + for (i = CG(active_op_array)->last - 1; opnum <= i; i--) { + CG(active_op_array)->opcodes[i + 1] = CG(active_op_array)->opcodes[i]; + tmp_op = &CG(active_op_array)->opcodes[i + 1]; + switch (tmp_op->opcode) { + case ZEND_JMP: + tmp_op->op1.opline_num++; + break; + case ZEND_JMPZ: + case ZEND_JMPNZ: + case ZEND_JMPZ_EX: + case ZEND_JMPNZ_EX: + case ZEND_JMP_SET: + tmp_op->op2.opline_num++; + break; + } + } + + opline = &CG(active_op_array)->opcodes[opnum]; + opline->opcode = opcode; + + zend_emit_op_set_ops(opline, op1, op2); if (result) { zend_make_var_result(result, opline); } + return opline; } /* }}} */ -static zend_op *zend_emit_op_tmp(znode *result, zend_uchar opcode, znode *op1, znode *op2) /* {{{ */ +static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2) /* {{{ */ { zend_op *opline = get_next_op(CG(active_op_array)); opline->opcode = opcode; - if (op1 == NULL) { - SET_UNUSED(opline->op1); - } else { - SET_NODE(opline->op1, op1); - } + zend_emit_op_set_ops(opline, op1, op2); - if (op2 == NULL) { - SET_UNUSED(opline->op2); - } else { - SET_NODE(opline->op2, op2); + if (result) { + zend_make_var_result(result, opline); } + return opline; +} +/* }}} */ - zend_check_live_ranges(opline); +static zend_op *zend_emit_op_tmp(znode *result, zend_uchar opcode, znode *op1, znode *op2) /* {{{ */ +{ + zend_op *opline = get_next_op(CG(active_op_array)); + opline->opcode = opcode; + + zend_emit_op_set_ops(opline, op1, op2); if (result) { zend_make_tmp_result(result, opline); @@ -6547,14 +6577,6 @@ static inline zend_bool zend_try_ct_eval_unary_pm(zval *result, zend_ast_kind ki } /* }}} */ -static inline void zend_ct_eval_greater(zval *result, zend_ast_kind kind, zval *op1, zval *op2) /* {{{ */ -{ - binary_op_type fn = kind == ZEND_AST_GREATER - ? is_smaller_function : is_smaller_or_equal_function; - fn(result, op2, op1); -} -/* }}} */ - static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ { zend_ast_list *list = zend_ast_get_list(ast); @@ -6656,69 +6678,16 @@ void zend_compile_binary_op(znode *result, zend_ast *ast) /* {{{ */ } } - do { - if (opcode == ZEND_IS_EQUAL || opcode == ZEND_IS_NOT_EQUAL) { - if (left_node.op_type == IS_CONST) { - if (Z_TYPE(left_node.u.constant) == IS_FALSE) { - opcode = (opcode == ZEND_IS_NOT_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; - zend_emit_op_tmp(result, opcode, &right_node, NULL); - break; - } else if (Z_TYPE(left_node.u.constant) == IS_TRUE) { - opcode = (opcode == ZEND_IS_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; - zend_emit_op_tmp(result, opcode, &right_node, NULL); - break; - } - } else if (right_node.op_type == IS_CONST) { - if (Z_TYPE(right_node.u.constant) == IS_FALSE) { - opcode = (opcode == ZEND_IS_NOT_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; - zend_emit_op_tmp(result, opcode, &left_node, NULL); - break; - } else if (Z_TYPE(right_node.u.constant) == IS_TRUE) { - opcode = (opcode == ZEND_IS_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; - zend_emit_op_tmp(result, opcode, &left_node, NULL); - break; - } - } + if (opcode == ZEND_CONCAT) { + /* convert constant operands to strings at compile-time */ + if (left_node.op_type == IS_CONST) { + convert_to_string(&left_node.u.constant); } - if (opcode == ZEND_CONCAT) { - /* convert constant operands to strings at compile-time */ - if (left_node.op_type == IS_CONST) { - convert_to_string(&left_node.u.constant); - } - if (right_node.op_type == IS_CONST) { - convert_to_string(&right_node.u.constant); - } + if (right_node.op_type == IS_CONST) { + convert_to_string(&right_node.u.constant); } - zend_emit_op_tmp(result, opcode, &left_node, &right_node); - } while (0); -} -/* }}} */ - -/* We do not use zend_compile_binary_op for this because we want to retain the left-to-right - * evaluation order. */ -void zend_compile_greater(znode *result, zend_ast *ast) /* {{{ */ -{ - zend_ast *left_ast = ast->child[0]; - zend_ast *right_ast = ast->child[1]; - znode left_node, right_node; - - ZEND_ASSERT(ast->kind == ZEND_AST_GREATER || ast->kind == ZEND_AST_GREATER_EQUAL); - - zend_compile_expr(&left_node, left_ast); - zend_compile_expr(&right_node, right_ast); - - if (left_node.op_type == IS_CONST && right_node.op_type == IS_CONST) { - result->op_type = IS_CONST; - zend_ct_eval_greater(&result->u.constant, ast->kind, - &left_node.u.constant, &right_node.u.constant); - zval_ptr_dtor(&left_node.u.constant); - zval_ptr_dtor(&right_node.u.constant); - return; } - - zend_emit_op_tmp(result, - ast->kind == ZEND_AST_GREATER ? ZEND_IS_SMALLER : ZEND_IS_SMALLER_OR_EQUAL, - &right_node, &left_node); + zend_emit_op_tmp(result, opcode, &left_node, &right_node); } /* }}} */ @@ -6766,6 +6735,126 @@ void zend_compile_unary_pm(znode *result, zend_ast *ast) /* {{{ */ } /* }}} */ +void zend_compile_compare_op(znode *result, zend_ast *ast) /* {{{ */ +{ + zend_ast *left_ast = ast->child[0]; + zend_ast *right_ast = ast->child[1]; + znode left_node, right_node = {0}; + zend_op *opline, *right_opline_jmpz; + uint32_t opcode, right_opnum_jmpz; + zend_bool valid = 0; + + if (!(ast->attr & ZEND_COMPARE_EQUALITY)) { + if (right_ast->kind == ZEND_AST_COMPARE_OP) { + zend_error_noreturn(E_COMPILE_ERROR, "comparisions may not be right recursive"); + } + + if (left_ast->kind == ZEND_AST_COMPARE_OP) { + left_ast->attr |= ZEND_COMPARE_CONTINUE; + } + } + + if (left_ast->kind == ZEND_AST_COMPARE_OP) { + zend_compile_expr(result, left_ast); + left_node = *result; + right_opnum_jmpz = get_next_op_number(CG(active_op_array)); + } else { + zend_compile_expr(&left_node, left_ast); + } + + if (left_node.op_type == IS_CONST && Z_TYPE(left_node.u.constant) == IS_FALSE) { + result->op_type = IS_CONST; + ZVAL_BOOL(&result->u.constant, 0); + } else { + opcode = ast->attr & ~ZEND_COMPARE_OP_MASK; + zend_compile_expr(&right_node, right_ast); + + if (left_node.op_type == IS_CONST && right_node.op_type == IS_CONST) { + result->op_type = IS_CONST; + + if (ast->attr & ZEND_COMPARE_GREATER) { + valid = zend_try_ct_eval_binary_op(&result->u.constant, opcode, &right_node.u.constant, &left_node.u.constant); + } else { + valid = zend_try_ct_eval_binary_op(&result->u.constant, opcode, &left_node.u.constant, &right_node.u.constant); + } + + if (!valid || Z_TYPE(result->u.constant) == IS_FALSE) { + ZVAL_BOOL(&result->u.constant, 0); + } else { + if (valid && Z_TYPE(result->u.constant) == IS_TRUE && (ast->attr & ZEND_COMPARE_CONTINUE)) { + ZVAL_COPY_VALUE(&result->u.constant, &right_node.u.constant); + } + } + } else { + if (left_ast->kind == ZEND_AST_COMPARE_OP && left_node.op_type != IS_CONST) { + right_opline_jmpz = zend_emit_op_at(right_opnum_jmpz, NULL, ZEND_JMPZ_EX, &left_node, NULL); + } + + do { + if (opcode == ZEND_IS_EQUAL || opcode == ZEND_IS_NOT_EQUAL) { + if (left_node.op_type == IS_CONST) { + if (Z_TYPE(left_node.u.constant) == IS_FALSE) { + opcode = (opcode == ZEND_IS_NOT_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; + opline = zend_emit_op(NULL, opcode, &right_node, NULL); + break; + } else if (Z_TYPE(left_node.u.constant) == IS_TRUE) { + opcode = (opcode == ZEND_IS_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; + opline = zend_emit_op(NULL, opcode, &right_node, NULL); + break; + } + } else if (right_node.op_type == IS_CONST) { + if (Z_TYPE(right_node.u.constant) == IS_FALSE) { + opcode = (opcode == ZEND_IS_NOT_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; + opline = zend_emit_op(NULL, opcode, &left_node, NULL); + break; + } else if (Z_TYPE(right_node.u.constant) == IS_TRUE) { + opcode = (opcode == ZEND_IS_EQUAL) ? ZEND_BOOL : ZEND_BOOL_NOT; + opline = zend_emit_op(NULL, opcode, &left_node, NULL); + break; + } + } + } + + if (ast->attr & ZEND_COMPARE_GREATER) { + opline = zend_emit_op(NULL, opcode, &right_node, &left_node); + opline->extended_value |= ZEND_COMPARE_GREATER; + } else { + opline = zend_emit_op(NULL, opcode, &left_node, &right_node); + } + } while (0); + + if (left_ast->kind != ZEND_AST_COMPARE_OP || left_node.op_type == IS_CONST) { + zend_make_tmp_result(result, opline); + } else { + SET_NODE(opline->result, result); + } + + if (ast->attr & ZEND_COMPARE_CONTINUE) { + opline->extended_value |= ZEND_COMPARE_CONTINUE; + } + + if (left_ast->kind == ZEND_AST_COMPARE_OP && left_node.op_type != IS_CONST) { + if (result->op_type == IS_TMP_VAR) { + SET_NODE(right_opline_jmpz->result, result); + } else { + right_opline_jmpz->result.var = get_temporary_variable(CG(active_op_array)); + right_opline_jmpz->result_type = IS_TMP_VAR; + } + zend_update_jump_target_to_next(right_opnum_jmpz); + } + } + } + + if (left_node.op_type == IS_CONST) { + zval_ptr_dtor(&left_node.u.constant); + } + + if (right_node.op_type == IS_CONST) { + zval_ptr_dtor(&right_node.u.constant); + } +} +/* }}} */ + void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */ { zend_ast *left_ast = ast->child[0]; @@ -7549,7 +7638,7 @@ void zend_compile_magic_const(znode *result, zend_ast *ast) /* {{{ */ zend_bool zend_is_allowed_in_const_expr(zend_ast_kind kind) /* {{{ */ { return kind == ZEND_AST_ZVAL || kind == ZEND_AST_BINARY_OP - || kind == ZEND_AST_GREATER || kind == ZEND_AST_GREATER_EQUAL + || kind == ZEND_AST_COMPARE_OP || kind == ZEND_AST_AND || kind == ZEND_AST_OR || kind == ZEND_AST_UNARY_OP || kind == ZEND_AST_UNARY_PLUS || kind == ZEND_AST_UNARY_MINUS @@ -7884,10 +7973,6 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ case ZEND_AST_BINARY_OP: zend_compile_binary_op(result, ast); return; - case ZEND_AST_GREATER: - case ZEND_AST_GREATER_EQUAL: - zend_compile_greater(result, ast); - return; case ZEND_AST_UNARY_OP: zend_compile_unary_op(result, ast); return; @@ -7895,6 +7980,9 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ case ZEND_AST_UNARY_MINUS: zend_compile_unary_pm(result, ast); return; + case ZEND_AST_COMPARE_OP: + zend_compile_compare_op(result, ast); + return; case ZEND_AST_AND: case ZEND_AST_OR: zend_compile_short_circuiting(result, ast); @@ -8055,16 +8143,24 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */ return; } break; - case ZEND_AST_GREATER: - case ZEND_AST_GREATER_EQUAL: + case ZEND_AST_COMPARE_OP: zend_eval_const_expr(&ast->child[0]); zend_eval_const_expr(&ast->child[1]); if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { return; } - zend_ct_eval_greater(&result, ast->kind, - zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])); + if (ast->attr & ZEND_COMPARE_GREATER) { + if (!zend_try_ct_eval_binary_op(&result, ast->attr & ~ZEND_COMPARE_OP_MASK, + zend_ast_get_zval(ast->child[1]), zend_ast_get_zval(ast->child[0]))) { + return; + } + } else { + if (!zend_try_ct_eval_binary_op(&result, ast->attr & ~ZEND_COMPARE_OP_MASK, + zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1]))) { + return; + } + } break; case ZEND_AST_AND: case ZEND_AST_OR: diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 5018602a1ff5c..0d1d02a601a03 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -293,6 +293,11 @@ typedef struct _zend_oparray_context { /* op_array uses strict mode types */ #define ZEND_ACC_STRICT_TYPES 0x80000000 +#define ZEND_COMPARE_GREATER 0x8000 +#define ZEND_COMPARE_CONTINUE 0x4000 +#define ZEND_COMPARE_EQUALITY 0x2000 +#define ZEND_COMPARE_OP_MASK 0xE000 + char *zend_visibility_string(uint32_t fn_flags); typedef struct _zend_property_info { diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 92524c69e0386..9a338ccfe238a 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -69,8 +69,9 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %left '|' %left '^' %left '&' -%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP -%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL +%left T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL +%nonassoc T_SPACESHIP +%left '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL %left T_SL T_SR %left '+' '-' '.' %left '*' '/' '%' @@ -915,37 +916,37 @@ expr_without_variable: | expr '|' expr { $$ = zend_ast_create_binary_op(ZEND_BW_OR, $1, $3); } | expr '&' expr { $$ = zend_ast_create_binary_op(ZEND_BW_AND, $1, $3); } | expr '^' expr { $$ = zend_ast_create_binary_op(ZEND_BW_XOR, $1, $3); } - | expr '.' expr { $$ = zend_ast_create_binary_op(ZEND_CONCAT, $1, $3); } - | expr '+' expr { $$ = zend_ast_create_binary_op(ZEND_ADD, $1, $3); } - | expr '-' expr { $$ = zend_ast_create_binary_op(ZEND_SUB, $1, $3); } + | expr '.' expr { $$ = zend_ast_create_binary_op(ZEND_CONCAT, $1, $3); } + | expr '+' expr { $$ = zend_ast_create_binary_op(ZEND_ADD, $1, $3); } + | expr '-' expr { $$ = zend_ast_create_binary_op(ZEND_SUB, $1, $3); } | expr '*' expr { $$ = zend_ast_create_binary_op(ZEND_MUL, $1, $3); } | expr T_POW expr { $$ = zend_ast_create_binary_op(ZEND_POW, $1, $3); } | expr '/' expr { $$ = zend_ast_create_binary_op(ZEND_DIV, $1, $3); } - | expr '%' expr { $$ = zend_ast_create_binary_op(ZEND_MOD, $1, $3); } - | expr T_SL expr { $$ = zend_ast_create_binary_op(ZEND_SL, $1, $3); } + | expr '%' expr { $$ = zend_ast_create_binary_op(ZEND_MOD, $1, $3); } + | expr T_SL expr { $$ = zend_ast_create_binary_op(ZEND_SL, $1, $3); } | expr T_SR expr { $$ = zend_ast_create_binary_op(ZEND_SR, $1, $3); } | '+' expr %prec T_INC { $$ = zend_ast_create(ZEND_AST_UNARY_PLUS, $2); } | '-' expr %prec T_INC { $$ = zend_ast_create(ZEND_AST_UNARY_MINUS, $2); } | '!' expr { $$ = zend_ast_create_ex(ZEND_AST_UNARY_OP, ZEND_BOOL_NOT, $2); } | '~' expr { $$ = zend_ast_create_ex(ZEND_AST_UNARY_OP, ZEND_BW_NOT, $2); } + | expr T_SPACESHIP expr + { $$ = zend_ast_create_binary_op(ZEND_SPACESHIP, $1, $3); } | expr T_IS_IDENTICAL expr - { $$ = zend_ast_create_binary_op(ZEND_IS_IDENTICAL, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_IDENTICAL, $1, $3); $$->attr |= ZEND_COMPARE_EQUALITY; } | expr T_IS_NOT_IDENTICAL expr - { $$ = zend_ast_create_binary_op(ZEND_IS_NOT_IDENTICAL, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_NOT_IDENTICAL, $1, $3); $$->attr |= ZEND_COMPARE_EQUALITY; } | expr T_IS_EQUAL expr - { $$ = zend_ast_create_binary_op(ZEND_IS_EQUAL, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_EQUAL, $1, $3); $$->attr |= ZEND_COMPARE_EQUALITY; } | expr T_IS_NOT_EQUAL expr - { $$ = zend_ast_create_binary_op(ZEND_IS_NOT_EQUAL, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_NOT_EQUAL, $1, $3); $$->attr |= ZEND_COMPARE_EQUALITY; } | expr '<' expr - { $$ = zend_ast_create_binary_op(ZEND_IS_SMALLER, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_SMALLER, $1, $3); } | expr T_IS_SMALLER_OR_EQUAL expr - { $$ = zend_ast_create_binary_op(ZEND_IS_SMALLER_OR_EQUAL, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_SMALLER_OR_EQUAL, $1, $3); } | expr '>' expr - { $$ = zend_ast_create(ZEND_AST_GREATER, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_SMALLER, $1, $3); $$->attr |= ZEND_COMPARE_GREATER; } | expr T_IS_GREATER_OR_EQUAL expr - { $$ = zend_ast_create(ZEND_AST_GREATER_EQUAL, $1, $3); } - | expr T_SPACESHIP expr - { $$ = zend_ast_create_binary_op(ZEND_SPACESHIP, $1, $3); } + { $$ = zend_ast_create_compare_op(ZEND_IS_SMALLER_OR_EQUAL, $1, $3); $$->attr |= ZEND_COMPARE_GREATER; } | expr T_INSTANCEOF class_name_reference { $$ = zend_ast_create(ZEND_AST_INSTANCEOF, $1, $3); } | '(' expr ')' { $$ = $2; } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index afc3da52dd5ea..59181c15d79ff 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 0.14.3 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -1154,9 +1154,10 @@ int start_line = CG(zend_lineno); YYDEBUG(1, *YYCURSOR); YYFILL(7); yych = *YYCURSOR; - if (yych == '<') goto yy5; + if (yych != '<') goto yy5; YYDEBUG(3, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) == '?') goto yy6; yy4: YYDEBUG(4, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); @@ -1205,12 +1206,14 @@ int start_line = CG(zend_lineno); HANDLE_NEWLINES(yytext, yyleng); RETURN_TOKEN(T_INLINE_HTML); } -#line 1209 "Zend/zend_language_scanner.c" +#line 1210 "Zend/zend_language_scanner.c" yy5: YYDEBUG(5, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '?') goto yy4; + goto yy4; +yy6: YYDEBUG(6, *YYCURSOR); + yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'O') { if (yych == '=') goto yy8; @@ -1230,7 +1233,7 @@ int start_line = CG(zend_lineno); goto inline_char_handler; } } -#line 1234 "Zend/zend_language_scanner.c" +#line 1237 "Zend/zend_language_scanner.c" yy8: YYDEBUG(8, *YYCURSOR); ++YYCURSOR; @@ -1241,7 +1244,7 @@ int start_line = CG(zend_lineno); BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO); } -#line 1245 "Zend/zend_language_scanner.c" +#line 1248 "Zend/zend_language_scanner.c" yy10: YYDEBUG(10, *YYCURSOR); yych = *++YYCURSOR; @@ -1278,7 +1281,7 @@ int start_line = CG(zend_lineno); BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN(T_OPEN_TAG); } -#line 1282 "Zend/zend_language_scanner.c" +#line 1285 "Zend/zend_language_scanner.c" yy16: YYDEBUG(16, *YYCURSOR); ++YYCURSOR; @@ -1325,13 +1328,26 @@ int start_line = CG(zend_lineno); YYFILL(2); yych = *YYCURSOR; if (yych <= '_') { - if (yych == '$') goto yy21; + if (yych != '$') goto yy24; } else { if (yych <= '`') goto yy22; - if (yych == '{') goto yy24; + if (yych == '{') goto yy21; + goto yy24; } YYDEBUG(19, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) <= '_') { + if (yych <= '@') goto yy20; + if (yych <= 'Z') goto yy27; + if (yych >= '_') goto yy27; + } else { + if (yych <= 'z') { + if (yych >= 'a') goto yy27; + } else { + if (yych <= '{') goto yy30; + if (yych >= 0x80) goto yy27; + } + } yy20: YYDEBUG(20, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); @@ -1376,25 +1392,12 @@ int start_line = CG(zend_lineno); zend_scan_escape_string(zendlval, yytext, yyleng, '`'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1380 "Zend/zend_language_scanner.c" +#line 1396 "Zend/zend_language_scanner.c" yy21: YYDEBUG(21, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy20; - if (yych <= 'Z') goto yy25; - if (yych <= '^') goto yy20; - goto yy25; - } else { - if (yych <= 'z') { - if (yych <= '`') goto yy20; - goto yy25; - } else { - if (yych <= '{') goto yy28; - if (yych <= 0x7F) goto yy20; - goto yy25; - } - } + if (yych == '$') goto yy25; + goto yy20; yy22: YYDEBUG(22, *YYCURSOR); ++YYCURSOR; @@ -1405,57 +1408,57 @@ int start_line = CG(zend_lineno); BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN('`'); } -#line 1409 "Zend/zend_language_scanner.c" +#line 1412 "Zend/zend_language_scanner.c" yy24: YYDEBUG(24, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '$') goto yy30; goto yy20; yy25: YYDEBUG(25, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(26, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2145 "Zend/zend_language_scanner.l" + { + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 1429 "Zend/zend_language_scanner.c" +yy27: + YYDEBUG(27, *YYCURSOR); + yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(26, *YYCURSOR); + YYDEBUG(28, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy25; + goto yy27; } if (yych == '-') goto yy32; - if (yych <= '@') goto yy27; + if (yych <= '@') goto yy29; if (yych <= '[') goto yy34; -yy27: - YYDEBUG(27, *YYCURSOR); +yy29: + YYDEBUG(29, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1869 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1435 "Zend/zend_language_scanner.c" -yy28: - YYDEBUG(28, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(29, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1587 "Zend/zend_language_scanner.l" - { - yy_push_state(ST_LOOKING_FOR_VARNAME); - RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); -} -#line 1446 "Zend/zend_language_scanner.c" +#line 1451 "Zend/zend_language_scanner.c" yy30: YYDEBUG(30, *YYCURSOR); ++YYCURSOR; YYDEBUG(31, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2145 "Zend/zend_language_scanner.l" +#line 1587 "Zend/zend_language_scanner.l" { - Z_LVAL_P(zendlval) = (zend_long) '{'; - yy_push_state(ST_IN_SCRIPTING); - yyless(1); - RETURN_TOKEN(T_CURLY_OPEN); + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1459 "Zend/zend_language_scanner.c" +#line 1462 "Zend/zend_language_scanner.c" yy32: YYDEBUG(32, *YYCURSOR); yych = *++YYCURSOR; @@ -1463,7 +1466,7 @@ int start_line = CG(zend_lineno); yy33: YYDEBUG(33, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy27; + goto yy29; yy34: YYDEBUG(34, *YYCURSOR); ++YYCURSOR; @@ -1476,7 +1479,7 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1480 "Zend/zend_language_scanner.c" +#line 1483 "Zend/zend_language_scanner.c" yy36: YYDEBUG(36, *YYCURSOR); yych = *++YYCURSOR; @@ -1501,7 +1504,7 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1505 "Zend/zend_language_scanner.c" +#line 1508 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_DOUBLE_QUOTES: @@ -1544,13 +1547,28 @@ int start_line = CG(zend_lineno); YYFILL(2); yych = *YYCURSOR; if (yych <= '#') { - if (yych == '"') goto yy43; + if (yych == '"') goto yy44; + goto yy46; } else { - if (yych <= '$') goto yy45; - if (yych == '{') goto yy46; + if (yych <= '$') goto yy41; + if (yych == '{') goto yy43; + goto yy46; } +yy41: YYDEBUG(41, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) <= '_') { + if (yych <= '@') goto yy42; + if (yych <= 'Z') goto yy49; + if (yych >= '_') goto yy49; + } else { + if (yych <= 'z') { + if (yych >= 'a') goto yy49; + } else { + if (yych <= '{') goto yy52; + if (yych >= 0x80) goto yy49; + } + } yy42: YYDEBUG(42, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); @@ -1603,86 +1621,73 @@ int start_line = CG(zend_lineno); zend_scan_escape_string(zendlval, yytext, yyleng, '"'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1607 "Zend/zend_language_scanner.c" +#line 1625 "Zend/zend_language_scanner.c" yy43: YYDEBUG(43, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == '$') goto yy47; + goto yy42; +yy44: YYDEBUG(44, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(45, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 2153 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN('"'); } -#line 1618 "Zend/zend_language_scanner.c" -yy45: - YYDEBUG(45, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy42; - if (yych <= 'Z') goto yy47; - if (yych <= '^') goto yy42; - goto yy47; - } else { - if (yych <= 'z') { - if (yych <= '`') goto yy42; - goto yy47; - } else { - if (yych <= '{') goto yy50; - if (yych <= 0x7F) goto yy42; - goto yy47; - } - } +#line 1641 "Zend/zend_language_scanner.c" yy46: YYDEBUG(46, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '$') goto yy52; goto yy42; yy47: YYDEBUG(47, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(48, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2145 "Zend/zend_language_scanner.l" + { + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 1658 "Zend/zend_language_scanner.c" +yy49: + YYDEBUG(49, *YYCURSOR); + yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(48, *YYCURSOR); + YYDEBUG(50, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy47; + goto yy49; } if (yych == '-') goto yy54; - if (yych <= '@') goto yy49; + if (yych <= '@') goto yy51; if (yych <= '[') goto yy56; -yy49: - YYDEBUG(49, *YYCURSOR); +yy51: + YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1869 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1662 "Zend/zend_language_scanner.c" -yy50: - YYDEBUG(50, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(51, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1587 "Zend/zend_language_scanner.l" - { - yy_push_state(ST_LOOKING_FOR_VARNAME); - RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); -} -#line 1673 "Zend/zend_language_scanner.c" +#line 1680 "Zend/zend_language_scanner.c" yy52: YYDEBUG(52, *YYCURSOR); ++YYCURSOR; YYDEBUG(53, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2145 "Zend/zend_language_scanner.l" +#line 1587 "Zend/zend_language_scanner.l" { - Z_LVAL_P(zendlval) = (zend_long) '{'; - yy_push_state(ST_IN_SCRIPTING); - yyless(1); - RETURN_TOKEN(T_CURLY_OPEN); + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1686 "Zend/zend_language_scanner.c" +#line 1691 "Zend/zend_language_scanner.c" yy54: YYDEBUG(54, *YYCURSOR); yych = *++YYCURSOR; @@ -1690,7 +1695,7 @@ int start_line = CG(zend_lineno); yy55: YYDEBUG(55, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy49; + goto yy51; yy56: YYDEBUG(56, *YYCURSOR); ++YYCURSOR; @@ -1703,7 +1708,7 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1707 "Zend/zend_language_scanner.c" +#line 1712 "Zend/zend_language_scanner.c" yy58: YYDEBUG(58, *YYCURSOR); yych = *++YYCURSOR; @@ -1728,7 +1733,7 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1732 "Zend/zend_language_scanner.c" +#line 1737 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_END_HEREDOC: @@ -1752,7 +1757,7 @@ int start_line = CG(zend_lineno); BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN(T_END_HEREDOC); } -#line 1756 "Zend/zend_language_scanner.c" +#line 1761 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_HEREDOC: { @@ -1793,10 +1798,24 @@ int start_line = CG(zend_lineno); YYDEBUG(65, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yych == '$') goto yy69; - if (yych == '{') goto yy70; + if (yych == '$') goto yy67; + if (yych == '{') goto yy69; + goto yy70; +yy67: YYDEBUG(67, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) <= '_') { + if (yych <= '@') goto yy68; + if (yych <= 'Z') goto yy73; + if (yych >= '_') goto yy73; + } else { + if (yych <= 'z') { + if (yych >= 'a') goto yy73; + } else { + if (yych <= '{') goto yy76; + if (yych >= 0x80) goto yy73; + } + } yy68: YYDEBUG(68, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); @@ -1873,75 +1892,62 @@ int start_line = CG(zend_lineno); zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1877 "Zend/zend_language_scanner.c" +#line 1896 "Zend/zend_language_scanner.c" yy69: YYDEBUG(69, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy71; - if (yych <= '^') goto yy68; - goto yy71; - } else { - if (yych <= 'z') { - if (yych <= '`') goto yy68; - goto yy71; - } else { - if (yych <= '{') goto yy74; - if (yych <= 0x7F) goto yy68; - goto yy71; - } - } + if (yych == '$') goto yy71; + goto yy68; yy70: YYDEBUG(70, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '$') goto yy76; goto yy68; yy71: YYDEBUG(71, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(72, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2145 "Zend/zend_language_scanner.l" + { + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 1918 "Zend/zend_language_scanner.c" +yy73: + YYDEBUG(73, *YYCURSOR); + yyaccept = 0; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(72, *YYCURSOR); + YYDEBUG(74, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy71; + goto yy73; } if (yych == '-') goto yy78; - if (yych <= '@') goto yy73; + if (yych <= '@') goto yy75; if (yych <= '[') goto yy80; -yy73: - YYDEBUG(73, *YYCURSOR); +yy75: + YYDEBUG(75, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1869 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1921 "Zend/zend_language_scanner.c" -yy74: - YYDEBUG(74, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(75, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1587 "Zend/zend_language_scanner.l" - { - yy_push_state(ST_LOOKING_FOR_VARNAME); - RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); -} -#line 1932 "Zend/zend_language_scanner.c" +#line 1940 "Zend/zend_language_scanner.c" yy76: YYDEBUG(76, *YYCURSOR); ++YYCURSOR; YYDEBUG(77, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2145 "Zend/zend_language_scanner.l" +#line 1587 "Zend/zend_language_scanner.l" { - Z_LVAL_P(zendlval) = (zend_long) '{'; - yy_push_state(ST_IN_SCRIPTING); - yyless(1); - RETURN_TOKEN(T_CURLY_OPEN); + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1945 "Zend/zend_language_scanner.c" +#line 1951 "Zend/zend_language_scanner.c" yy78: YYDEBUG(78, *YYCURSOR); yych = *++YYCURSOR; @@ -1949,7 +1955,7 @@ int start_line = CG(zend_lineno); yy79: YYDEBUG(79, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy73; + goto yy75; yy80: YYDEBUG(80, *YYCURSOR); ++YYCURSOR; @@ -1962,7 +1968,7 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1966 "Zend/zend_language_scanner.c" +#line 1972 "Zend/zend_language_scanner.c" yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; @@ -1987,51 +1993,49 @@ int start_line = CG(zend_lineno); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1991 "Zend/zend_language_scanner.c" +#line 1997 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_IN_SCRIPTING: { static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 4, 0, 0, 4, 0, 0, + 0, 192, 64, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, + 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 216, 152, 152, 152, 152, 152, 152, - 152, 152, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 144, 144, 144, 144, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 16, - 0, 144, 144, 144, 144, 144, 144, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, + 60, 60, 44, 44, 44, 44, 44, 44, + 44, 44, 0, 0, 0, 0, 0, 0, + 0, 36, 36, 36, 36, 36, 36, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 0, 0, 0, 0, 4, + 0, 36, 36, 36, 36, 36, 36, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, }; YYDEBUG(85, *YYCURSOR); YYFILL(16); yych = *YYCURSOR; - if (yybm[0+yych] & 4) { - goto yy89; - } + YYDEBUG(-1, yych); switch (yych) { case 0x00: case 0x01: @@ -2042,11 +2046,8 @@ int start_line = CG(zend_lineno); case 0x06: case 0x07: case 0x08: - case '\t': - case '\n': case '\v': case '\f': - case '\r': case 0x0E: case 0x0F: case 0x10: @@ -2065,29 +2066,32 @@ int start_line = CG(zend_lineno); case 0x1D: case 0x1E: case 0x1F: - case 0x7F: goto yy87; - case ' ': - case '!': goto yy92; - case '"': goto yy94; - case '#': goto yy96; - case '$': goto yy98; - case '%': goto yy99; - case '&': goto yy100; - case '\'': goto yy101; - case '(': goto yy103; + case 0x7F: goto yy148; + case '\t': + case '\n': + case '\r': + case ' ': goto yy104; + case '!': goto yy119; + case '"': goto yy144; + case '#': goto yy140; + case '$': goto yy130; + case '%': goto yy124; + case '&': goto yy125; + case '\'': goto yy142; + case '(': goto yy113; case ')': case ',': case ';': case '@': case '[': case ']': - case '~': goto yy104; - case '*': goto yy105; - case '+': goto yy106; - case '-': goto yy107; - case '.': goto yy108; - case '/': goto yy109; - case '0': goto yy110; + case '~': goto yy131; + case '*': goto yy122; + case '+': goto yy118; + case '-': goto yy102; + case '.': goto yy109; + case '/': goto yy123; + case '0': goto yy136; case '1': case '2': case '3': @@ -2096,414 +2100,628 @@ int start_line = CG(zend_lineno); case '6': case '7': case '8': - case '9': goto yy112; - case ':': goto yy114; - case '<': goto yy115; + case '9': goto yy138; + case ':': goto yy106; + case '<': goto yy120; case '=': goto yy116; - case '>': goto yy117; - case '?': goto yy118; + case '>': goto yy121; + case '?': goto yy110; case 'A': - case 'a': goto yy119; + case 'a': goto yy97; case 'B': - case 'b': goto yy121; + case 'b': goto yy99; case 'C': - case 'c': goto yy122; + case 'c': goto yy91; case 'D': - case 'd': goto yy123; + case 'd': goto yy89; case 'E': - case 'e': goto yy124; + case 'e': goto yy87; case 'F': - case 'f': goto yy125; + case 'f': goto yy90; case 'G': - case 'g': goto yy126; + case 'g': goto yy100; case 'I': - case 'i': goto yy129; + case 'i': goto yy95; case 'L': - case 'l': goto yy130; + case 'l': goto yy117; case 'N': - case 'n': goto yy131; + case 'n': goto yy111; case 'O': - case 'o': goto yy132; + case 'o': goto yy128; case 'P': - case 'p': goto yy133; + case 'p': goto yy101; case 'R': - case 'r': goto yy134; + case 'r': goto yy92; case 'S': - case 's': goto yy135; + case 's': goto yy98; case 'T': - case 't': goto yy136; + case 't': goto yy94; case 'U': - case 'u': goto yy137; + case 'u': goto yy114; case 'V': - case 'v': goto yy138; + case 'v': goto yy112; case 'W': - case 'w': goto yy139; + case 'w': goto yy96; case 'X': - case 'x': goto yy140; + case 'x': goto yy129; case 'Y': - case 'y': goto yy141; - case '\\': goto yy142; - case '^': goto yy144; - case '_': goto yy145; + case 'y': goto yy93; + case '\\': goto yy107; + case '^': goto yy127; + case '_': goto yy115; case '`': goto yy146; - case '{': goto yy148; - case '|': goto yy150; - case '}': goto yy151; - default: goto yy127; + case '{': goto yy132; + case '|': goto yy126; + case '}': goto yy134; + default: goto yy139; } yy87: YYDEBUG(87, *YYCURSOR); ++YYCURSOR; + YYDEBUG(-1, yych); + switch ((yych = *YYCURSOR)) { + case 'C': + case 'c': goto yy705; + case 'L': + case 'l': goto yy706; + case 'M': + case 'm': goto yy707; + case 'N': + case 'n': goto yy708; + case 'V': + case 'v': goto yy709; + case 'X': + case 'x': goto yy710; + default: goto yy151; + } +yy88: YYDEBUG(88, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2387 "Zend/zend_language_scanner.l" +#line 1892 "Zend/zend_language_scanner.l" { - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - - zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); - goto restart; + zend_copy_value(zendlval, yytext, yyleng); + RETURN_TOKEN(T_STRING); } -#line 2169 "Zend/zend_language_scanner.c" +#line 2186 "Zend/zend_language_scanner.c" yy89: YYDEBUG(89, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') goto yy687; + goto yy151; + } else { + if (yych <= 'I') goto yy688; + if (yych <= 'N') goto yy151; + goto yy689; + } + } else { + if (yych <= 'h') { + if (yych == 'e') goto yy687; + goto yy151; + } else { + if (yych <= 'i') goto yy688; + if (yych == 'o') goto yy689; + goto yy151; + } + } +yy90: YYDEBUG(90, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy89; + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'I') goto yy663; + goto yy151; + } else { + if (yych <= 'O') goto yy664; + if (yych <= 'T') goto yy151; + goto yy665; + } + } else { + if (yych <= 'n') { + if (yych == 'i') goto yy663; + goto yy151; + } else { + if (yych <= 'o') goto yy664; + if (yych == 'u') goto yy665; + goto yy151; + } } +yy91: YYDEBUG(91, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1291 "Zend/zend_language_scanner.l" - { - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_WHITESPACE); -} -#line 2186 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') goto yy628; + goto yy151; + } else { + if (yych <= 'L') goto yy629; + if (yych <= 'N') goto yy151; + goto yy630; + } + } else { + if (yych <= 'k') { + if (yych == 'a') goto yy628; + goto yy151; + } else { + if (yych <= 'l') goto yy629; + if (yych == 'o') goto yy630; + goto yy151; + } + } yy92: YYDEBUG(92, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy153; + yych = *++YYCURSOR; + if (yych == 'E') goto yy610; + if (yych == 'e') goto yy610; + goto yy151; yy93: YYDEBUG(93, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1576 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(yytext[0]); -} -#line 2198 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy598; + if (yych == 'i') goto yy598; + goto yy151; yy94: YYDEBUG(94, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(95, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2035 "Zend/zend_language_scanner.l" - { - int bprefix = (yytext[0] != '"') ? 1 : 0; - - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '"': - yyleng = YYCURSOR - SCNG(yy_text); - zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"'); - RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); - case '$': - if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { - break; - } - continue; - case '{': - if (*YYCURSOR == '$') { - break; - } - continue; - case '\\': - if (YYCURSOR < YYLIMIT) { - YYCURSOR++; - } - /* fall through */ - default: - continue; + yych = *++YYCURSOR; + if (yych <= 'R') { + if (yych == 'H') goto yy586; + if (yych <= 'Q') goto yy151; + goto yy587; + } else { + if (yych <= 'h') { + if (yych <= 'g') goto yy151; + goto yy586; + } else { + if (yych == 'r') goto yy587; + goto yy151; + } + } +yy95: + YYDEBUG(95, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'F') goto yy533; + goto yy151; + } else { + if (yych <= 'M') goto yy535; + if (yych <= 'N') goto yy536; + if (yych <= 'R') goto yy151; + goto yy537; + } + } else { + if (yych <= 'm') { + if (yych == 'f') goto yy533; + if (yych <= 'l') goto yy151; + goto yy535; + } else { + if (yych <= 'n') goto yy536; + if (yych == 's') goto yy537; + goto yy151; + } } - - YYCURSOR--; - break; - } - - /* Remember how much was scanned to save rescanning */ - SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng); - - YYCURSOR = SCNG(yy_text) + yyleng; - - BEGIN(ST_DOUBLE_QUOTES); - RETURN_TOKEN('"'); -} -#line 2245 "Zend/zend_language_scanner.c" yy96: YYDEBUG(96, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'H') goto yy528; + if (yych == 'h') goto yy528; + goto yy151; +yy97: YYDEBUG(97, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1898 "Zend/zend_language_scanner.l" - { - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '\r': - if (*YYCURSOR == '\n') { - YYCURSOR++; - } - /* fall through */ - case '\n': - CG(zend_lineno)++; - break; - case '?': - if (*YYCURSOR == '>') { - YYCURSOR--; - break; - } - /* fall through */ - default: - continue; + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'B') goto yy510; + goto yy151; + } else { + if (yych <= 'N') goto yy511; + if (yych <= 'Q') goto yy151; + if (yych <= 'R') goto yy512; + goto yy513; + } + } else { + if (yych <= 'n') { + if (yych == 'b') goto yy510; + if (yych <= 'm') goto yy151; + goto yy511; + } else { + if (yych <= 'q') goto yy151; + if (yych <= 'r') goto yy512; + if (yych <= 's') goto yy513; + goto yy151; + } } - - break; - } - - yyleng = YYCURSOR - SCNG(yy_text); - - RETURN_TOKEN(T_COMMENT); -} -#line 2280 "Zend/zend_language_scanner.c" yy98: YYDEBUG(98, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy93; - if (yych <= 'Z') goto yy155; - if (yych <= '^') goto yy93; - goto yy155; + if (yych <= 'W') { + if (yych == 'T') goto yy498; + if (yych <= 'V') goto yy151; + goto yy499; } else { - if (yych <= '`') goto yy93; - if (yych <= 'z') goto yy155; - if (yych <= 0x7F) goto yy93; - goto yy155; + if (yych <= 't') { + if (yych <= 's') goto yy151; + goto yy498; + } else { + if (yych == 'w') goto yy499; + goto yy151; + } } yy99: YYDEBUG(99, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '=') goto yy158; - goto yy93; + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') { + if (yych <= '"') { + if (yych <= '!') goto yy151; + goto yy490; + } else { + if (yych == '\'') goto yy491; + goto yy151; + } + } else { + if (yych <= 'R') { + if (yych <= '<') goto yy489; + if (yych <= 'Q') goto yy151; + goto yy492; + } else { + if (yych == 'r') goto yy492; + goto yy151; + } + } yy100: YYDEBUG(100, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '&') goto yy160; - if (yych == '=') goto yy162; - goto yy93; + if (yych <= 'O') { + if (yych == 'L') goto yy479; + if (yych <= 'N') goto yy151; + goto yy480; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy151; + goto yy479; + } else { + if (yych == 'o') goto yy480; + goto yy151; + } + } yy101: YYDEBUG(101, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych == 'R') goto yy455; + if (yych <= 'T') goto yy151; + goto yy456; + } else { + if (yych <= 'r') { + if (yych <= 'q') goto yy151; + goto yy455; + } else { + if (yych == 'u') goto yy456; + goto yy151; + } + } +yy102: YYDEBUG(102, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) <= '<') { + if (yych == '-') goto yy451; + } else { + if (yych <= '=') goto yy449; + if (yych <= '>') goto yy453; + } +yy103: + YYDEBUG(103, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1966 "Zend/zend_language_scanner.l" +#line 1576 "Zend/zend_language_scanner.l" { - register char *s, *t; - char *end; - int bprefix = (yytext[0] != '\'') ? 1 : 0; - - while (1) { - if (YYCURSOR < YYLIMIT) { - if (*YYCURSOR == '\'') { - YYCURSOR++; - yyleng = YYCURSOR - SCNG(yy_text); - - break; - } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) { - YYCURSOR++; - } + RETURN_TOKEN(yytext[0]); +} +#line 2422 "Zend/zend_language_scanner.c" +yy104: + YYDEBUG(104, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy448; +yy105: + YYDEBUG(105, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1291 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_WHITESPACE); +} +#line 2436 "Zend/zend_language_scanner.c" +yy106: + YYDEBUG(106, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == ':') goto yy445; + goto yy103; +yy107: + YYDEBUG(107, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(108, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1316 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NS_SEPARATOR); +} +#line 2451 "Zend/zend_language_scanner.c" +yy109: + YYDEBUG(109, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') { + if (yych == '.') goto yy442; + goto yy103; } else { - yyleng = YYLIMIT - SCNG(yy_text); - - /* Unclosed single quotes; treat similar to double quotes, but without a separate token - * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..." - * rule, which continued in ST_IN_SCRIPTING state after the quote */ - ZVAL_NULL(zendlval); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); + if (yych <= '9') goto yy438; + if (yych == '=') goto yy440; + goto yy103; } - } - - ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2); - - /* convert escape sequences */ - s = t = Z_STRVAL_P(zendlval); - end = s+Z_STRLEN_P(zendlval); - while (s= '0') goto yy155; } else { - if (yych <= 'B') goto yy200; - if (yych == 'E') goto yy201; + if (yych == 'B') goto yy163; + if (yych >= 'E') goto yy157; } } else { - if (yych <= 'd') { - if (yych <= 'X') goto yy202; - if (yych == 'b') goto yy200; + if (yych <= 'b') { + if (yych == 'X') goto yy162; + if (yych >= 'b') goto yy163; } else { - if (yych <= 'e') goto yy201; - if (yych == 'x') goto yy202; + if (yych <= 'e') { + if (yych >= 'e') goto yy157; + } else { + if (yych == 'x') goto yy162; + } } } -yy111: - YYDEBUG(111, *YYCURSOR); +yy137: + YYDEBUG(137, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1646 "Zend/zend_language_scanner.l" { @@ -2550,392 +2768,187 @@ int start_line = CG(zend_lineno); ZEND_ASSERT(!errno); RETURN_TOKEN(T_LNUMBER); } -#line 2554 "Zend/zend_language_scanner.c" -yy112: - YYDEBUG(112, *YYCURSOR); - yyaccept = 1; - YYMARKER = ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; - YYDEBUG(113, *YYCURSOR); - if (yybm[0+yych] & 8) { - goto yy112; - } - if (yych <= 'D') { - if (yych == '.') goto yy191; - goto yy111; - } else { - if (yych <= 'E') goto yy201; - if (yych == 'e') goto yy201; - goto yy111; - } -yy114: - YYDEBUG(114, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == ':') goto yy203; - goto yy93; -yy115: - YYDEBUG(115, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= ';') goto yy93; - if (yych <= '<') goto yy205; - if (yych <= '=') goto yy207; - if (yych <= '>') goto yy209; - goto yy93; -yy116: - YYDEBUG(116, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '<') goto yy93; - if (yych <= '=') goto yy210; - if (yych <= '>') goto yy212; - goto yy93; -yy117: - YYDEBUG(117, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '<') goto yy93; - if (yych <= '=') goto yy214; - if (yych <= '>') goto yy216; - goto yy93; -yy118: - YYDEBUG(118, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '=') goto yy93; - if (yych <= '>') goto yy218; - if (yych <= '?') goto yy220; - goto yy93; -yy119: - YYDEBUG(119, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= 'S') { - if (yych <= 'M') { - if (yych == 'B') goto yy222; - goto yy128; - } else { - if (yych <= 'N') goto yy223; - if (yych <= 'Q') goto yy128; - if (yych <= 'R') goto yy224; - goto yy225; - } - } else { - if (yych <= 'n') { - if (yych == 'b') goto yy222; - if (yych <= 'm') goto yy128; - goto yy223; - } else { - if (yych <= 'q') goto yy128; - if (yych <= 'r') goto yy224; - if (yych <= 's') goto yy225; - goto yy128; - } - } -yy120: - YYDEBUG(120, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1892 "Zend/zend_language_scanner.l" - { - zend_copy_value(zendlval, yytext, yyleng); - RETURN_TOKEN(T_STRING); -} -#line 2640 "Zend/zend_language_scanner.c" -yy121: - YYDEBUG(121, *YYCURSOR); +#line 2772 "Zend/zend_language_scanner.c" +yy138: + YYDEBUG(138, *YYCURSOR); yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ';') { - if (yych <= '"') { - if (yych <= '!') goto yy128; - goto yy94; - } else { - if (yych == '\'') goto yy101; - goto yy128; - } - } else { - if (yych <= 'R') { - if (yych <= '<') goto yy227; - if (yych <= 'Q') goto yy128; - goto yy228; - } else { - if (yych == 'r') goto yy228; - goto yy128; - } - } -yy122: - YYDEBUG(122, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych <= 'K') { - if (yych == 'A') goto yy229; - goto yy128; - } else { - if (yych <= 'L') goto yy230; - if (yych <= 'N') goto yy128; - goto yy231; - } - } else { - if (yych <= 'k') { - if (yych == 'a') goto yy229; - goto yy128; - } else { - if (yych <= 'l') goto yy230; - if (yych == 'o') goto yy231; - goto yy128; - } - } -yy123: - YYDEBUG(123, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych <= 'H') { - if (yych == 'E') goto yy232; - goto yy128; - } else { - if (yych <= 'I') goto yy233; - if (yych <= 'N') goto yy128; - goto yy234; - } - } else { - if (yych <= 'h') { - if (yych == 'e') goto yy232; - goto yy128; - } else { - if (yych <= 'i') goto yy233; - if (yych == 'o') goto yy234; - goto yy128; - } - } -yy124: - YYDEBUG(124, *YYCURSOR); - yych = *++YYCURSOR; - switch (yych) { - case 'C': - case 'c': goto yy236; - case 'L': - case 'l': goto yy237; - case 'M': - case 'm': goto yy238; - case 'N': - case 'n': goto yy239; - case 'V': - case 'v': goto yy240; - case 'X': - case 'x': goto yy241; - default: goto yy128; - } -yy125: - YYDEBUG(125, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'I') goto yy242; - goto yy128; - } else { - if (yych <= 'O') goto yy243; - if (yych <= 'T') goto yy128; - goto yy244; - } + if (yych <= '9') { + if (yych == '.') goto yy152; + if (yych <= '/') goto yy137; + goto yy155; } else { - if (yych <= 'n') { - if (yych == 'i') goto yy242; - goto yy128; + if (yych <= 'E') { + if (yych <= 'D') goto yy137; + goto yy157; } else { - if (yych <= 'o') goto yy243; - if (yych == 'u') goto yy244; - goto yy128; + if (yych == 'e') goto yy157; + goto yy137; } } -yy126: - YYDEBUG(126, *YYCURSOR); +yy139: + YYDEBUG(139, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'L') goto yy245; - if (yych <= 'N') goto yy128; - goto yy246; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy128; - goto yy245; - } else { - if (yych == 'o') goto yy246; - goto yy128; - } - } -yy127: - YYDEBUG(127, *YYCURSOR); + goto yy151; +yy140: + YYDEBUG(140, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy128: - YYDEBUG(128, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy127; - } - goto yy120; -yy129: - YYDEBUG(129, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'S') { - if (yych <= 'L') { - if (yych == 'F') goto yy247; - goto yy128; - } else { - if (yych <= 'M') goto yy249; - if (yych <= 'N') goto yy250; - if (yych <= 'R') goto yy128; - goto yy251; - } - } else { - if (yych <= 'm') { - if (yych == 'f') goto yy247; - if (yych <= 'l') goto yy128; - goto yy249; - } else { - if (yych <= 'n') goto yy250; - if (yych == 's') goto yy251; - goto yy128; - } +yy141: + YYDEBUG(141, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1898 "Zend/zend_language_scanner.l" + { + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + CG(zend_lineno)++; + break; + case '?': + if (*YYCURSOR == '>') { + YYCURSOR--; + break; + } + /* fall through */ + default: + continue; } -yy130: - YYDEBUG(130, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy252; - if (yych == 'i') goto yy252; - goto yy128; -yy131: - YYDEBUG(131, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'E') { - if (yych == 'A') goto yy253; - if (yych <= 'D') goto yy128; - goto yy254; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy253; - } else { - if (yych == 'e') goto yy254; - goto yy128; + + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + RETURN_TOKEN(T_COMMENT); +} +#line 2829 "Zend/zend_language_scanner.c" +yy142: + YYDEBUG(142, *YYCURSOR); + ++YYCURSOR; +yy143: + YYDEBUG(143, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1966 "Zend/zend_language_scanner.l" + { + register char *s, *t; + char *end; + int bprefix = (yytext[0] != '\'') ? 1 : 0; + + while (1) { + if (YYCURSOR < YYLIMIT) { + if (*YYCURSOR == '\'') { + YYCURSOR++; + yyleng = YYCURSOR - SCNG(yy_text); + + break; + } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; } - } -yy132: - YYDEBUG(132, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy255; - if (yych == 'r') goto yy255; - goto yy128; -yy133: - YYDEBUG(133, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych == 'R') goto yy257; - if (yych <= 'T') goto yy128; - goto yy258; } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy128; - goto yy257; - } else { - if (yych == 'u') goto yy258; - goto yy128; - } + yyleng = YYLIMIT - SCNG(yy_text); + + /* Unclosed single quotes; treat similar to double quotes, but without a separate token + * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..." + * rule, which continued in ST_IN_SCRIPTING state after the quote */ + ZVAL_NULL(zendlval); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -yy134: - YYDEBUG(134, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy259; - if (yych == 'e') goto yy259; - goto yy128; -yy135: - YYDEBUG(135, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'W') { - if (yych == 'T') goto yy260; - if (yych <= 'V') goto yy128; - goto yy261; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy128; - goto yy260; - } else { - if (yych == 'w') goto yy261; - goto yy128; + } + + ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2); + + /* convert escape sequences */ + s = t = Z_STRVAL_P(zendlval); + end = s+Z_STRLEN_P(zendlval); + while (s YYLIMIT) { + RETURN_TOKEN(END); + } + + zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); + goto restart; } -#line 2961 "Zend/zend_language_scanner.c" +#line 2978 "Zend/zend_language_scanner.c" yy150: YYDEBUG(150, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '=') goto yy273; - if (yych == '|') goto yy275; - goto yy93; + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; yy151: YYDEBUG(151, *YYCURSOR); - ++YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy150; + } + goto yy88; +yy152: YYDEBUG(152, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1593 "Zend/zend_language_scanner.l" - { - RESET_DOC_COMMENT(); - if (!zend_stack_is_empty(&SCNG(state_stack))) { - yy_pop_state(); - } - RETURN_TOKEN('}'); -} -#line 2981 "Zend/zend_language_scanner.c" -yy153: + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; YYDEBUG(153, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy277; + if (yybm[0+yych] & 8) { + goto yy152; + } + if (yych == 'E') goto yy157; + if (yych == 'e') goto yy157; yy154: YYDEBUG(154, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1480 "Zend/zend_language_scanner.l" +#line 1740 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IS_NOT_EQUAL); + const char *end; + + ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == yytext + yyleng); + RETURN_TOKEN(T_DNUMBER); } -#line 2993 "Zend/zend_language_scanner.c" +#line 3014 "Zend/zend_language_scanner.c" yy155: YYDEBUG(155, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(3); yych = *YYCURSOR; YYDEBUG(156, *YYCURSOR); - if (yych <= '^') { - if (yych <= '9') { - if (yych >= '0') goto yy155; - } else { - if (yych <= '@') goto yy157; - if (yych <= 'Z') goto yy155; - } + if (yych <= '9') { + if (yych == '.') goto yy152; + if (yych <= '/') goto yy137; + goto yy155; } else { - if (yych <= '`') { - if (yych <= '_') goto yy155; + if (yych <= 'E') { + if (yych <= 'D') goto yy137; } else { - if (yych <= 'z') goto yy155; - if (yych >= 0x80) goto yy155; + if (yych != 'e') goto yy137; } } yy157: YYDEBUG(157, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1869 "Zend/zend_language_scanner.l" - { - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 3023 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych <= ',') { + if (yych == '+') goto yy159; + } else { + if (yych <= '-') goto yy159; + if (yych <= '/') goto yy158; + if (yych <= '9') goto yy160; + } yy158: YYDEBUG(158, *YYCURSOR); - ++YYCURSOR; + YYCURSOR = YYMARKER; + if (yyaccept <= 3) { + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy88; + } else { + goto yy103; + } + } else { + if (yyaccept == 2) { + goto yy137; + } else { + goto yy154; + } + } + } else { + if (yyaccept <= 5) { + if (yyaccept == 4) { + goto yy191; + } else { + goto yy211; + } + } else { + goto yy602; + } + } +yy159: YYDEBUG(159, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1524 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_MOD_EQUAL); -} -#line 3033 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych <= '/') goto yy158; + if (yych >= ':') goto yy158; yy160: YYDEBUG(160, *YYCURSOR); ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(161, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1552 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_BOOLEAN_AND); -} -#line 3043 "Zend/zend_language_scanner.c" + if (yych <= '/') goto yy154; + if (yych <= '9') goto yy160; + goto yy154; yy162: YYDEBUG(162, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yybm[0+yych] & 32) { + goto yy167; + } + goto yy158; +yy163: YYDEBUG(163, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1536 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_AND_EQUAL); -} -#line 3053 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy164; + } + goto yy158; yy164: YYDEBUG(164, *YYCURSOR); ++YYCURSOR; - YYFILL(7); + YYFILL(1); yych = *YYCURSOR; -yy165: YYDEBUG(165, *YYCURSOR); - if (yybm[0+yych] & 32) { + if (yybm[0+yych] & 16) { goto yy164; } - switch (yych) { - case 'A': - case 'a': goto yy167; - case 'B': - case 'b': goto yy168; - case 'D': - case 'd': goto yy169; - case 'F': - case 'f': goto yy170; - case 'I': - case 'i': goto yy171; - case 'O': - case 'o': goto yy172; - case 'R': - case 'r': goto yy173; - case 'S': - case 's': goto yy174; - case 'U': - case 'u': goto yy175; - default: goto yy166; - } -yy166: YYDEBUG(166, *YYCURSOR); - YYCURSOR = YYMARKER; - if (yyaccept <= 3) { - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy93; - } else { - goto yy111; - } - } else { - if (yyaccept == 2) { - goto yy120; - } else { - goto yy193; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1618 "Zend/zend_language_scanner.l" + { + char *bin = yytext + 2; /* Skip "0b" */ + int len = yyleng - 2; + char *end; + + /* Skip any leading 0s */ + while (*bin == '0') { + ++bin; + --len; + } + + if (len < SIZEOF_ZEND_LONG * 8) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); } else { - if (yyaccept <= 5) { - if (yyaccept == 4) { - goto yy197; - } else { - goto yy206; - } - } else { - goto yy541; - } + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2)); + ZEND_ASSERT(!errno && end == yytext + yyleng); } + RETURN_TOKEN(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == yytext + yyleng); + RETURN_TOKEN(T_DNUMBER); + } +} +#line 3138 "Zend/zend_language_scanner.c" yy167: YYDEBUG(167, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy279; - if (yych == 'r') goto yy279; - goto yy166; -yy168: + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(168, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'I') goto yy280; - if (yych <= 'N') goto yy166; - goto yy281; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy166; - goto yy280; - } else { - if (yych == 'o') goto yy281; - goto yy166; - } + if (yybm[0+yych] & 32) { + goto yy167; } -yy169: YYDEBUG(169, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy282; - if (yych == 'o') goto yy282; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1691 "Zend/zend_language_scanner.l" + { + char *hex = yytext + 2; /* Skip "0x" */ + int len = yyleng - 2; + char *end; + + /* Skip any leading 0s */ + while (*hex == '0') { + hex++; + len--; + } + + if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16)); + ZEND_ASSERT(!errno && end == hex + len); + } + RETURN_TOKEN(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == hex + len); + RETURN_TOKEN(T_DNUMBER); + } +} +#line 3178 "Zend/zend_language_scanner.c" yy170: YYDEBUG(170, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy283; - if (yych == 'l') goto yy283; - goto yy166; -yy171: + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(171, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy284; - if (yych == 'n') goto yy284; - goto yy166; + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy170; + } else { + if (yych <= '@') goto yy172; + if (yych <= 'Z') goto yy170; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy170; + } else { + if (yych <= 'z') goto yy170; + if (yych >= 0x80) goto yy170; + } + } yy172: YYDEBUG(172, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy285; - if (yych == 'b') goto yy285; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1869 "Zend/zend_language_scanner.l" + { + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); +} +#line 3208 "Zend/zend_language_scanner.c" yy173: YYDEBUG(173, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy286; - if (yych == 'e') goto yy286; - goto yy166; + if (yych == 'R') goto yy174; + if (yych != 'r') goto yy151; yy174: YYDEBUG(174, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy287; - if (yych == 't') goto yy287; - goto yy166; -yy175: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(175, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy288; - if (yych == 'n') goto yy288; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1564 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LOGICAL_XOR); +} +#line 3226 "Zend/zend_language_scanner.c" yy176: YYDEBUG(176, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy289; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1508 "Zend/zend_language_scanner.l" +#line 1556 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_POW); + RETURN_TOKEN(T_LOGICAL_OR); } -#line 3187 "Zend/zend_language_scanner.c" +#line 3239 "Zend/zend_language_scanner.c" yy178: YYDEBUG(178, *YYCURSOR); ++YYCURSOR; YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1504 "Zend/zend_language_scanner.l" +#line 1544 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_MUL_EQUAL); + RETURN_TOKEN(T_XOR_EQUAL); } -#line 3197 "Zend/zend_language_scanner.c" +#line 3249 "Zend/zend_language_scanner.c" yy180: YYDEBUG(180, *YYCURSOR); ++YYCURSOR; YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1460 "Zend/zend_language_scanner.l" +#line 1548 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INC); + RETURN_TOKEN(T_BOOLEAN_OR); } -#line 3207 "Zend/zend_language_scanner.c" +#line 3259 "Zend/zend_language_scanner.c" yy182: YYDEBUG(182, *YYCURSOR); ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1496 "Zend/zend_language_scanner.l" +#line 1540 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PLUS_EQUAL); + RETURN_TOKEN(T_OR_EQUAL); } -#line 3217 "Zend/zend_language_scanner.c" +#line 3269 "Zend/zend_language_scanner.c" yy184: YYDEBUG(184, *YYCURSOR); ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1464 "Zend/zend_language_scanner.l" +#line 1552 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DEC); + RETURN_TOKEN(T_BOOLEAN_AND); } -#line 3227 "Zend/zend_language_scanner.c" +#line 3279 "Zend/zend_language_scanner.c" yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; YYDEBUG(187, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1500 "Zend/zend_language_scanner.l" +#line 1536 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_MINUS_EQUAL); + RETURN_TOKEN(T_AND_EQUAL); } -#line 3237 "Zend/zend_language_scanner.c" +#line 3289 "Zend/zend_language_scanner.c" yy188: YYDEBUG(188, *YYCURSOR); ++YYCURSOR; YYDEBUG(189, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1286 "Zend/zend_language_scanner.l" +#line 1524 "Zend/zend_language_scanner.l" { - yy_push_state(ST_LOOKING_FOR_PROPERTY); - RETURN_TOKEN(T_OBJECT_OPERATOR); + RETURN_TOKEN(T_MOD_EQUAL); } -#line 3248 "Zend/zend_language_scanner.c" +#line 3299 "Zend/zend_language_scanner.c" yy190: YYDEBUG(190, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '.') goto yy291; - goto yy166; -yy191: - YYDEBUG(191, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; - YYDEBUG(192, *YYCURSOR); - if (yych <= 'D') { - if (yych <= '/') goto yy193; - if (yych <= '9') goto yy191; - } else { - if (yych <= 'E') goto yy201; - if (yych == 'e') goto yy201; - } -yy193: - YYDEBUG(193, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1740 "Zend/zend_language_scanner.l" - { - const char *end; - - ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == yytext + yyleng); - RETURN_TOKEN(T_DNUMBER); -} -#line 3280 "Zend/zend_language_scanner.c" -yy194: - YYDEBUG(194, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(195, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1520 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CONCAT_EQUAL); -} -#line 3290 "Zend/zend_language_scanner.c" -yy196: - YYDEBUG(196, *YYCURSOR); yyaccept = 4; yych = *(YYMARKER = ++YYCURSOR); - if (yych == '*') goto yy293; -yy197: - YYDEBUG(197, *YYCURSOR); + if (yych == '*') goto yy195; +yy191: + YYDEBUG(191, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1927 "Zend/zend_language_scanner.l" { @@ -3328,2830 +3337,2519 @@ int start_line = CG(zend_lineno); RETURN_TOKEN(T_COMMENT); } -#line 3332 "Zend/zend_language_scanner.c" -yy198: - YYDEBUG(198, *YYCURSOR); +#line 3341 "Zend/zend_language_scanner.c" +yy192: + YYDEBUG(192, *YYCURSOR); + yych = *++YYCURSOR; + goto yy141; +yy193: + YYDEBUG(193, *YYCURSOR); ++YYCURSOR; - YYDEBUG(199, *YYCURSOR); + YYDEBUG(194, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1516 "Zend/zend_language_scanner.l" { RETURN_TOKEN(T_DIV_EQUAL); } -#line 3342 "Zend/zend_language_scanner.c" -yy200: - YYDEBUG(200, *YYCURSOR); +#line 3355 "Zend/zend_language_scanner.c" +yy195: + YYDEBUG(195, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 64) { - goto yy294; + goto yy196; } - goto yy166; -yy201: - YYDEBUG(201, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy297; - goto yy166; - } else { - if (yych <= '-') goto yy297; - if (yych <= '/') goto yy166; - if (yych <= '9') goto yy298; - goto yy166; + goto yy158; +yy196: + YYDEBUG(196, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(197, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy196; } + goto yy191; +yy198: + YYDEBUG(198, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '=') goto yy202; + YYDEBUG(199, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1508 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_POW); +} +#line 3383 "Zend/zend_language_scanner.c" +yy200: + YYDEBUG(200, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(201, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1504 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MUL_EQUAL); +} +#line 3393 "Zend/zend_language_scanner.c" yy202: YYDEBUG(202, *YYCURSOR); - yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy300; - } - goto yy166; -yy203: - YYDEBUG(203, *YYCURSOR); ++YYCURSOR; - YYDEBUG(204, *YYCURSOR); + YYDEBUG(203, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1312 "Zend/zend_language_scanner.l" +#line 1512 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); + RETURN_TOKEN(T_POW_EQUAL); } -#line 3378 "Zend/zend_language_scanner.c" -yy205: +#line 3403 "Zend/zend_language_scanner.c" +yy204: + YYDEBUG(204, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '=') goto yy208; YYDEBUG(205, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ';') goto yy206; - if (yych <= '<') goto yy303; - if (yych <= '=') goto yy305; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1572 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SR); +} +#line 3414 "Zend/zend_language_scanner.c" yy206: YYDEBUG(206, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1568 "Zend/zend_language_scanner.l" +#line 1492 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SL); + RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); } -#line 3393 "Zend/zend_language_scanner.c" -yy207: - YYDEBUG(207, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '>') goto yy307; +#line 3424 "Zend/zend_language_scanner.c" +yy208: YYDEBUG(208, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(209, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1488 "Zend/zend_language_scanner.l" +#line 1532 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); + RETURN_TOKEN(T_SR_EQUAL); } -#line 3404 "Zend/zend_language_scanner.c" -yy209: - YYDEBUG(209, *YYCURSOR); - yych = *++YYCURSOR; - goto yy154; +#line 3434 "Zend/zend_language_scanner.c" yy210: YYDEBUG(210, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy309; + yyaccept = 5; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') goto yy211; + if (yych <= '<') goto yy220; + if (yych <= '=') goto yy218; +yy211: YYDEBUG(211, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1476 "Zend/zend_language_scanner.l" +#line 1568 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IS_EQUAL); + RETURN_TOKEN(T_SL); } -#line 3419 "Zend/zend_language_scanner.c" +#line 3449 "Zend/zend_language_scanner.c" yy212: YYDEBUG(212, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) == '>') goto yy216; YYDEBUG(213, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1444 "Zend/zend_language_scanner.l" +#line 1488 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DOUBLE_ARROW); + RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); } -#line 3429 "Zend/zend_language_scanner.c" +#line 3460 "Zend/zend_language_scanner.c" yy214: YYDEBUG(214, *YYCURSOR); ++YYCURSOR; +yy215: YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1492 "Zend/zend_language_scanner.l" +#line 1480 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); + RETURN_TOKEN(T_IS_NOT_EQUAL); } -#line 3439 "Zend/zend_language_scanner.c" +#line 3471 "Zend/zend_language_scanner.c" yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy311; YYDEBUG(217, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1572 "Zend/zend_language_scanner.l" +#line 1484 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SR); + RETURN_TOKEN(T_SPACESHIP); } -#line 3450 "Zend/zend_language_scanner.c" +#line 3481 "Zend/zend_language_scanner.c" yy218: YYDEBUG(218, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy313; - if (yych == '\r') goto yy314; -yy219: YYDEBUG(219, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1960 "Zend/zend_language_scanner.l" +#line 1528 "Zend/zend_language_scanner.l" { - BEGIN(INITIAL); - RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */ + RETURN_TOKEN(T_SL_EQUAL); } -#line 3464 "Zend/zend_language_scanner.c" +#line 3491 "Zend/zend_language_scanner.c" yy220: YYDEBUG(220, *YYCURSOR); ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; YYDEBUG(221, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1324 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_COALESCE); -} -#line 3474 "Zend/zend_language_scanner.c" + if (yybm[0+yych] & 128) { + goto yy220; + } + if (yych <= 'Z') { + if (yych <= '&') { + if (yych == '"') goto yy225; + goto yy158; + } else { + if (yych <= '\'') goto yy224; + if (yych <= '@') goto yy158; + } + } else { + if (yych <= '`') { + if (yych != '_') goto yy158; + } else { + if (yych <= 'z') goto yy222; + if (yych <= 0x7F) goto yy158; + } + } yy222: YYDEBUG(222, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy315; - if (yych == 's') goto yy315; - goto yy128; -yy223: + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; YYDEBUG(223, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy316; - if (yych == 'd') goto yy316; - goto yy128; + if (yych <= '@') { + if (yych <= '\f') { + if (yych == '\n') goto yy229; + goto yy158; + } else { + if (yych <= '\r') goto yy231; + if (yych <= '/') goto yy158; + if (yych <= '9') goto yy222; + goto yy158; + } + } else { + if (yych <= '_') { + if (yych <= 'Z') goto yy222; + if (yych <= '^') goto yy158; + goto yy222; + } else { + if (yych <= '`') goto yy158; + if (yych <= 'z') goto yy222; + if (yych <= 0x7F) goto yy158; + goto yy222; + } + } yy224: YYDEBUG(224, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy318; - if (yych == 'r') goto yy318; - goto yy128; + if (yych == '\'') goto yy158; + if (yych <= '/') goto yy233; + if (yych <= '9') goto yy158; + goto yy233; yy225: YYDEBUG(225, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == '"') goto yy158; + if (yych <= '/') goto yy227; + if (yych <= '9') goto yy158; + goto yy227; +yy226: YYDEBUG(226, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1226 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_AS); -} -#line 3505 "Zend/zend_language_scanner.c" + ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; yy227: YYDEBUG(227, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '<') goto yy319; - goto yy166; -yy228: - YYDEBUG(228, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy320; - if (yych == 'e') goto yy320; - goto yy128; -yy229: - YYDEBUG(229, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'L') { - if (yych <= 'K') goto yy128; - goto yy321; + if (yych <= 'Z') { + if (yych <= '/') { + if (yych != '"') goto yy158; } else { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy322; - goto yy323; + if (yych <= '9') goto yy226; + if (yych <= '@') goto yy158; + goto yy226; } } else { - if (yych <= 'r') { - if (yych == 'l') goto yy321; - goto yy128; + if (yych <= '`') { + if (yych == '_') goto yy226; + goto yy158; } else { - if (yych <= 's') goto yy322; - if (yych <= 't') goto yy323; - goto yy128; + if (yych <= 'z') goto yy226; + if (yych <= 0x7F) goto yy158; + goto yy226; } } +yy228: + YYDEBUG(228, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy229; + if (yych == '\r') goto yy231; + goto yy158; +yy229: + YYDEBUG(229, *YYCURSOR); + ++YYCURSOR; yy230: YYDEBUG(230, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'A') goto yy324; - if (yych <= 'N') goto yy128; - goto yy325; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy324; - } else { - if (yych == 'o') goto yy325; - goto yy128; - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 2077 "Zend/zend_language_scanner.l" + { + char *s; + int bprefix = (yytext[0] != '<') ? 1 : 0; + zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label)); + + CG(zend_lineno)++; + heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); + s = yytext+bprefix+3; + while ((*s == ' ') || (*s == '\t')) { + s++; + heredoc_label->length--; + } + + if (*s == '\'') { + s++; + heredoc_label->length -= 2; + + BEGIN(ST_NOWDOC); + } else { + if (*s == '"') { + s++; + heredoc_label->length -= 2; + } + + BEGIN(ST_HEREDOC); + } + + heredoc_label->label = estrndup(s, heredoc_label->length); + + /* Check for ending label on the next line */ + if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) { + YYCTYPE *end = YYCURSOR + heredoc_label->length; + + if (*end == ';') { + end++; + } + + if (*end == '\n' || *end == '\r') { + BEGIN(ST_END_HEREDOC); } + } + + zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label); + + RETURN_TOKEN(T_START_HEREDOC); +} +#line 3643 "Zend/zend_language_scanner.c" yy231: YYDEBUG(231, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy326; - if (yych == 'n') goto yy326; - goto yy128; + if (yych == '\n') goto yy229; + goto yy230; yy232: YYDEBUG(232, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'F') { - if (yych == 'C') goto yy327; - if (yych <= 'E') goto yy128; - goto yy328; + ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy233: + YYDEBUG(233, *YYCURSOR); + if (yych <= 'Z') { + if (yych <= '/') { + if (yych == '\'') goto yy228; + goto yy158; + } else { + if (yych <= '9') goto yy232; + if (yych <= '@') goto yy158; + goto yy232; + } } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy128; - goto yy327; + if (yych <= '`') { + if (yych == '_') goto yy232; + goto yy158; } else { - if (yych == 'f') goto yy328; - goto yy128; + if (yych <= 'z') goto yy232; + if (yych <= 0x7F) goto yy158; + goto yy232; } } -yy233: - YYDEBUG(233, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy329; - if (yych == 'e') goto yy329; - goto yy128; yy234: YYDEBUG(234, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych != '=') goto yy215; YYDEBUG(235, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(236, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1194 "Zend/zend_language_scanner.l" +#line 1472 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DO); + RETURN_TOKEN(T_IS_NOT_IDENTICAL); } -#line 3595 "Zend/zend_language_scanner.c" -yy236: - YYDEBUG(236, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy331; - if (yych == 'h') goto yy331; - goto yy128; +#line 3687 "Zend/zend_language_scanner.c" yy237: YYDEBUG(237, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy332; - if (yych == 's') goto yy332; - goto yy128; -yy238: + ++YYCURSOR; YYDEBUG(238, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy333; - if (yych == 'p') goto yy333; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1496 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PLUS_EQUAL); +} +#line 3697 "Zend/zend_language_scanner.c" yy239: YYDEBUG(239, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy334; - if (yych == 'd') goto yy334; - goto yy128; -yy240: + ++YYCURSOR; YYDEBUG(240, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy335; - if (yych == 'a') goto yy335; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1460 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INC); +} +#line 3707 "Zend/zend_language_scanner.c" yy241: YYDEBUG(241, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych == 'I') goto yy336; - if (yych <= 'S') goto yy128; - goto yy337; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy336; - } else { - if (yych == 't') goto yy337; - goto yy128; - } - } + if (yych == 'S') goto yy242; + if (yych != 's') goto yy151; yy242: YYDEBUG(242, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy338; - if (yych == 'n') goto yy338; - goto yy128; + if (yych == 'T') goto yy243; + if (yych != 't') goto yy151; yy243: YYDEBUG(243, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy339; - if (yych == 'r') goto yy339; - goto yy128; -yy244: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(244, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy341; - if (yych == 'n') goto yy341; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1448 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LIST); +} +#line 3730 "Zend/zend_language_scanner.c" yy245: YYDEBUG(245, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy342; - if (yych == 'o') goto yy342; - goto yy128; -yy246: + ++YYCURSOR; + if ((yych = *YYCURSOR) == '=') goto yy249; YYDEBUG(246, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy343; - if (yych == 't') goto yy343; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1476 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_EQUAL); +} +#line 3741 "Zend/zend_language_scanner.c" yy247: YYDEBUG(247, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } YYDEBUG(248, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1170 "Zend/zend_language_scanner.l" +#line 1444 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IF); + RETURN_TOKEN(T_DOUBLE_ARROW); } -#line 3684 "Zend/zend_language_scanner.c" +#line 3751 "Zend/zend_language_scanner.c" yy249: YYDEBUG(249, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy344; - if (yych == 'p') goto yy344; - goto yy128; -yy250: + ++YYCURSOR; YYDEBUG(250, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'C') { - if (yych <= 'B') goto yy128; - goto yy345; - } else { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy346; - goto yy347; - } - } else { - if (yych <= 'r') { - if (yych == 'c') goto yy345; - goto yy128; - } else { - if (yych <= 's') goto yy346; - if (yych <= 't') goto yy347; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1468 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_IDENTICAL); +} +#line 3761 "Zend/zend_language_scanner.c" yy251: YYDEBUG(251, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy348; - if (yych == 's') goto yy348; - goto yy128; + YYDEBUG(-1, yych); + switch (yych) { + case 'C': + case 'c': goto yy253; + case 'D': + case 'd': goto yy258; + case 'F': + case 'f': goto yy255; + case 'H': + case 'h': goto yy252; + case 'L': + case 'l': goto yy257; + case 'M': + case 'm': goto yy256; + case 'N': + case 'n': goto yy259; + case 'T': + case 't': goto yy254; + default: goto yy151; + } yy252: YYDEBUG(252, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy349; - if (yych == 's') goto yy349; - goto yy128; + if (yych == 'A') goto yy320; + if (yych == 'a') goto yy320; + goto yy151; yy253: YYDEBUG(253, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy350; - if (yych == 'm') goto yy350; - goto yy128; + if (yych == 'L') goto yy313; + if (yych == 'l') goto yy313; + goto yy151; yy254: YYDEBUG(254, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy351; - if (yych == 'w') goto yy351; - goto yy128; + if (yych == 'R') goto yy306; + if (yych == 'r') goto yy306; + goto yy151; yy255: YYDEBUG(255, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(256, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1556 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LOGICAL_OR); -} -#line 3749 "Zend/zend_language_scanner.c" -yy257: - YYDEBUG(257, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'I') goto yy353; - if (yych <= 'N') goto yy128; - goto yy354; + if (yych <= 'U') { + if (yych == 'I') goto yy290; + if (yych <= 'T') goto yy151; + goto yy291; } else { if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy353; + if (yych <= 'h') goto yy151; + goto yy290; } else { - if (yych == 'o') goto yy354; - goto yy128; + if (yych == 'u') goto yy291; + goto yy151; } } +yy256: + YYDEBUG(256, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy282; + if (yych == 'e') goto yy282; + goto yy151; +yy257: + YYDEBUG(257, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy276; + if (yych == 'i') goto yy276; + goto yy151; yy258: YYDEBUG(258, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy355; - if (yych == 'b') goto yy355; - goto yy128; + if (yych == 'I') goto yy271; + if (yych == 'i') goto yy271; + goto yy151; yy259: YYDEBUG(259, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych == 'Q') goto yy356; - if (yych <= 'S') goto yy128; - goto yy357; - } else { - if (yych <= 'q') { - if (yych <= 'p') goto yy128; - goto yy356; - } else { - if (yych == 't') goto yy357; - goto yy128; - } - } + if (yych == 'A') goto yy260; + if (yych != 'a') goto yy151; yy260: YYDEBUG(260, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy358; - if (yych == 'a') goto yy358; - goto yy128; + if (yych == 'M') goto yy261; + if (yych != 'm') goto yy151; yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy359; - if (yych == 'i') goto yy359; - goto yy128; + if (yych == 'E') goto yy262; + if (yych != 'e') goto yy151; yy262: YYDEBUG(262, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy360; - if (yych == 'r') goto yy360; - goto yy128; + if (yych == 'S') goto yy263; + if (yych != 's') goto yy151; yy263: YYDEBUG(263, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'Y') { - if (yych == 'A') goto yy361; - if (yych <= 'X') goto yy128; - goto yy362; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy361; - } else { - if (yych == 'y') goto yy362; - goto yy128; - } - } + if (yych == 'P') goto yy264; + if (yych != 'p') goto yy151; yy264: YYDEBUG(264, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy364; - if (yych == 's') goto yy364; - goto yy128; + if (yych == 'A') goto yy265; + if (yych != 'a') goto yy151; yy265: YYDEBUG(265, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy365; - if (yych == 'e') goto yy365; - goto yy128; + if (yych == 'C') goto yy266; + if (yych != 'c') goto yy151; yy266: YYDEBUG(266, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy367; - if (yych == 'r') goto yy367; - goto yy128; + if (yych == 'E') goto yy267; + if (yych != 'e') goto yy151; yy267: YYDEBUG(267, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy369; - if (yych == 'i') goto yy369; - goto yy128; -yy268: + if (yych != '_') goto yy151; YYDEBUG(268, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy370; - if (yych == 'r') goto yy370; - goto yy128; -yy269: + if (yych != '_') goto yy151; YYDEBUG(269, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy372; - if (yych == 'e') goto yy372; - goto yy128; -yy270: - YYDEBUG(270, *YYCURSOR); ++YYCURSOR; - YYDEBUG(271, *YYCURSOR); + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(270, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1544 "Zend/zend_language_scanner.l" +#line 1777 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_XOR_EQUAL); + RETURN_TOKEN(T_NS_C); } -#line 3867 "Zend/zend_language_scanner.c" +#line 3895 "Zend/zend_language_scanner.c" +yy271: + YYDEBUG(271, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy272; + if (yych != 'r') goto yy151; yy272: YYDEBUG(272, *YYCURSOR); yych = *++YYCURSOR; - switch (yych) { - case 'C': - case 'c': goto yy373; - case 'D': - case 'd': goto yy374; - case 'F': - case 'f': goto yy375; - case 'H': - case 'h': goto yy376; - case 'L': - case 'l': goto yy377; - case 'M': - case 'm': goto yy378; - case 'N': - case 'n': goto yy379; - case 'T': - case 't': goto yy380; - default: goto yy128; - } -yy273: + if (yych != '_') goto yy151; YYDEBUG(273, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(274, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1540 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_OR_EQUAL); -} -#line 3899 "Zend/zend_language_scanner.c" -yy275: - YYDEBUG(275, *YYCURSOR); ++YYCURSOR; - YYDEBUG(276, *YYCURSOR); + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(275, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1548 "Zend/zend_language_scanner.l" +#line 1773 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_BOOLEAN_OR); + RETURN_TOKEN(T_DIR); } -#line 3909 "Zend/zend_language_scanner.c" +#line 3919 "Zend/zend_language_scanner.c" +yy276: + YYDEBUG(276, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy277; + if (yych != 'n') goto yy151; yy277: YYDEBUG(277, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'E') goto yy278; + if (yych != 'e') goto yy151; +yy278: YYDEBUG(278, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1472 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_NOT_IDENTICAL); -} -#line 3919 "Zend/zend_language_scanner.c" -yy279: + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(279, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy381; - if (yych == 'r') goto yy381; - goto yy166; -yy280: + if (yych != '_') goto yy151; YYDEBUG(280, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy382; - if (yych == 'n') goto yy382; - goto yy166; -yy281: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(281, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy383; - if (yych == 'o') goto yy383; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1765 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LINE); +} +#line 3948 "Zend/zend_language_scanner.c" yy282: YYDEBUG(282, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy384; - if (yych == 'u') goto yy384; - goto yy166; + if (yych == 'T') goto yy283; + if (yych != 't') goto yy151; yy283: YYDEBUG(283, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy385; - if (yych == 'o') goto yy385; - goto yy166; + if (yych == 'H') goto yy284; + if (yych != 'h') goto yy151; yy284: YYDEBUG(284, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy386; - if (yych == 't') goto yy386; - goto yy166; + if (yych == 'O') goto yy285; + if (yych != 'o') goto yy151; yy285: YYDEBUG(285, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'J') goto yy387; - if (yych == 'j') goto yy387; - goto yy166; + if (yych == 'D') goto yy286; + if (yych != 'd') goto yy151; yy286: YYDEBUG(286, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy388; - if (yych == 'a') goto yy388; - goto yy166; -yy287: + if (yych != '_') goto yy151; YYDEBUG(287, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy389; - if (yych == 'r') goto yy389; - goto yy166; -yy288: + if (yych != '_') goto yy151; YYDEBUG(288, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy390; - if (yych == 's') goto yy390; - goto yy166; -yy289: - YYDEBUG(289, *YYCURSOR); ++YYCURSOR; - YYDEBUG(290, *YYCURSOR); + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(289, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1512 "Zend/zend_language_scanner.l" +#line 1761 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_POW_EQUAL); + RETURN_TOKEN(T_METHOD_C); } -#line 3989 "Zend/zend_language_scanner.c" +#line 3987 "Zend/zend_language_scanner.c" +yy290: + YYDEBUG(290, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy301; + if (yych == 'l') goto yy301; + goto yy151; yy291: YYDEBUG(291, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy292; + if (yych != 'n') goto yy151; +yy292: YYDEBUG(292, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1320 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ELLIPSIS); -} -#line 3999 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'C') goto yy293; + if (yych != 'c') goto yy151; yy293: YYDEBUG(293, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x08) goto yy166; - if (yych <= '\n') goto yy391; - goto yy166; - } else { - if (yych <= '\r') goto yy391; - if (yych == ' ') goto yy391; - goto yy166; - } + if (yych == 'T') goto yy294; + if (yych != 't') goto yy151; yy294: YYDEBUG(294, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'I') goto yy295; + if (yych != 'i') goto yy151; +yy295: YYDEBUG(295, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy294; - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy296; + if (yych != 'o') goto yy151; +yy296: YYDEBUG(296, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1618 "Zend/zend_language_scanner.l" - { - char *bin = yytext + 2; /* Skip "0b" */ - int len = yyleng - 2; - char *end; - - /* Skip any leading 0s */ - while (*bin == '0') { - ++bin; - --len; - } - - if (len < SIZEOF_ZEND_LONG * 8) { - if (len == 0) { - ZVAL_LONG(zendlval, 0); - } else { - errno = 0; - ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2)); - ZEND_ASSERT(!errno && end == yytext + yyleng); - } - RETURN_TOKEN(T_LNUMBER); - } else { - ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == yytext + yyleng); - RETURN_TOKEN(T_DNUMBER); - } -} -#line 4051 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy297; + if (yych != 'n') goto yy151; yy297: YYDEBUG(297, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy166; - if (yych >= ':') goto yy166; -yy298: + if (yych != '_') goto yy151; YYDEBUG(298, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(299, *YYCURSOR); - if (yych <= '/') goto yy193; - if (yych <= '9') goto yy298; - goto yy193; -yy300: - YYDEBUG(300, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(301, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy300; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(302, *YYCURSOR); + YYDEBUG(300, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1691 "Zend/zend_language_scanner.l" +#line 1757 "Zend/zend_language_scanner.l" { - char *hex = yytext + 2; /* Skip "0x" */ - int len = yyleng - 2; - char *end; - - /* Skip any leading 0s */ - while (*hex == '0') { - hex++; - len--; - } - - if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) { - if (len == 0) { - ZVAL_LONG(zendlval, 0); - } else { - errno = 0; - ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16)); - ZEND_ASSERT(!errno && end == hex + len); - } - RETURN_TOKEN(T_LNUMBER); - } else { - ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == hex + len); - RETURN_TOKEN(T_DNUMBER); - } + RETURN_TOKEN(T_FUNC_C); } -#line 4105 "Zend/zend_language_scanner.c" -yy303: +#line 4042 "Zend/zend_language_scanner.c" +yy301: + YYDEBUG(301, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy302; + if (yych != 'e') goto yy151; +yy302: + YYDEBUG(302, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(303, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(304, *YYCURSOR); - if (yych <= '\'') { - if (yych <= ' ') { - if (yych == '\t') goto yy303; - if (yych <= 0x1F) goto yy166; - goto yy303; - } else { - if (yych == '"') goto yy393; - if (yych <= '&') goto yy166; - goto yy394; - } - } else { - if (yych <= '_') { - if (yych <= '@') goto yy166; - if (yych <= 'Z') goto yy395; - if (yych <= '^') goto yy166; - goto yy395; - } else { - if (yych <= '`') goto yy166; - if (yych <= 'z') goto yy395; - if (yych <= 0x7F) goto yy166; - goto yy395; - } + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy305: YYDEBUG(305, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(306, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1528 "Zend/zend_language_scanner.l" +#line 1769 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SL_EQUAL); + RETURN_TOKEN(T_FILE); } -#line 4144 "Zend/zend_language_scanner.c" +#line 4066 "Zend/zend_language_scanner.c" +yy306: + YYDEBUG(306, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy307; + if (yych != 'a') goto yy151; yy307: YYDEBUG(307, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'I') goto yy308; + if (yych != 'i') goto yy151; +yy308: YYDEBUG(308, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1484 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_SPACESHIP); -} -#line 4154 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy309; + if (yych != 't') goto yy151; yy309: YYDEBUG(309, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(310, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1468 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_IDENTICAL); -} -#line 4164 "Zend/zend_language_scanner.c" -yy311: + yych = *++YYCURSOR; + if (yych != '_') goto yy151; YYDEBUG(311, *YYCURSOR); ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(312, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1532 "Zend/zend_language_scanner.l" +#line 1753 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SR_EQUAL); + RETURN_TOKEN(T_TRAIT_C); } -#line 4174 "Zend/zend_language_scanner.c" +#line 4100 "Zend/zend_language_scanner.c" yy313: YYDEBUG(313, *YYCURSOR); yych = *++YYCURSOR; - goto yy219; + if (yych == 'A') goto yy314; + if (yych != 'a') goto yy151; yy314: YYDEBUG(314, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy313; - goto yy219; + if (yych == 'S') goto yy315; + if (yych != 's') goto yy151; yy315: YYDEBUG(315, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy397; - if (yych == 't') goto yy397; - goto yy128; + if (yych == 'S') goto yy316; + if (yych != 's') goto yy151; yy316: YYDEBUG(316, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '_') goto yy151; + YYDEBUG(317, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '_') goto yy151; + YYDEBUG(318, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(317, *YYCURSOR); + YYDEBUG(319, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1560 "Zend/zend_language_scanner.l" +#line 1749 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_LOGICAL_AND); + RETURN_TOKEN(T_CLASS_C); } -#line 4202 "Zend/zend_language_scanner.c" -yy318: - YYDEBUG(318, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy398; - if (yych == 'a') goto yy398; - goto yy128; -yy319: - YYDEBUG(319, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '<') goto yy303; - goto yy166; +#line 4134 "Zend/zend_language_scanner.c" yy320: YYDEBUG(320, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy399; - if (yych == 'a') goto yy399; - goto yy128; + if (yych == 'L') goto yy321; + if (yych != 'l') goto yy151; yy321: YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy400; - if (yych == 'l') goto yy400; - goto yy128; + if (yych == 'T') goto yy322; + if (yych != 't') goto yy151; yy322: YYDEBUG(322, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy401; - if (yych == 'e') goto yy401; - goto yy128; -yy323: + if (yych != '_') goto yy151; YYDEBUG(323, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy403; - if (yych == 'c') goto yy403; - goto yy128; + if (yych == 'C') goto yy324; + if (yych != 'c') goto yy151; yy324: YYDEBUG(324, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy404; - if (yych == 's') goto yy404; - goto yy128; + if (yych == 'O') goto yy325; + if (yych != 'o') goto yy151; yy325: YYDEBUG(325, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy405; - if (yych == 'n') goto yy405; - goto yy128; + if (yych == 'M') goto yy326; + if (yych != 'm') goto yy151; yy326: YYDEBUG(326, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy406; - goto yy407; - } else { - if (yych <= 'r') goto yy128; - if (yych <= 's') goto yy406; - if (yych <= 't') goto yy407; - goto yy128; - } + if (yych == 'P') goto yy327; + if (yych != 'p') goto yy151; yy327: YYDEBUG(327, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy408; - if (yych == 'l') goto yy408; - goto yy128; + if (yych == 'I') goto yy328; + if (yych != 'i') goto yy151; yy328: YYDEBUG(328, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy409; - if (yych == 'a') goto yy409; - goto yy128; + if (yych == 'L') goto yy329; + if (yych != 'l') goto yy151; yy329: YYDEBUG(329, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy330; + if (yych != 'e') goto yy151; +yy330: + YYDEBUG(330, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy331; + if (yych != 'r') goto yy151; +yy331: + YYDEBUG(331, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(330, *YYCURSOR); + YYDEBUG(332, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1129 "Zend/zend_language_scanner.l" +#line 1412 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EXIT); + RETURN_TOKEN(T_HALT_COMPILER); } -#line 4287 "Zend/zend_language_scanner.c" -yy331: - YYDEBUG(331, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy410; - if (yych == 'o') goto yy410; - goto yy128; -yy332: - YYDEBUG(332, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy412; - if (yych == 'e') goto yy412; - goto yy128; +#line 4200 "Zend/zend_language_scanner.c" yy333: YYDEBUG(333, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy414; - if (yych == 't') goto yy414; - goto yy128; + if (yych == 'S') goto yy337; + if (yych == 's') goto yy337; + goto yy151; yy334: YYDEBUG(334, *YYCURSOR); yych = *++YYCURSOR; - switch (yych) { - case 'D': - case 'd': goto yy415; - case 'F': - case 'f': goto yy416; - case 'I': - case 'i': goto yy417; - case 'S': - case 's': goto yy418; - case 'W': - case 'w': goto yy419; - default: goto yy128; - } + if (yych == 'E') goto yy335; + if (yych != 'e') goto yy151; yy335: YYDEBUG(335, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy420; - if (yych == 'l') goto yy420; - goto yy128; -yy336: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(336, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy422; - if (yych == 't') goto yy422; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1392 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_USE); +} +#line 4224 "Zend/zend_language_scanner.c" yy337: YYDEBUG(337, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy424; - if (yych == 'e') goto yy424; - goto yy128; + if (yych == 'E') goto yy338; + if (yych != 'e') goto yy151; yy338: YYDEBUG(338, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy425; - if (yych == 'a') goto yy425; - goto yy128; + if (yych == 'T') goto yy339; + if (yych != 't') goto yy151; yy339: - YYDEBUG(339, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy340; - if (yych <= '9') goto yy127; - } else { - if (yych == 'E') goto yy426; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'd') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'e') goto yy426; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + YYDEBUG(339, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy340: YYDEBUG(340, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1198 "Zend/zend_language_scanner.l" +#line 1440 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FOR); + RETURN_TOKEN(T_UNSET); } -#line 4373 "Zend/zend_language_scanner.c" +#line 4247 "Zend/zend_language_scanner.c" yy341: YYDEBUG(341, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy427; - if (yych == 'c') goto yy427; - goto yy128; + ++YYCURSOR; + YYFILL(7); + yych = *YYCURSOR; yy342: YYDEBUG(342, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy428; - if (yych == 'b') goto yy428; - goto yy128; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= ' ') { + if (yych == '\t') goto yy341; + if (yych <= 0x1F) goto yy158; + goto yy341; + } else { + if (yych <= 'A') { + if (yych <= '@') goto yy158; + goto yy346; + } else { + if (yych <= 'B') goto yy344; + if (yych <= 'C') goto yy158; + goto yy349; + } + } + } else { + if (yych <= 'I') { + if (yych == 'F') goto yy350; + if (yych <= 'H') goto yy158; + goto yy351; + } else { + if (yych <= 'O') { + if (yych <= 'N') goto yy158; + goto yy345; + } else { + if (yych <= 'Q') goto yy158; + if (yych <= 'R') goto yy348; + goto yy347; + } + } + } + } else { + if (yych <= 'f') { + if (yych <= 'a') { + if (yych == 'U') goto yy343; + if (yych <= '`') goto yy158; + goto yy346; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy344; + goto yy158; + } else { + if (yych <= 'd') goto yy349; + if (yych <= 'e') goto yy158; + goto yy350; + } + } + } else { + if (yych <= 'q') { + if (yych <= 'i') { + if (yych <= 'h') goto yy158; + goto yy351; + } else { + if (yych == 'o') goto yy345; + goto yy158; + } + } else { + if (yych <= 's') { + if (yych <= 'r') goto yy348; + goto yy347; + } else { + if (yych != 'u') goto yy158; + } + } + } + } yy343: YYDEBUG(343, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy429; - if (yych == 'o') goto yy429; - goto yy128; + if (yych == 'N') goto yy410; + if (yych == 'n') goto yy410; + goto yy158; yy344: YYDEBUG(344, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy431; - if (yych == 'l') goto yy431; - goto yy128; + if (yych <= 'O') { + if (yych == 'I') goto yy397; + if (yych <= 'N') goto yy158; + goto yy398; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy158; + goto yy397; + } else { + if (yych == 'o') goto yy398; + goto yy158; + } + } yy345: YYDEBUG(345, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy432; - if (yych == 'l') goto yy432; - goto yy128; + if (yych == 'B') goto yy389; + if (yych == 'b') goto yy389; + goto yy158; yy346: YYDEBUG(346, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy433; - if (yych == 't') goto yy433; - goto yy128; + if (yych == 'R') goto yy382; + if (yych == 'r') goto yy382; + goto yy158; yy347: YYDEBUG(347, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy434; - if (yych == 'e') goto yy434; - goto yy128; + if (yych == 'T') goto yy374; + if (yych == 't') goto yy374; + goto yy158; yy348: YYDEBUG(348, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy435; - if (yych == 'e') goto yy435; - goto yy128; + if (yych == 'E') goto yy372; + if (yych == 'e') goto yy372; + goto yy158; yy349: YYDEBUG(349, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy436; - if (yych == 't') goto yy436; - goto yy128; + if (yych == 'O') goto yy368; + if (yych == 'o') goto yy368; + goto yy158; yy350: YYDEBUG(350, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy438; - if (yych == 'e') goto yy438; - goto yy128; + if (yych == 'L') goto yy361; + if (yych == 'l') goto yy361; + goto yy158; yy351: YYDEBUG(351, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'N') goto yy352; + if (yych != 'n') goto yy158; +yy352: YYDEBUG(352, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1328 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_NEW); -} -#line 4446 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy353; + if (yych != 't') goto yy158; yy353: YYDEBUG(353, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'V') { - if (yych == 'N') goto yy439; - if (yych <= 'U') goto yy128; - goto yy440; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy128; - goto yy439; - } else { - if (yych == 'v') goto yy440; - goto yy128; - } - } + if (yych == 'E') goto yy354; + if (yych != 'e') goto yy356; yy354: YYDEBUG(354, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy441; - if (yych == 't') goto yy441; - goto yy128; + if (yych == 'G') goto yy359; + if (yych == 'g') goto yy359; + goto yy158; yy355: YYDEBUG(355, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy442; - if (yych == 'l') goto yy442; - goto yy128; + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; yy356: YYDEBUG(356, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy443; - if (yych == 'u') goto yy443; - goto yy128; -yy357: + if (yych <= 0x1F) { + if (yych == '\t') goto yy355; + goto yy158; + } else { + if (yych <= ' ') goto yy355; + if (yych != ')') goto yy158; + } YYDEBUG(357, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy444; - if (yych == 'u') goto yy444; - goto yy128; -yy358: + ++YYCURSOR; YYDEBUG(358, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy445; - if (yych == 't') goto yy445; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1340 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INT_CAST); +} +#line 4423 "Zend/zend_language_scanner.c" yy359: YYDEBUG(359, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy446; - if (yych == 't') goto yy446; - goto yy128; + if (yych == 'E') goto yy360; + if (yych != 'e') goto yy158; yy360: YYDEBUG(360, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy447; - if (yych == 'o') goto yy447; - goto yy128; + if (yych == 'R') goto yy355; + if (yych == 'r') goto yy355; + goto yy158; yy361: YYDEBUG(361, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy448; - if (yych == 'i') goto yy448; - goto yy128; + if (yych == 'O') goto yy362; + if (yych != 'o') goto yy158; yy362: YYDEBUG(362, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy363; + if (yych != 'a') goto yy158; +yy363: YYDEBUG(363, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1154 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_TRY); -} -#line 4523 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy364; + if (yych != 't') goto yy158; yy364: YYDEBUG(364, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy449; - if (yych == 'e') goto yy449; - goto yy128; -yy365: - YYDEBUG(365, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(365, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy364; + goto yy158; + } else { + if (yych <= ' ') goto yy364; + if (yych != ')') goto yy158; } YYDEBUG(366, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1392 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_USE); -} -#line 4542 "Zend/zend_language_scanner.c" -yy367: - YYDEBUG(367, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(368, *YYCURSOR); + YYDEBUG(367, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1336 "Zend/zend_language_scanner.l" +#line 1344 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_VAR); + RETURN_TOKEN(T_DOUBLE_CAST); } -#line 4555 "Zend/zend_language_scanner.c" +#line 4471 "Zend/zend_language_scanner.c" +yy368: + YYDEBUG(368, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy369; + if (yych != 'u') goto yy158; yy369: YYDEBUG(369, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy450; - if (yych == 'l') goto yy450; - goto yy128; + if (yych == 'B') goto yy370; + if (yych != 'b') goto yy158; yy370: YYDEBUG(370, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy371; + if (yych != 'l') goto yy158; +yy371: YYDEBUG(371, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1564 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LOGICAL_XOR); -} -#line 4574 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy364; + if (yych == 'e') goto yy364; + goto yy158; yy372: YYDEBUG(372, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy451; - if (yych == 'l') goto yy451; - goto yy128; + if (yych == 'A') goto yy373; + if (yych != 'a') goto yy158; yy373: YYDEBUG(373, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy452; - if (yych == 'l') goto yy452; - goto yy128; + if (yych == 'L') goto yy364; + if (yych == 'l') goto yy364; + goto yy158; yy374: YYDEBUG(374, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy453; - if (yych == 'i') goto yy453; - goto yy128; + if (yych == 'R') goto yy375; + if (yych != 'r') goto yy158; yy375: YYDEBUG(375, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych == 'I') goto yy454; - if (yych <= 'T') goto yy128; - goto yy455; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy454; - } else { - if (yych == 'u') goto yy455; - goto yy128; - } - } + if (yych == 'I') goto yy376; + if (yych != 'i') goto yy158; yy376: YYDEBUG(376, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy456; - if (yych == 'a') goto yy456; - goto yy128; + if (yych == 'N') goto yy377; + if (yych != 'n') goto yy158; yy377: YYDEBUG(377, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy457; - if (yych == 'i') goto yy457; - goto yy128; + if (yych == 'G') goto yy378; + if (yych != 'g') goto yy158; yy378: YYDEBUG(378, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy458; - if (yych == 'e') goto yy458; - goto yy128; -yy379: + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(379, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy459; - if (yych == 'a') goto yy459; - goto yy128; -yy380: + if (yych <= 0x1F) { + if (yych == '\t') goto yy378; + goto yy158; + } else { + if (yych <= ' ') goto yy378; + if (yych != ')') goto yy158; + } YYDEBUG(380, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy460; - if (yych == 'r') goto yy460; - goto yy128; -yy381: + ++YYCURSOR; YYDEBUG(381, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy461; - if (yych == 'a') goto yy461; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1348 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_STRING_CAST); +} +#line 4545 "Zend/zend_language_scanner.c" yy382: YYDEBUG(382, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy462; - if (yych == 'a') goto yy462; - goto yy166; + if (yych == 'R') goto yy383; + if (yych != 'r') goto yy158; yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy463; - if (yych == 'l') goto yy463; - goto yy166; + if (yych == 'A') goto yy384; + if (yych != 'a') goto yy158; yy384: YYDEBUG(384, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy464; - if (yych == 'b') goto yy464; - goto yy166; + if (yych == 'Y') goto yy385; + if (yych != 'y') goto yy158; yy385: YYDEBUG(385, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy465; - if (yych == 'a') goto yy465; - goto yy166; -yy386: + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(386, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy470; - if (yych == 'e') goto yy470; - goto yy467; -yy387: + if (yych <= 0x1F) { + if (yych == '\t') goto yy385; + goto yy158; + } else { + if (yych <= ' ') goto yy385; + if (yych != ')') goto yy158; + } YYDEBUG(387, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy471; - if (yych == 'e') goto yy471; - goto yy166; -yy388: + ++YYCURSOR; YYDEBUG(388, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy472; - if (yych == 'l') goto yy472; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1352 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ARRAY_CAST); +} +#line 4582 "Zend/zend_language_scanner.c" yy389: YYDEBUG(389, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy474; - if (yych == 'i') goto yy474; - goto yy166; + if (yych == 'J') goto yy390; + if (yych != 'j') goto yy158; yy390: YYDEBUG(390, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy475; - if (yych == 'e') goto yy475; - goto yy166; + if (yych == 'E') goto yy391; + if (yych != 'e') goto yy158; yy391: YYDEBUG(391, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy392; + if (yych != 'c') goto yy158; +yy392: + YYDEBUG(392, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy393; + if (yych != 't') goto yy158; +yy393: + YYDEBUG(393, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(392, *YYCURSOR); - if (yych <= '\f') { - if (yych <= 0x08) goto yy197; - if (yych <= '\n') goto yy391; - goto yy197; + YYDEBUG(394, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy393; + goto yy158; } else { - if (yych <= '\r') goto yy391; - if (yych == ' ') goto yy391; - goto yy197; + if (yych <= ' ') goto yy393; + if (yych != ')') goto yy158; } -yy393: - YYDEBUG(393, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '"') goto yy166; - if (yych <= '/') goto yy477; - if (yych <= '9') goto yy166; - goto yy477; -yy394: - YYDEBUG(394, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\'') goto yy166; - if (yych <= '/') goto yy479; - if (yych <= '9') goto yy166; - goto yy479; -yy395: YYDEBUG(395, *YYCURSOR); ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; YYDEBUG(396, *YYCURSOR); - if (yych <= '@') { - if (yych <= '\f') { - if (yych == '\n') goto yy480; - goto yy166; - } else { - if (yych <= '\r') goto yy482; - if (yych <= '/') goto yy166; - if (yych <= '9') goto yy395; - goto yy166; - } - } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy395; - if (yych <= '^') goto yy166; - goto yy395; - } else { - if (yych <= '`') goto yy166; - if (yych <= 'z') goto yy395; - if (yych <= 0x7F) goto yy166; - goto yy395; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1356 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_OBJECT_CAST); +} +#line 4624 "Zend/zend_language_scanner.c" yy397: YYDEBUG(397, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy483; - if (yych == 'r') goto yy483; - goto yy128; + if (yych == 'N') goto yy407; + if (yych == 'n') goto yy407; + goto yy158; yy398: YYDEBUG(398, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy484; - if (yych == 'y') goto yy484; - goto yy128; + if (yych == 'O') goto yy399; + if (yych != 'o') goto yy158; yy399: YYDEBUG(399, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'K') goto yy486; - if (yych == 'k') goto yy486; - goto yy128; + if (yych == 'L') goto yy400; + if (yych != 'l') goto yy158; yy400: YYDEBUG(400, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy488; - if (yych == 'a') goto yy488; - goto yy128; + if (yych == 'E') goto yy405; + if (yych == 'e') goto yy405; + goto yy402; yy401: YYDEBUG(401, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + YYFILL(1); + yych = *YYCURSOR; +yy402: YYDEBUG(402, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy401; + goto yy158; + } else { + if (yych <= ' ') goto yy401; + if (yych != ')') goto yy158; + } + YYDEBUG(403, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(404, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1238 "Zend/zend_language_scanner.l" +#line 1360 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CASE); + RETURN_TOKEN(T_BOOL_CAST); } -#line 4792 "Zend/zend_language_scanner.c" -yy403: - YYDEBUG(403, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy489; - if (yych == 'h') goto yy489; - goto yy128; -yy404: - YYDEBUG(404, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy491; - if (yych == 's') goto yy491; - goto yy128; +#line 4669 "Zend/zend_language_scanner.c" yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy493; - if (yych == 'e') goto yy493; - goto yy128; + if (yych == 'A') goto yy406; + if (yych != 'a') goto yy158; yy406: YYDEBUG(406, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy495; - if (yych == 't') goto yy495; - goto yy128; + if (yych == 'N') goto yy401; + if (yych == 'n') goto yy401; + goto yy158; yy407: YYDEBUG(407, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy497; - if (yych == 'i') goto yy497; - goto yy128; + if (yych == 'A') goto yy408; + if (yych != 'a') goto yy158; yy408: YYDEBUG(408, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy498; - if (yych == 'a') goto yy498; - goto yy128; + if (yych == 'R') goto yy409; + if (yych != 'r') goto yy158; yy409: YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy499; - if (yych == 'u') goto yy499; - goto yy128; + if (yych == 'Y') goto yy378; + if (yych == 'y') goto yy378; + goto yy158; yy410: YYDEBUG(410, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'S') goto yy411; + if (yych != 's') goto yy158; +yy411: YYDEBUG(411, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1258 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ECHO); -} -#line 4847 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy412; + if (yych != 'e') goto yy158; yy412: YYDEBUG(412, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy413; + if (yych != 't') goto yy158; +yy413: + YYDEBUG(413, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy413; - if (yych <= '9') goto yy127; - } else { - if (yych == 'I') goto yy500; - if (yych <= 'Z') goto yy127; - } + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(414, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy413; + goto yy158; } else { - if (yych <= 'h') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'i') goto yy500; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + if (yych <= ' ') goto yy413; + if (yych != ')') goto yy158; } -yy413: - YYDEBUG(413, *YYCURSOR); + YYDEBUG(415, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(416, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1182 "Zend/zend_language_scanner.l" +#line 1364 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ELSE); + RETURN_TOKEN(T_UNSET_CAST); } -#line 4875 "Zend/zend_language_scanner.c" -yy414: - YYDEBUG(414, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Y') goto yy501; - if (yych == 'y') goto yy501; - goto yy128; -yy415: - YYDEBUG(415, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy503; - if (yych == 'e') goto yy503; - goto yy128; -yy416: - YYDEBUG(416, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy504; - if (yych == 'o') goto yy504; - goto yy128; +#line 4733 "Zend/zend_language_scanner.c" yy417: YYDEBUG(417, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy505; - if (yych == 'f') goto yy505; - goto yy128; + if (yych == 'R') goto yy418; + if (yych != 'r') goto yy151; yy418: YYDEBUG(418, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'W') goto yy507; - if (yych == 'w') goto yy507; - goto yy128; -yy419: - YYDEBUG(419, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy508; - if (yych == 'h') goto yy508; - goto yy128; -yy420: - YYDEBUG(420, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(421, *YYCURSOR); + YYDEBUG(419, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1368 "Zend/zend_language_scanner.l" +#line 1336 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EVAL); + RETURN_TOKEN(T_VAR); } -#line 4924 "Zend/zend_language_scanner.c" +#line 4751 "Zend/zend_language_scanner.c" +yy420: + YYDEBUG(420, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy424; + if (yych == 'm') goto yy424; + goto yy151; +yy421: + YYDEBUG(421, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'W') goto yy422; + if (yych != 'w') goto yy151; yy422: YYDEBUG(422, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(423, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1125 "Zend/zend_language_scanner.l" +#line 1328 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EXIT); + RETURN_TOKEN(T_NEW); } -#line 4937 "Zend/zend_language_scanner.c" +#line 4775 "Zend/zend_language_scanner.c" yy424: YYDEBUG(424, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy509; - if (yych == 'n') goto yy509; - goto yy128; + if (yych == 'E') goto yy425; + if (yych != 'e') goto yy151; yy425: YYDEBUG(425, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy510; - if (yych == 'l') goto yy510; - goto yy128; + if (yych == 'S') goto yy426; + if (yych != 's') goto yy151; yy426: YYDEBUG(426, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy512; - if (yych == 'a') goto yy512; - goto yy128; + if (yych == 'P') goto yy427; + if (yych != 'p') goto yy151; yy427: YYDEBUG(427, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy513; - if (yych == 't') goto yy513; - goto yy128; + if (yych == 'A') goto yy428; + if (yych != 'a') goto yy151; yy428: YYDEBUG(428, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy514; - if (yych == 'a') goto yy514; - goto yy128; + if (yych == 'C') goto yy429; + if (yych != 'c') goto yy151; yy429: YYDEBUG(429, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy430; + if (yych != 'e') goto yy151; +yy430: + YYDEBUG(430, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(430, *YYCURSOR); + YYDEBUG(431, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1254 "Zend/zend_language_scanner.l" +#line 1388 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_GOTO); + RETURN_TOKEN(T_NAMESPACE); } -#line 4980 "Zend/zend_language_scanner.c" -yy431: - YYDEBUG(431, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy515; - if (yych == 'e') goto yy515; - goto yy128; +#line 4818 "Zend/zend_language_scanner.c" yy432: YYDEBUG(432, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy516; - if (yych == 'u') goto yy516; - goto yy128; + ++YYCURSOR; + if ((yych = *YYCURSOR) == '\n') goto yy436; + if (yych == '\r') goto yy437; yy433: YYDEBUG(433, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'E') { - if (yych == 'A') goto yy517; - if (yych <= 'D') goto yy128; - goto yy518; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy517; - } else { - if (yych == 'e') goto yy518; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1960 "Zend/zend_language_scanner.l" + { + BEGIN(INITIAL); + RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */ +} +#line 4832 "Zend/zend_language_scanner.c" yy434: YYDEBUG(434, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy519; - if (yych == 'r') goto yy519; - goto yy128; -yy435: - YYDEBUG(435, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy520; - if (yych == 't') goto yy520; - goto yy128; -yy436: - YYDEBUG(436, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(437, *YYCURSOR); + YYDEBUG(435, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1448 "Zend/zend_language_scanner.l" +#line 1324 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_LIST); + RETURN_TOKEN(T_COALESCE); } -#line 5033 "Zend/zend_language_scanner.c" +#line 4842 "Zend/zend_language_scanner.c" +yy436: + YYDEBUG(436, *YYCURSOR); + yych = *++YYCURSOR; + goto yy433; +yy437: + YYDEBUG(437, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy436; + goto yy433; yy438: YYDEBUG(438, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy522; - if (yych == 's') goto yy522; - goto yy128; -yy439: + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; YYDEBUG(439, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy523; - if (yych == 't') goto yy523; - goto yy128; + if (yych <= 'D') { + if (yych <= '/') goto yy154; + if (yych <= '9') goto yy438; + goto yy154; + } else { + if (yych <= 'E') goto yy157; + if (yych == 'e') goto yy157; + goto yy154; + } yy440: YYDEBUG(440, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy525; - if (yych == 'a') goto yy525; - goto yy128; -yy441: + ++YYCURSOR; YYDEBUG(441, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy526; - if (yych == 'e') goto yy526; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1520 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CONCAT_EQUAL); +} +#line 4877 "Zend/zend_language_scanner.c" yy442: YYDEBUG(442, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy527; - if (yych == 'i') goto yy527; - goto yy128; -yy443: + if (yych != '.') goto yy158; YYDEBUG(443, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy528; - if (yych == 'i') goto yy528; - goto yy128; -yy444: + ++YYCURSOR; YYDEBUG(444, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy529; - if (yych == 'r') goto yy529; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1320 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELLIPSIS); +} +#line 4890 "Zend/zend_language_scanner.c" yy445: YYDEBUG(445, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy530; - if (yych == 'i') goto yy530; - goto yy128; -yy446: + ++YYCURSOR; YYDEBUG(446, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy531; - if (yych == 'c') goto yy531; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1312 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); +} +#line 4900 "Zend/zend_language_scanner.c" yy447: YYDEBUG(447, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'W') goto yy532; - if (yych == 'w') goto yy532; - goto yy128; + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; yy448: YYDEBUG(448, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy534; - if (yych == 't') goto yy534; - goto yy128; + if (yych <= '\f') { + if (yych <= 0x08) goto yy105; + if (yych <= '\n') goto yy447; + goto yy105; + } else { + if (yych <= '\r') goto yy447; + if (yych == ' ') goto yy447; + goto yy105; + } yy449: YYDEBUG(449, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy536; - if (yych == 't') goto yy536; - goto yy128; -yy450: + ++YYCURSOR; YYDEBUG(450, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy538; - if (yych == 'e') goto yy538; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1500 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MINUS_EQUAL); +} +#line 4926 "Zend/zend_language_scanner.c" yy451: YYDEBUG(451, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy540; - if (yych == 'd') goto yy540; - goto yy128; -yy452: + ++YYCURSOR; YYDEBUG(452, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy542; - if (yych == 'a') goto yy542; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1464 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DEC); +} +#line 4936 "Zend/zend_language_scanner.c" yy453: YYDEBUG(453, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy543; - if (yych == 'r') goto yy543; - goto yy128; -yy454: + ++YYCURSOR; YYDEBUG(454, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy544; - if (yych == 'l') goto yy544; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1286 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_PROPERTY); + RETURN_TOKEN(T_OBJECT_OPERATOR); +} +#line 4947 "Zend/zend_language_scanner.c" yy455: YYDEBUG(455, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy545; - if (yych == 'n') goto yy545; - goto yy128; + if (yych <= 'O') { + if (yych == 'I') goto yy462; + if (yych <= 'N') goto yy151; + goto yy463; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy151; + goto yy462; + } else { + if (yych == 'o') goto yy463; + goto yy151; + } + } yy456: YYDEBUG(456, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy546; - if (yych == 'l') goto yy546; - goto yy128; + if (yych == 'B') goto yy457; + if (yych != 'b') goto yy151; yy457: YYDEBUG(457, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy547; - if (yych == 'n') goto yy547; - goto yy128; + if (yych == 'L') goto yy458; + if (yych != 'l') goto yy151; yy458: YYDEBUG(458, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy548; - if (yych == 't') goto yy548; - goto yy128; + if (yych == 'I') goto yy459; + if (yych != 'i') goto yy151; yy459: YYDEBUG(459, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy549; - if (yych == 'm') goto yy549; - goto yy128; + if (yych == 'C') goto yy460; + if (yych != 'c') goto yy151; yy460: YYDEBUG(460, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy550; - if (yych == 'a') goto yy550; - goto yy128; -yy461: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(461, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Y') goto yy551; - if (yych == 'y') goto yy551; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1436 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PUBLIC); +} +#line 4996 "Zend/zend_language_scanner.c" yy462: YYDEBUG(462, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy553; - if (yych == 'r') goto yy553; - goto yy166; + if (yych <= 'V') { + if (yych == 'N') goto yy471; + if (yych <= 'U') goto yy151; + goto yy472; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy151; + goto yy471; + } else { + if (yych == 'v') goto yy472; + goto yy151; + } + } yy463: YYDEBUG(463, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy558; - if (yych == 'e') goto yy558; - goto yy555; + if (yych == 'T') goto yy464; + if (yych != 't') goto yy151; yy464: YYDEBUG(464, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy559; - if (yych == 'l') goto yy559; - goto yy166; + if (yych == 'E') goto yy465; + if (yych != 'e') goto yy151; yy465: YYDEBUG(465, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy472; - if (yych == 't') goto yy472; - goto yy166; + if (yych == 'C') goto yy466; + if (yych != 'c') goto yy151; yy466: YYDEBUG(466, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'T') goto yy467; + if (yych != 't') goto yy151; yy467: YYDEBUG(467, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy466; - goto yy166; - } else { - if (yych <= ' ') goto yy466; - if (yych != ')') goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy468; + if (yych != 'e') goto yy151; +yy468: YYDEBUG(468, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'D') goto yy469; + if (yych != 'd') goto yy151; +yy469: YYDEBUG(469, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(470, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1340 "Zend/zend_language_scanner.l" +#line 1432 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INT_CAST); + RETURN_TOKEN(T_PROTECTED); } -#line 5224 "Zend/zend_language_scanner.c" -yy470: - YYDEBUG(470, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'G') goto yy560; - if (yych == 'g') goto yy560; - goto yy166; +#line 5055 "Zend/zend_language_scanner.c" yy471: YYDEBUG(471, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy561; - if (yych == 'c') goto yy561; - goto yy166; + if (yych == 'T') goto yy477; + if (yych == 't') goto yy477; + goto yy151; yy472: YYDEBUG(472, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy473; + if (yych != 'a') goto yy151; +yy473: YYDEBUG(473, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy472; - goto yy166; - } else { - if (yych <= ' ') goto yy472; - if (yych == ')') goto yy562; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'T') goto yy474; + if (yych != 't') goto yy151; yy474: YYDEBUG(474, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy564; - if (yych == 'n') goto yy564; - goto yy166; + if (yych == 'E') goto yy475; + if (yych != 'e') goto yy151; yy475: YYDEBUG(475, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy565; - if (yych == 't') goto yy565; - goto yy166; -yy476: - YYDEBUG(476, *YYCURSOR); ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(476, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1428 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRIVATE); +} +#line 5089 "Zend/zend_language_scanner.c" yy477: YYDEBUG(477, *YYCURSOR); - if (yych <= 'Z') { - if (yych <= '/') { - if (yych == '"') goto yy567; - goto yy166; - } else { - if (yych <= '9') goto yy476; - if (yych <= '@') goto yy166; - goto yy476; - } - } else { - if (yych <= '`') { - if (yych == '_') goto yy476; - goto yy166; - } else { - if (yych <= 'z') goto yy476; - if (yych <= 0x7F) goto yy166; - goto yy476; - } + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy478: YYDEBUG(478, *YYCURSOR); - ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1262 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRINT); +} +#line 5102 "Zend/zend_language_scanner.c" yy479: YYDEBUG(479, *YYCURSOR); - if (yych <= 'Z') { - if (yych <= '/') { - if (yych == '\'') goto yy567; - goto yy166; - } else { - if (yych <= '9') goto yy478; - if (yych <= '@') goto yy166; - goto yy478; - } - } else { - if (yych <= '`') { - if (yych == '_') goto yy478; - goto yy166; - } else { - if (yych <= 'z') goto yy478; - if (yych <= 0x7F) goto yy166; - goto yy478; - } - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy484; + if (yych == 'o') goto yy484; + goto yy151; yy480: YYDEBUG(480, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'T') goto yy481; + if (yych != 't') goto yy151; yy481: YYDEBUG(481, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2077 "Zend/zend_language_scanner.l" - { - char *s; - int bprefix = (yytext[0] != '<') ? 1 : 0; - zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label)); - - CG(zend_lineno)++; - heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+bprefix+3; - while ((*s == ' ') || (*s == '\t')) { - s++; - heredoc_label->length--; - } - - if (*s == '\'') { - s++; - heredoc_label->length -= 2; - - BEGIN(ST_NOWDOC); - } else { - if (*s == '"') { - s++; - heredoc_label->length -= 2; - } - - BEGIN(ST_HEREDOC); - } - - heredoc_label->label = estrndup(s, heredoc_label->length); - - /* Check for ending label on the next line */ - if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) { - YYCTYPE *end = YYCURSOR + heredoc_label->length; - - if (*end == ';') { - end++; - } - - if (*end == '\n' || *end == '\r') { - BEGIN(ST_END_HEREDOC); - } - } - - zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label); - - RETURN_TOKEN(T_START_HEREDOC); -} -#line 5368 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy482; + if (yych != 'o') goto yy151; yy482: YYDEBUG(482, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy480; - goto yy481; -yy483: - YYDEBUG(483, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy568; - if (yych == 'a') goto yy568; - goto yy128; -yy484: - YYDEBUG(484, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(485, *YYCURSOR); + YYDEBUG(483, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1452 "Zend/zend_language_scanner.l" +#line 1254 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ARRAY); + RETURN_TOKEN(T_GOTO); } -#line 5392 "Zend/zend_language_scanner.c" +#line 5131 "Zend/zend_language_scanner.c" +yy484: + YYDEBUG(484, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy485; + if (yych != 'b') goto yy151; +yy485: + YYDEBUG(485, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy486; + if (yych != 'a') goto yy151; yy486: YYDEBUG(486, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy487; + if (yych != 'l') goto yy151; +yy487: + YYDEBUG(487, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(487, *YYCURSOR); + YYDEBUG(488, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1246 "Zend/zend_language_scanner.l" +#line 1400 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_BREAK); + RETURN_TOKEN(T_GLOBAL); } -#line 5405 "Zend/zend_language_scanner.c" -yy488: - YYDEBUG(488, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy569; - if (yych == 'b') goto yy569; - goto yy128; +#line 5159 "Zend/zend_language_scanner.c" yy489: YYDEBUG(489, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == '<') goto yy497; + goto yy158; +yy490: YYDEBUG(490, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1158 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CATCH); -} -#line 5424 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + goto yy145; yy491: YYDEBUG(491, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + goto yy143; +yy492: YYDEBUG(492, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1266 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CLASS); -} -#line 5437 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy493; + if (yych != 'e') goto yy151; yy493: YYDEBUG(493, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy494; + if (yych != 'a') goto yy151; +yy494: YYDEBUG(494, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1332 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CLONE); -} -#line 5450 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'K') goto yy495; + if (yych != 'k') goto yy151; yy495: YYDEBUG(495, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(496, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1137 "Zend/zend_language_scanner.l" +#line 1246 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CONST); + RETURN_TOKEN(T_BREAK); } -#line 5463 "Zend/zend_language_scanner.c" +#line 5200 "Zend/zend_language_scanner.c" yy497: YYDEBUG(497, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy570; - if (yych == 'n') goto yy570; - goto yy128; + if (yych == '<') goto yy220; + goto yy158; yy498: YYDEBUG(498, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy571; - if (yych == 'r') goto yy571; - goto yy128; + if (yych == 'A') goto yy505; + if (yych == 'a') goto yy505; + goto yy151; yy499: YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy572; - if (yych == 'l') goto yy572; - goto yy128; + if (yych == 'I') goto yy500; + if (yych != 'i') goto yy151; yy500: YYDEBUG(500, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy573; - if (yych == 'f') goto yy573; - goto yy128; + if (yych == 'T') goto yy501; + if (yych != 't') goto yy151; yy501: YYDEBUG(501, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy502; + if (yych != 'c') goto yy151; +yy502: YYDEBUG(502, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1408 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_EMPTY); -} -#line 5500 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'H') goto yy503; + if (yych != 'h') goto yy151; yy503: YYDEBUG(503, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy575; - if (yych == 'c') goto yy575; - goto yy128; -yy504: - YYDEBUG(504, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy576; - if (yych == 'r') goto yy576; - goto yy128; -yy505: - YYDEBUG(505, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(506, *YYCURSOR); + YYDEBUG(504, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1178 "Zend/zend_language_scanner.l" +#line 1230 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDIF); + RETURN_TOKEN(T_SWITCH); } -#line 5525 "Zend/zend_language_scanner.c" +#line 5244 "Zend/zend_language_scanner.c" +yy505: + YYDEBUG(505, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy506; + if (yych != 't') goto yy151; +yy506: + YYDEBUG(506, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy507; + if (yych != 'i') goto yy151; yy507: YYDEBUG(507, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy578; - if (yych == 'i') goto yy578; - goto yy128; + if (yych == 'C') goto yy508; + if (yych != 'c') goto yy151; yy508: YYDEBUG(508, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy579; - if (yych == 'i') goto yy579; - goto yy128; -yy509: - YYDEBUG(509, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy580; - if (yych == 'd') goto yy580; - goto yy128; -yy510: - YYDEBUG(510, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy511; - if (yych <= '9') goto yy127; - } else { - if (yych == 'L') goto yy581; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'k') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'l') goto yy581; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy511: - YYDEBUG(511, *YYCURSOR); + YYDEBUG(509, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1424 "Zend/zend_language_scanner.l" +#line 1416 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FINAL); + RETURN_TOKEN(T_STATIC); } -#line 5571 "Zend/zend_language_scanner.c" +#line 5272 "Zend/zend_language_scanner.c" +yy510: + YYDEBUG(510, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy521; + if (yych == 's') goto yy521; + goto yy151; +yy511: + YYDEBUG(511, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy519; + if (yych == 'd') goto yy519; + goto yy151; yy512: YYDEBUG(512, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy582; - if (yych == 'c') goto yy582; - goto yy128; + if (yych == 'R') goto yy515; + if (yych == 'r') goto yy515; + goto yy151; yy513: YYDEBUG(513, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy583; - if (yych == 'i') goto yy583; - goto yy128; -yy514: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(514, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy584; - if (yych == 'l') goto yy584; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1226 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_AS); +} +#line 5303 "Zend/zend_language_scanner.c" yy515: YYDEBUG(515, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy586; - if (yych == 'm') goto yy586; - goto yy128; + if (yych == 'A') goto yy516; + if (yych != 'a') goto yy151; yy516: YYDEBUG(516, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy587; - if (yych == 'd') goto yy587; - goto yy128; + if (yych == 'Y') goto yy517; + if (yych != 'y') goto yy151; yy517: YYDEBUG(517, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy588; - if (yych == 'n') goto yy588; - goto yy128; -yy518: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(518, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy589; - if (yych == 'a') goto yy589; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1452 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ARRAY); +} +#line 5326 "Zend/zend_language_scanner.c" yy519: YYDEBUG(519, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy590; - if (yych == 'f') goto yy590; - goto yy128; -yy520: - YYDEBUG(520, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(521, *YYCURSOR); + YYDEBUG(520, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1404 "Zend/zend_language_scanner.l" +#line 1560 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ISSET); + RETURN_TOKEN(T_LOGICAL_AND); } -#line 5632 "Zend/zend_language_scanner.c" +#line 5339 "Zend/zend_language_scanner.c" +yy521: + YYDEBUG(521, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy522; + if (yych != 't') goto yy151; yy522: YYDEBUG(522, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy591; - if (yych == 'p') goto yy591; - goto yy128; + if (yych == 'R') goto yy523; + if (yych != 'r') goto yy151; yy523: YYDEBUG(523, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy524; + if (yych != 'a') goto yy151; +yy524: YYDEBUG(524, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1262 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PRINT); -} -#line 5651 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'C') goto yy525; + if (yych != 'c') goto yy151; yy525: YYDEBUG(525, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy592; - if (yych == 't') goto yy592; - goto yy128; + if (yych == 'T') goto yy526; + if (yych != 't') goto yy151; yy526: YYDEBUG(526, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy593; - if (yych == 'c') goto yy593; - goto yy128; -yy527: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(527, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy594; - if (yych == 'c') goto yy594; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1420 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ABSTRACT); +} +#line 5377 "Zend/zend_language_scanner.c" yy528: YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy596; - if (yych == 'r') goto yy596; - goto yy128; + if (yych == 'I') goto yy529; + if (yych != 'i') goto yy151; yy529: YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy597; - if (yych == 'n') goto yy597; - goto yy128; + if (yych == 'L') goto yy530; + if (yych != 'l') goto yy151; yy530: YYDEBUG(530, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy599; - if (yych == 'c') goto yy599; - goto yy128; + if (yych == 'E') goto yy531; + if (yych != 'e') goto yy151; yy531: YYDEBUG(531, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy601; - if (yych == 'h') goto yy601; - goto yy128; -yy532: - YYDEBUG(532, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(533, *YYCURSOR); + YYDEBUG(532, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1166 "Zend/zend_language_scanner.l" +#line 1186 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_THROW); + RETURN_TOKEN(T_WHILE); } -#line 5706 "Zend/zend_language_scanner.c" -yy534: - YYDEBUG(534, *YYCURSOR); +#line 5405 "Zend/zend_language_scanner.c" +yy533: + YYDEBUG(533, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(535, *YYCURSOR); + YYDEBUG(534, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1274 "Zend/zend_language_scanner.l" +#line 1170 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_TRAIT); + RETURN_TOKEN(T_IF); } -#line 5719 "Zend/zend_language_scanner.c" +#line 5418 "Zend/zend_language_scanner.c" +yy535: + YYDEBUG(535, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy577; + if (yych == 'p') goto yy577; + goto yy151; yy536: YYDEBUG(536, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'C') { + if (yych <= 'B') goto yy151; + goto yy544; + } else { + if (yych <= 'R') goto yy151; + if (yych <= 'S') goto yy542; + goto yy543; + } + } else { + if (yych <= 'r') { + if (yych == 'c') goto yy544; + goto yy151; + } else { + if (yych <= 's') goto yy542; + if (yych <= 't') goto yy543; + goto yy151; + } } +yy537: YYDEBUG(537, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1440 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_UNSET); -} -#line 5732 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'S') goto yy538; + if (yych != 's') goto yy151; yy538: YYDEBUG(538, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy539; + if (yych != 'e') goto yy151; +yy539: YYDEBUG(539, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1186 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_WHILE); -} -#line 5745 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy540; + if (yych != 't') goto yy151; yy540: YYDEBUG(540, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy127; - } - if (yych <= '\f') { - if (yych <= 0x08) goto yy541; - if (yych <= '\n') goto yy603; - } else { - if (yych <= '\r') goto yy603; - if (yych == ' ') goto yy603; + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy541: YYDEBUG(541, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1150 "Zend/zend_language_scanner.l" +#line 1404 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_YIELD); + RETURN_TOKEN(T_ISSET); } -#line 5767 "Zend/zend_language_scanner.c" +#line 5474 "Zend/zend_language_scanner.c" yy542: YYDEBUG(542, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy605; - if (yych == 's') goto yy605; - goto yy128; + if (yych == 'T') goto yy563; + if (yych == 't') goto yy563; + goto yy151; yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy606; - goto yy128; + if (yych == 'E') goto yy556; + if (yych == 'e') goto yy556; + goto yy151; yy544: YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy607; - if (yych == 'e') goto yy607; - goto yy128; + if (yych == 'L') goto yy545; + if (yych != 'l') goto yy151; yy545: YYDEBUG(545, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy608; - if (yych == 'c') goto yy608; - goto yy128; + if (yych == 'U') goto yy546; + if (yych != 'u') goto yy151; yy546: YYDEBUG(546, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy609; - if (yych == 't') goto yy609; - goto yy128; + if (yych == 'D') goto yy547; + if (yych != 'd') goto yy151; yy547: YYDEBUG(547, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy610; - if (yych == 'e') goto yy610; - goto yy128; + if (yych == 'E') goto yy548; + if (yych != 'e') goto yy151; yy548: YYDEBUG(548, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy611; - if (yych == 'h') goto yy611; - goto yy128; + ++YYCURSOR; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy150; + } else { + if (yych <= '@') goto yy549; + if (yych <= 'Z') goto yy150; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy550; + } else { + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } + } yy549: YYDEBUG(549, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy612; - if (yych == 'e') goto yy612; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1372 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INCLUDE); +} +#line 5532 "Zend/zend_language_scanner.c" yy550: YYDEBUG(550, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy613; - if (yych == 'i') goto yy613; - goto yy128; + if (yych == 'O') goto yy551; + if (yych != 'o') goto yy151; yy551: YYDEBUG(551, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy552; + if (yych != 'n') goto yy151; +yy552: YYDEBUG(552, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy551; - goto yy166; - } else { - if (yych <= ' ') goto yy551; - if (yych == ')') goto yy614; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy553; + if (yych != 'c') goto yy151; yy553: YYDEBUG(553, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy616; - if (yych == 'y') goto yy616; - goto yy166; + if (yych == 'E') goto yy554; + if (yych != 'e') goto yy151; yy554: YYDEBUG(554, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy555: - YYDEBUG(555, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy554; - goto yy166; - } else { - if (yych <= ' ') goto yy554; - if (yych != ')') goto yy166; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(556, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(557, *YYCURSOR); + YYDEBUG(555, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1360 "Zend/zend_language_scanner.l" +#line 1376 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_BOOL_CAST); + RETURN_TOKEN(T_INCLUDE_ONCE); } -#line 5863 "Zend/zend_language_scanner.c" +#line 5565 "Zend/zend_language_scanner.c" +yy556: + YYDEBUG(556, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy557; + if (yych != 'r') goto yy151; +yy557: + YYDEBUG(557, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy558; + if (yych != 'f') goto yy151; yy558: YYDEBUG(558, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy618; - if (yych == 'a') goto yy618; - goto yy166; + if (yych == 'A') goto yy559; + if (yych != 'a') goto yy151; yy559: YYDEBUG(559, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy472; - if (yych == 'e') goto yy472; - goto yy166; + if (yych == 'C') goto yy560; + if (yych != 'c') goto yy151; yy560: YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy619; - if (yych == 'e') goto yy619; - goto yy166; + if (yych == 'E') goto yy561; + if (yych != 'e') goto yy151; yy561: YYDEBUG(561, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy620; - if (yych == 't') goto yy620; - goto yy166; -yy562: - YYDEBUG(562, *YYCURSOR); ++YYCURSOR; - YYDEBUG(563, *YYCURSOR); + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(562, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1344 "Zend/zend_language_scanner.l" +#line 1270 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DOUBLE_CAST); + RETURN_TOKEN(T_INTERFACE); } -#line 5897 "Zend/zend_language_scanner.c" +#line 5603 "Zend/zend_language_scanner.c" +yy563: + YYDEBUG(563, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'E') { + if (yych == 'A') goto yy564; + if (yych <= 'D') goto yy151; + goto yy565; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy151; + } else { + if (yych == 'e') goto yy565; + goto yy151; + } + } yy564: YYDEBUG(564, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'G') goto yy616; - if (yych == 'g') goto yy616; - goto yy166; + if (yych == 'N') goto yy571; + if (yych == 'n') goto yy571; + goto yy151; yy565: YYDEBUG(565, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy566; + if (yych != 'a') goto yy151; +yy566: YYDEBUG(566, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy565; - goto yy166; - } else { - if (yych <= ' ') goto yy565; - if (yych == ')') goto yy622; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'D') goto yy567; + if (yych != 'd') goto yy151; yy567: YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy480; - if (yych == '\r') goto yy482; - goto yy166; + if (yych == 'O') goto yy568; + if (yych != 'o') goto yy151; yy568: YYDEBUG(568, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy624; - if (yych == 'c') goto yy624; - goto yy128; + if (yych == 'F') goto yy569; + if (yych != 'f') goto yy151; yy569: YYDEBUG(569, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy625; - if (yych == 'l') goto yy625; - goto yy128; -yy570: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(570, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy626; - if (yych == 'u') goto yy626; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1396 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INSTEADOF); +} +#line 5657 "Zend/zend_language_scanner.c" yy571: YYDEBUG(571, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy627; - if (yych == 'e') goto yy627; - goto yy128; + if (yych == 'C') goto yy572; + if (yych != 'c') goto yy151; yy572: YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy629; - if (yych == 't') goto yy629; - goto yy128; + if (yych == 'E') goto yy573; + if (yych != 'e') goto yy151; yy573: YYDEBUG(573, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy574; + if (yych != 'o') goto yy151; +yy574: YYDEBUG(574, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1174 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ELSEIF); -} -#line 5966 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'F') goto yy575; + if (yych != 'f') goto yy151; yy575: YYDEBUG(575, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy631; - if (yych == 'l') goto yy631; - goto yy128; -yy576: - YYDEBUG(576, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy577; - if (yych <= '9') goto yy127; - } else { - if (yych == 'E') goto yy632; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'd') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'e') goto yy632; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } -yy577: - YYDEBUG(577, *YYCURSOR); + YYDEBUG(576, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1202 "Zend/zend_language_scanner.l" +#line 1222 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDFOR); + RETURN_TOKEN(T_INSTANCEOF); } -#line 6000 "Zend/zend_language_scanner.c" +#line 5690 "Zend/zend_language_scanner.c" +yy577: + YYDEBUG(577, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy578; + if (yych != 'l') goto yy151; yy578: YYDEBUG(578, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy633; - if (yych == 't') goto yy633; - goto yy128; + if (yych == 'E') goto yy579; + if (yych != 'e') goto yy151; yy579: YYDEBUG(579, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy634; - if (yych == 'l') goto yy634; - goto yy128; + if (yych == 'M') goto yy580; + if (yych != 'm') goto yy151; yy580: YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy635; - if (yych == 's') goto yy635; - goto yy128; + if (yych == 'E') goto yy581; + if (yych != 'e') goto yy151; yy581: YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy637; - if (yych == 'y') goto yy637; - goto yy128; + if (yych == 'N') goto yy582; + if (yych != 'n') goto yy151; yy582: YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy639; - if (yych == 'h') goto yy639; - goto yy128; + if (yych == 'T') goto yy583; + if (yych != 't') goto yy151; yy583: YYDEBUG(583, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy641; - if (yych == 'o') goto yy641; - goto yy128; + if (yych == 'S') goto yy584; + if (yych != 's') goto yy151; yy584: YYDEBUG(584, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(585, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1400 "Zend/zend_language_scanner.l" +#line 1282 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_GLOBAL); + RETURN_TOKEN(T_IMPLEMENTS); } -#line 6049 "Zend/zend_language_scanner.c" +#line 5738 "Zend/zend_language_scanner.c" yy586: YYDEBUG(586, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy642; - if (yych == 'e') goto yy642; - goto yy128; + if (yych == 'R') goto yy594; + if (yych == 'r') goto yy594; + goto yy151; yy587: YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy643; - if (yych == 'e') goto yy643; - goto yy128; -yy588: + if (yych <= 'Y') { + if (yych == 'A') goto yy590; + if (yych <= 'X') goto yy151; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy151; + goto yy590; + } else { + if (yych != 'y') goto yy151; + } + } YYDEBUG(588, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy645; - if (yych == 'c') goto yy645; - goto yy128; -yy589: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(589, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy646; - if (yych == 'd') goto yy646; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1154 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRY); +} +#line 5770 "Zend/zend_language_scanner.c" yy590: YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy647; - if (yych == 'a') goto yy647; - goto yy128; + if (yych == 'I') goto yy591; + if (yych != 'i') goto yy151; yy591: YYDEBUG(591, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy648; - if (yych == 'a') goto yy648; - goto yy128; + if (yych == 'T') goto yy592; + if (yych != 't') goto yy151; yy592: YYDEBUG(592, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy649; - if (yych == 'e') goto yy649; - goto yy128; -yy593: - YYDEBUG(593, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy651; - if (yych == 't') goto yy651; - goto yy128; -yy594: - YYDEBUG(594, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(595, *YYCURSOR); + YYDEBUG(593, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1436 "Zend/zend_language_scanner.l" +#line 1274 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PUBLIC); + RETURN_TOKEN(T_TRAIT); } -#line 6110 "Zend/zend_language_scanner.c" +#line 5793 "Zend/zend_language_scanner.c" +yy594: + YYDEBUG(594, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy595; + if (yych != 'o') goto yy151; +yy595: + YYDEBUG(595, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'W') goto yy596; + if (yych != 'w') goto yy151; yy596: YYDEBUG(596, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy652; - if (yych == 'e') goto yy652; - goto yy128; -yy597: - YYDEBUG(597, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(598, *YYCURSOR); + YYDEBUG(597, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1141 "Zend/zend_language_scanner.l" +#line 1166 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_RETURN); + RETURN_TOKEN(T_THROW); } -#line 6129 "Zend/zend_language_scanner.c" +#line 5816 "Zend/zend_language_scanner.c" +yy598: + YYDEBUG(598, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy599; + if (yych != 'e') goto yy151; yy599: YYDEBUG(599, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy600; + if (yych != 'l') goto yy151; +yy600: YYDEBUG(600, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1416 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_STATIC); -} -#line 6142 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'D') goto yy601; + if (yych != 'd') goto yy151; yy601: YYDEBUG(601, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy150; + } + if (yych <= '\f') { + if (yych <= 0x08) goto yy602; + if (yych <= '\n') goto yy603; + } else { + if (yych <= '\r') goto yy603; + if (yych == ' ') goto yy603; } +yy602: YYDEBUG(602, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1230 "Zend/zend_language_scanner.l" +#line 1150 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SWITCH); + RETURN_TOKEN(T_YIELD); } -#line 6155 "Zend/zend_language_scanner.c" +#line 5853 "Zend/zend_language_scanner.c" yy603: YYDEBUG(603, *YYCURSOR); ++YYCURSOR; @@ -6160,1065 +5858,1193 @@ int start_line = CG(zend_lineno); YYDEBUG(604, *YYCURSOR); if (yych <= 0x1F) { if (yych <= '\n') { - if (yych <= 0x08) goto yy166; + if (yych <= 0x08) goto yy158; goto yy603; } else { if (yych == '\r') goto yy603; - goto yy166; + goto yy158; } } else { if (yych <= 'F') { if (yych <= ' ') goto yy603; - if (yych <= 'E') goto yy166; - goto yy654; + if (yych <= 'E') goto yy158; } else { - if (yych == 'f') goto yy654; - goto yy166; + if (yych != 'f') goto yy158; } } -yy605: YYDEBUG(605, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy655; - if (yych == 's') goto yy655; - goto yy128; + if (yych == 'R') goto yy606; + if (yych != 'r') goto yy158; yy606: YYDEBUG(606, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy656; - goto yy128; + if (yych == 'O') goto yy607; + if (yych != 'o') goto yy158; yy607: YYDEBUG(607, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy658; - goto yy128; + if (yych == 'M') goto yy608; + if (yych != 'm') goto yy158; yy608: YYDEBUG(608, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy659; - if (yych == 't') goto yy659; - goto yy128; -yy609: + ++YYCURSOR; YYDEBUG(609, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy660; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1145 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_YIELD_FROM); +} +#line 5900 "Zend/zend_language_scanner.c" yy610: YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy661; - goto yy128; -yy611: + if (yych <= 'T') { + if (yych == 'Q') goto yy612; + if (yych <= 'S') goto yy151; + } else { + if (yych <= 'q') { + if (yych <= 'p') goto yy151; + goto yy612; + } else { + if (yych != 't') goto yy151; + } + } YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy662; - if (yych == 'o') goto yy662; - goto yy128; + if (yych == 'U') goto yy624; + if (yych == 'u') goto yy624; + goto yy151; yy612: YYDEBUG(612, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy663; - if (yych == 's') goto yy663; - goto yy128; + if (yych == 'U') goto yy613; + if (yych != 'u') goto yy151; yy613: YYDEBUG(613, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy664; - if (yych == 't') goto yy664; - goto yy128; + if (yych == 'I') goto yy614; + if (yych != 'i') goto yy151; yy614: YYDEBUG(614, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy615; + if (yych != 'r') goto yy151; +yy615: YYDEBUG(615, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1352 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ARRAY_CAST); -} -#line 6239 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy616; + if (yych != 'e') goto yy151; yy616: YYDEBUG(616, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(617, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy616; - goto yy166; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy150; + } else { + if (yych <= '@') goto yy617; + if (yych <= 'Z') goto yy150; + } } else { - if (yych <= ' ') goto yy616; - if (yych == ')') goto yy665; - goto yy166; + if (yych <= '`') { + if (yych <= '_') goto yy618; + } else { + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } } +yy617: + YYDEBUG(617, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1380 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_REQUIRE); +} +#line 5965 "Zend/zend_language_scanner.c" yy618: YYDEBUG(618, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy554; - if (yych == 'n') goto yy554; - goto yy166; + if (yych == 'O') goto yy619; + if (yych != 'o') goto yy151; yy619: YYDEBUG(619, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy466; - if (yych == 'r') goto yy466; - goto yy166; + if (yych == 'N') goto yy620; + if (yych != 'n') goto yy151; yy620: YYDEBUG(620, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'C') goto yy621; + if (yych != 'c') goto yy151; +yy621: YYDEBUG(621, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy620; - goto yy166; - } else { - if (yych <= ' ') goto yy620; - if (yych == ')') goto yy667; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy622; + if (yych != 'e') goto yy151; yy622: YYDEBUG(622, *YYCURSOR); ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(623, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1364 "Zend/zend_language_scanner.l" +#line 1384 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_UNSET_CAST); + RETURN_TOKEN(T_REQUIRE_ONCE); } -#line 6289 "Zend/zend_language_scanner.c" +#line 5998 "Zend/zend_language_scanner.c" yy624: YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy669; - if (yych == 't') goto yy669; - goto yy128; + if (yych == 'R') goto yy625; + if (yych != 'r') goto yy151; yy625: YYDEBUG(625, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy671; - if (yych == 'e') goto yy671; - goto yy128; + if (yych == 'N') goto yy626; + if (yych != 'n') goto yy151; yy626: YYDEBUG(626, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy673; - if (yych == 'e') goto yy673; - goto yy128; -yy627: - YYDEBUG(627, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(628, *YYCURSOR); + YYDEBUG(627, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1214 "Zend/zend_language_scanner.l" +#line 1141 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DECLARE); + RETURN_TOKEN(T_RETURN); } -#line 6320 "Zend/zend_language_scanner.c" +#line 6021 "Zend/zend_language_scanner.c" +yy628: + YYDEBUG(628, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'L') { + if (yych <= 'K') goto yy151; + goto yy651; + } else { + if (yych <= 'R') goto yy151; + if (yych <= 'S') goto yy650; + goto yy649; + } + } else { + if (yych <= 'r') { + if (yych == 'l') goto yy651; + goto yy151; + } else { + if (yych <= 's') goto yy650; + if (yych <= 't') goto yy649; + goto yy151; + } + } yy629: YYDEBUG(629, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'A') goto yy641; + if (yych <= 'N') goto yy151; + goto yy642; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy151; + goto yy641; + } else { + if (yych == 'o') goto yy642; + goto yy151; + } } +yy630: YYDEBUG(630, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1242 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_DEFAULT); -} -#line 6333 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy631; + if (yych != 'n') goto yy151; yy631: YYDEBUG(631, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy675; - if (yych == 'a') goto yy675; - goto yy128; + if (yych <= 'T') { + if (yych <= 'R') goto yy151; + if (yych >= 'T') goto yy633; + } else { + if (yych <= 'r') goto yy151; + if (yych <= 's') goto yy632; + if (yych <= 't') goto yy633; + goto yy151; + } yy632: YYDEBUG(632, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy676; - if (yych == 'a') goto yy676; - goto yy128; + if (yych == 'T') goto yy639; + if (yych == 't') goto yy639; + goto yy151; yy633: YYDEBUG(633, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy677; - if (yych == 'c') goto yy677; - goto yy128; + if (yych == 'I') goto yy634; + if (yych != 'i') goto yy151; yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy678; - if (yych == 'e') goto yy678; - goto yy128; + if (yych == 'N') goto yy635; + if (yych != 'n') goto yy151; yy635: YYDEBUG(635, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'U') goto yy636; + if (yych != 'u') goto yy151; +yy636: YYDEBUG(636, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1278 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_EXTENDS); -} -#line 6370 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy637; + if (yych != 'e') goto yy151; yy637: YYDEBUG(637, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(638, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1162 "Zend/zend_language_scanner.l" +#line 1250 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FINALLY); + RETURN_TOKEN(T_CONTINUE); } -#line 6383 "Zend/zend_language_scanner.c" +#line 6115 "Zend/zend_language_scanner.c" yy639: YYDEBUG(639, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(640, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1206 "Zend/zend_language_scanner.l" +#line 1137 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FOREACH); + RETURN_TOKEN(T_CONST); } -#line 6396 "Zend/zend_language_scanner.c" +#line 6128 "Zend/zend_language_scanner.c" yy641: YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy680; - if (yych == 'n') goto yy680; - goto yy128; + if (yych == 'S') goto yy646; + if (yych == 's') goto yy646; + goto yy151; yy642: YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy682; - if (yych == 'n') goto yy682; - goto yy128; + if (yych == 'N') goto yy643; + if (yych != 'n') goto yy151; yy643: YYDEBUG(643, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '9') { - if (yych >= '0') goto yy127; - } else { - if (yych <= '@') goto yy644; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= '`') { - if (yych <= '_') goto yy683; - } else { - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy644; + if (yych != 'e') goto yy151; yy644: YYDEBUG(644, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(645, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1372 "Zend/zend_language_scanner.l" +#line 1332 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INCLUDE); + RETURN_TOKEN(T_CLONE); } -#line 6434 "Zend/zend_language_scanner.c" -yy645: - YYDEBUG(645, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy684; - if (yych == 'e') goto yy684; - goto yy128; +#line 6157 "Zend/zend_language_scanner.c" yy646: YYDEBUG(646, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy685; - if (yych == 'o') goto yy685; - goto yy128; + if (yych == 'S') goto yy647; + if (yych != 's') goto yy151; yy647: YYDEBUG(647, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy686; - if (yych == 'c') goto yy686; - goto yy128; -yy648: - YYDEBUG(648, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy687; - if (yych == 'c') goto yy687; - goto yy128; -yy649: - YYDEBUG(649, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(650, *YYCURSOR); + YYDEBUG(648, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1428 "Zend/zend_language_scanner.l" +#line 1266 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PRIVATE); + RETURN_TOKEN(T_CLASS); } -#line 6471 "Zend/zend_language_scanner.c" +#line 6175 "Zend/zend_language_scanner.c" +yy649: + YYDEBUG(649, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy660; + if (yych == 'c') goto yy660; + goto yy151; +yy650: + YYDEBUG(650, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy658; + if (yych == 'e') goto yy658; + goto yy151; yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy688; - if (yych == 'e') goto yy688; - goto yy128; + if (yych == 'L') goto yy652; + if (yych != 'l') goto yy151; yy652: YYDEBUG(652, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '9') { - if (yych >= '0') goto yy127; - } else { - if (yych <= '@') goto yy653; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= '`') { - if (yych <= '_') goto yy689; - } else { - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy653; + if (yych != 'a') goto yy151; yy653: YYDEBUG(653, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1380 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_REQUIRE); -} -#line 6503 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'B') goto yy654; + if (yych != 'b') goto yy151; yy654: YYDEBUG(654, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy690; - if (yych == 'r') goto yy690; - goto yy166; + if (yych == 'L') goto yy655; + if (yych != 'l') goto yy151; yy655: YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy691; - goto yy128; + if (yych == 'E') goto yy656; + if (yych != 'e') goto yy151; yy656: YYDEBUG(656, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(657, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1773 "Zend/zend_language_scanner.l" +#line 1456 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DIR); + RETURN_TOKEN(T_CALLABLE); } -#line 6527 "Zend/zend_language_scanner.c" +#line 6225 "Zend/zend_language_scanner.c" yy658: YYDEBUG(658, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy692; - goto yy128; -yy659: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(659, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy694; - if (yych == 'i') goto yy694; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1238 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CASE); +} +#line 6238 "Zend/zend_language_scanner.c" yy660: YYDEBUG(660, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy695; - if (yych == 'c') goto yy695; - goto yy128; + if (yych == 'H') goto yy661; + if (yych != 'h') goto yy151; yy661: YYDEBUG(661, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy696; - goto yy128; -yy662: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(662, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy698; - if (yych == 'd') goto yy698; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1158 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CATCH); +} +#line 6256 "Zend/zend_language_scanner.c" yy663: YYDEBUG(663, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy699; - if (yych == 'p') goto yy699; - goto yy128; + if (yych == 'N') goto yy680; + if (yych == 'n') goto yy680; + goto yy151; yy664: YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy700; - goto yy128; + if (yych == 'R') goto yy673; + if (yych == 'r') goto yy673; + goto yy151; yy665: YYDEBUG(665, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy666; + if (yych != 'n') goto yy151; +yy666: YYDEBUG(666, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1348 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_STRING_CAST); -} -#line 6576 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'C') goto yy667; + if (yych != 'c') goto yy151; yy667: YYDEBUG(667, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'T') goto yy668; + if (yych != 't') goto yy151; +yy668: YYDEBUG(668, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1356 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_OBJECT_CAST); -} -#line 6586 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy669; + if (yych != 'i') goto yy151; yy669: YYDEBUG(669, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy670; + if (yych != 'o') goto yy151; +yy670: YYDEBUG(670, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1420 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ABSTRACT); -} -#line 6599 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy671; + if (yych != 'n') goto yy151; yy671: YYDEBUG(671, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(672, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1456 "Zend/zend_language_scanner.l" +#line 1133 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CALLABLE); + RETURN_TOKEN(T_FUNCTION); } -#line 6612 "Zend/zend_language_scanner.c" +#line 6311 "Zend/zend_language_scanner.c" yy673: YYDEBUG(673, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy674; + if (yych <= '9') goto yy150; + } else { + if (yych == 'E') goto yy675; + if (yych <= 'Z') goto yy150; + } + } else { + if (yych <= 'd') { + if (yych != '`') goto yy150; + } else { + if (yych <= 'e') goto yy675; + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } } +yy674: YYDEBUG(674, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1250 "Zend/zend_language_scanner.l" +#line 1198 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CONTINUE); + RETURN_TOKEN(T_FOR); } -#line 6625 "Zend/zend_language_scanner.c" +#line 6339 "Zend/zend_language_scanner.c" yy675: YYDEBUG(675, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy701; - if (yych == 'r') goto yy701; - goto yy128; + if (yych == 'A') goto yy676; + if (yych != 'a') goto yy151; yy676: YYDEBUG(676, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy702; - if (yych == 'c') goto yy702; - goto yy128; + if (yych == 'C') goto yy677; + if (yych != 'c') goto yy151; yy677: YYDEBUG(677, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy703; - if (yych == 'h') goto yy703; - goto yy128; + if (yych == 'H') goto yy678; + if (yych != 'h') goto yy151; yy678: YYDEBUG(678, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(679, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1190 "Zend/zend_language_scanner.l" +#line 1206 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDWHILE); + RETURN_TOKEN(T_FOREACH); } -#line 6656 "Zend/zend_language_scanner.c" +#line 6367 "Zend/zend_language_scanner.c" yy680: YYDEBUG(680, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy681; + if (yych != 'a') goto yy151; +yy681: YYDEBUG(681, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1133 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FUNCTION); -} -#line 6669 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'L') goto yy682; + if (yych != 'l') goto yy151; yy682: YYDEBUG(682, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy705; - if (yych == 't') goto yy705; - goto yy128; + ++YYCURSOR; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy683; + if (yych <= '9') goto yy150; + } else { + if (yych == 'L') goto yy684; + if (yych <= 'Z') goto yy150; + } + } else { + if (yych <= 'k') { + if (yych != '`') goto yy150; + } else { + if (yych <= 'l') goto yy684; + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } + } yy683: YYDEBUG(683, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy706; - if (yych == 'o') goto yy706; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1424 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FINAL); +} +#line 6405 "Zend/zend_language_scanner.c" yy684: YYDEBUG(684, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy707; - if (yych == 'o') goto yy707; - goto yy128; + if (yych == 'Y') goto yy685; + if (yych != 'y') goto yy151; yy685: YYDEBUG(685, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy708; - if (yych == 'f') goto yy708; - goto yy128; -yy686: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(686, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy710; - if (yych == 'e') goto yy710; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1162 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FINALLY); +} +#line 6423 "Zend/zend_language_scanner.c" yy687: YYDEBUG(687, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy712; - if (yych == 'e') goto yy712; - goto yy128; + if (yych <= 'F') { + if (yych == 'C') goto yy693; + if (yych <= 'E') goto yy151; + goto yy694; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy151; + goto yy693; + } else { + if (yych == 'f') goto yy694; + goto yy151; + } + } yy688: YYDEBUG(688, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy714; - if (yych == 'd') goto yy714; - goto yy128; + if (yych == 'E') goto yy691; + if (yych == 'e') goto yy691; + goto yy151; yy689: YYDEBUG(689, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy716; - if (yych == 'o') goto yy716; - goto yy128; -yy690: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(690, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy717; - if (yych == 'o') goto yy717; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1194 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DO); +} +#line 6458 "Zend/zend_language_scanner.c" yy691: YYDEBUG(691, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy718; - goto yy128; -yy692: - YYDEBUG(692, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(693, *YYCURSOR); + YYDEBUG(692, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1769 "Zend/zend_language_scanner.l" +#line 1129 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FILE); + RETURN_TOKEN(T_EXIT); } -#line 6741 "Zend/zend_language_scanner.c" +#line 6471 "Zend/zend_language_scanner.c" +yy693: + YYDEBUG(693, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy700; + if (yych == 'l') goto yy700; + goto yy151; yy694: YYDEBUG(694, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy720; - if (yych == 'o') goto yy720; - goto yy128; + if (yych == 'A') goto yy695; + if (yych != 'a') goto yy151; yy695: YYDEBUG(695, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy721; - if (yych == 'o') goto yy721; - goto yy128; + if (yych == 'U') goto yy696; + if (yych != 'u') goto yy151; yy696: YYDEBUG(696, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy697; + if (yych != 'l') goto yy151; +yy697: + YYDEBUG(697, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy698; + if (yych != 't') goto yy151; +yy698: + YYDEBUG(698, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(697, *YYCURSOR); + YYDEBUG(699, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1765 "Zend/zend_language_scanner.l" +#line 1242 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_LINE); + RETURN_TOKEN(T_DEFAULT); } -#line 6766 "Zend/zend_language_scanner.c" -yy698: - YYDEBUG(698, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy722; - goto yy128; -yy699: - YYDEBUG(699, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy723; - if (yych == 'a') goto yy723; - goto yy128; +#line 6510 "Zend/zend_language_scanner.c" yy700: YYDEBUG(700, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy724; - goto yy128; + if (yych == 'A') goto yy701; + if (yych != 'a') goto yy151; yy701: YYDEBUG(701, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy726; - if (yych == 'e') goto yy726; - goto yy128; + if (yych == 'R') goto yy702; + if (yych != 'r') goto yy151; yy702: YYDEBUG(702, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy728; - if (yych == 'h') goto yy728; - goto yy128; + if (yych == 'E') goto yy703; + if (yych != 'e') goto yy151; yy703: YYDEBUG(703, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(704, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1234 "Zend/zend_language_scanner.l" +#line 1214 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDSWITCH); + RETURN_TOKEN(T_DECLARE); } -#line 6807 "Zend/zend_language_scanner.c" +#line 6538 "Zend/zend_language_scanner.c" yy705: YYDEBUG(705, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy730; - if (yych == 's') goto yy730; - goto yy128; + if (yych == 'H') goto yy767; + if (yych == 'h') goto yy767; + goto yy151; yy706: YYDEBUG(706, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy732; - if (yych == 'n') goto yy732; - goto yy128; + if (yych == 'S') goto yy761; + if (yych == 's') goto yy761; + goto yy151; yy707: YYDEBUG(707, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy733; - if (yych == 'f') goto yy733; - goto yy128; + if (yych == 'P') goto yy757; + if (yych == 'p') goto yy757; + goto yy151; yy708: YYDEBUG(708, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'D') goto yy723; + if (yych == 'd') goto yy723; + goto yy151; +yy709: YYDEBUG(709, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1396 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INSTEADOF); -} -#line 6838 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'A') goto yy720; + if (yych == 'a') goto yy720; + goto yy151; yy710: YYDEBUG(710, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych == 'I') goto yy711; + if (yych <= 'S') goto yy151; + goto yy712; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy151; + } else { + if (yych == 't') goto yy712; + goto yy151; + } } +yy711: YYDEBUG(711, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1270 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INTERFACE); -} -#line 6851 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy718; + if (yych == 't') goto yy718; + goto yy151; yy712: YYDEBUG(712, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy713; + if (yych != 'e') goto yy151; +yy713: YYDEBUG(713, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1388 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_NAMESPACE); -} -#line 6864 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy714; + if (yych != 'n') goto yy151; yy714: YYDEBUG(714, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy715; + if (yych != 'd') goto yy151; +yy715: + YYDEBUG(715, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy716; + if (yych != 's') goto yy151; +yy716: + YYDEBUG(716, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(715, *YYCURSOR); + YYDEBUG(717, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1432 "Zend/zend_language_scanner.l" +#line 1278 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PROTECTED); + RETURN_TOKEN(T_EXTENDS); } -#line 6877 "Zend/zend_language_scanner.c" -yy716: - YYDEBUG(716, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy735; - if (yych == 'n') goto yy735; - goto yy128; -yy717: - YYDEBUG(717, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'M') goto yy736; - if (yych == 'm') goto yy736; - goto yy166; +#line 6622 "Zend/zend_language_scanner.c" yy718: YYDEBUG(718, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(719, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1749 "Zend/zend_language_scanner.l" +#line 1125 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CLASS_C); + RETURN_TOKEN(T_EXIT); } -#line 6902 "Zend/zend_language_scanner.c" +#line 6635 "Zend/zend_language_scanner.c" yy720: YYDEBUG(720, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy738; - if (yych == 'n') goto yy738; - goto yy128; + if (yych == 'L') goto yy721; + if (yych != 'l') goto yy151; yy721: YYDEBUG(721, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'M') goto yy739; - if (yych == 'm') goto yy739; - goto yy128; -yy722: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(722, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy740; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1368 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EVAL); +} +#line 6653 "Zend/zend_language_scanner.c" yy723: YYDEBUG(723, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy742; - if (yych == 'c') goto yy742; - goto yy128; + YYDEBUG(-1, yych); + switch (yych) { + case 'D': + case 'd': goto yy724; + case 'F': + case 'f': goto yy725; + case 'I': + case 'i': goto yy726; + case 'S': + case 's': goto yy727; + case 'W': + case 'w': goto yy728; + default: goto yy151; + } yy724: YYDEBUG(724, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy750; + if (yych == 'e') goto yy750; + goto yy151; +yy725: YYDEBUG(725, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1753 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_TRAIT_C); -} -#line 6938 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy742; + if (yych == 'o') goto yy742; + goto yy151; yy726: YYDEBUG(726, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'F') goto yy740; + if (yych == 'f') goto yy740; + goto yy151; +yy727: YYDEBUG(727, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1218 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDDECLARE); -} -#line 6951 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'W') goto yy734; + if (yych == 'w') goto yy734; + goto yy151; yy728: YYDEBUG(728, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'H') goto yy729; + if (yych != 'h') goto yy151; +yy729: YYDEBUG(729, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1210 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDFOREACH); -} -#line 6964 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy730; + if (yych != 'i') goto yy151; yy730: YYDEBUG(730, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy731; + if (yych != 'l') goto yy151; +yy731: YYDEBUG(731, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1282 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IMPLEMENTS); -} -#line 6977 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy732; + if (yych != 'e') goto yy151; yy732: YYDEBUG(732, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy743; - if (yych == 'c') goto yy743; - goto yy128; -yy733: - YYDEBUG(733, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(734, *YYCURSOR); + YYDEBUG(733, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1222 "Zend/zend_language_scanner.l" +#line 1190 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INSTANCEOF); + RETURN_TOKEN(T_ENDWHILE); } -#line 6996 "Zend/zend_language_scanner.c" +#line 6727 "Zend/zend_language_scanner.c" +yy734: + YYDEBUG(734, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy735; + if (yych != 'i') goto yy151; yy735: YYDEBUG(735, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy744; - if (yych == 'c') goto yy744; - goto yy128; + if (yych == 'T') goto yy736; + if (yych != 't') goto yy151; yy736: YYDEBUG(736, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'C') goto yy737; + if (yych != 'c') goto yy151; +yy737: YYDEBUG(737, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1145 "Zend/zend_language_scanner.l" - { - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_YIELD_FROM); -} -#line 7013 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'H') goto yy738; + if (yych != 'h') goto yy151; yy738: YYDEBUG(738, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy745; - goto yy128; -yy739: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(739, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy746; - if (yych == 'p') goto yy746; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1234 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDSWITCH); +} +#line 6760 "Zend/zend_language_scanner.c" yy740: YYDEBUG(740, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(741, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1761 "Zend/zend_language_scanner.l" +#line 1178 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_METHOD_C); + RETURN_TOKEN(T_ENDIF); } -#line 7037 "Zend/zend_language_scanner.c" +#line 6773 "Zend/zend_language_scanner.c" yy742: YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy747; - if (yych == 'e') goto yy747; - goto yy128; + if (yych == 'R') goto yy743; + if (yych != 'r') goto yy151; yy743: YYDEBUG(743, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy748; - if (yych == 'e') goto yy748; - goto yy128; + ++YYCURSOR; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy744; + if (yych <= '9') goto yy150; + } else { + if (yych == 'E') goto yy745; + if (yych <= 'Z') goto yy150; + } + } else { + if (yych <= 'd') { + if (yych != '`') goto yy150; + } else { + if (yych <= 'e') goto yy745; + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } + } yy744: YYDEBUG(744, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy750; - if (yych == 'e') goto yy750; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1202 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDFOR); +} +#line 6806 "Zend/zend_language_scanner.c" yy745: YYDEBUG(745, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy752; - goto yy128; + if (yych == 'A') goto yy746; + if (yych != 'a') goto yy151; yy746: YYDEBUG(746, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy754; - if (yych == 'i') goto yy754; - goto yy128; + if (yych == 'C') goto yy747; + if (yych != 'c') goto yy151; yy747: YYDEBUG(747, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy755; - goto yy128; + if (yych == 'H') goto yy748; + if (yych != 'h') goto yy151; yy748: YYDEBUG(748, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } YYDEBUG(749, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1376 "Zend/zend_language_scanner.l" +#line 1210 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INCLUDE_ONCE); + RETURN_TOKEN(T_ENDFOREACH); } -#line 7084 "Zend/zend_language_scanner.c" +#line 6834 "Zend/zend_language_scanner.c" yy750: YYDEBUG(750, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy751; + if (yych != 'c') goto yy151; +yy751: YYDEBUG(751, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1384 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_REQUIRE_ONCE); -} -#line 7097 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'L') goto yy752; + if (yych != 'l') goto yy151; yy752: YYDEBUG(752, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy753; + if (yych != 'a') goto yy151; +yy753: YYDEBUG(753, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1757 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FUNC_C); -} -#line 7110 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'R') goto yy754; + if (yych != 'r') goto yy151; yy754: YYDEBUG(754, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy756; - if (yych == 'l') goto yy756; - goto yy128; + if (yych == 'E') goto yy755; + if (yych != 'e') goto yy151; yy755: YYDEBUG(755, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy757; - goto yy128; -yy756: + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } YYDEBUG(756, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy759; - if (yych == 'e') goto yy759; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1218 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDDECLARE); +} +#line 6872 "Zend/zend_language_scanner.c" yy757: YYDEBUG(757, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy758; + if (yych != 't') goto yy151; +yy758: + YYDEBUG(758, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy759; + if (yych != 'y') goto yy151; +yy759: + YYDEBUG(759, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; } - YYDEBUG(758, *YYCURSOR); + YYDEBUG(760, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1777 "Zend/zend_language_scanner.l" +#line 1408 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_NS_C); + RETURN_TOKEN(T_EMPTY); } -#line 7140 "Zend/zend_language_scanner.c" -yy759: - YYDEBUG(759, *YYCURSOR); +#line 6895 "Zend/zend_language_scanner.c" +yy761: + YYDEBUG(761, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy760; - if (yych != 'r') goto yy128; -yy760: - YYDEBUG(760, *YYCURSOR); + if (yych == 'E') goto yy762; + if (yych != 'e') goto yy151; +yy762: + YYDEBUG(762, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if ((yych = *YYCURSOR) <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy763; + if (yych <= '9') goto yy150; + } else { + if (yych == 'I') goto yy764; + if (yych <= 'Z') goto yy150; + } + } else { + if (yych <= 'h') { + if (yych != '`') goto yy150; + } else { + if (yych <= 'i') goto yy764; + if (yych <= 'z') goto yy150; + if (yych >= 0x80) goto yy150; + } } - YYDEBUG(761, *YYCURSOR); +yy763: + YYDEBUG(763, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1412 "Zend/zend_language_scanner.l" +#line 1182 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_HALT_COMPILER); + RETURN_TOKEN(T_ELSE); +} +#line 6928 "Zend/zend_language_scanner.c" +yy764: + YYDEBUG(764, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy765; + if (yych != 'f') goto yy151; +yy765: + YYDEBUG(765, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(766, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1174 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELSEIF); +} +#line 6946 "Zend/zend_language_scanner.c" +yy767: + YYDEBUG(767, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy768; + if (yych != 'o') goto yy151; +yy768: + YYDEBUG(768, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy150; + } + YYDEBUG(769, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1258 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ECHO); } -#line 7158 "Zend/zend_language_scanner.c" +#line 6964 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: { static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 64, 0, 0, 64, 0, 0, + 0, 128, 128, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, + 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 0, 0, 0, 0, 64, + 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 0, 0, 0, 0, 0, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(762, *YYCURSOR); + YYDEBUG(770, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yybm[0+yych] & 64) { - goto yy766; - } - if (yych <= '^') { - if (yych <= '-') { - if (yych >= '-') goto yy769; + if (yych <= '-') { + if (yych <= '\r') { + if (yych <= 0x08) goto yy778; + if (yych <= '\n') goto yy772; + if (yych <= '\f') goto yy778; } else { - if (yych <= '@') goto yy764; - if (yych <= 'Z') goto yy770; + if (yych == ' ') goto yy772; + if (yych <= ',') goto yy778; + goto yy774; } } else { - if (yych <= '`') { - if (yych <= '_') goto yy770; + if (yych <= '_') { + if (yych <= '@') goto yy778; + if (yych <= 'Z') goto yy776; + if (yych <= '^') goto yy778; + goto yy776; } else { - if (yych <= 'z') goto yy770; - if (yych >= 0x80) goto yy770; + if (yych <= '`') goto yy778; + if (yych <= 'z') goto yy776; + if (yych <= 0x7F) goto yy778; + goto yy776; } } -yy764: - YYDEBUG(764, *YYCURSOR); +yy772: + YYDEBUG(772, *YYCURSOR); ++YYCURSOR; -yy765: - YYDEBUG(765, *YYCURSOR); + yych = *YYCURSOR; + goto yy784; +yy773: + YYDEBUG(773, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1291 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_WHITESPACE); +} +#line 7042 "Zend/zend_language_scanner.c" +yy774: + YYDEBUG(774, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '>') goto yy781; +yy775: + YYDEBUG(775, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1306 "Zend/zend_language_scanner.l" { @@ -7226,57 +7052,58 @@ int start_line = CG(zend_lineno); yy_pop_state(); goto restart; } -#line 7230 "Zend/zend_language_scanner.c" -yy766: - YYDEBUG(766, *YYCURSOR); +#line 7056 "Zend/zend_language_scanner.c" +yy776: + YYDEBUG(776, *YYCURSOR); ++YYCURSOR; - YYFILL(1); yych = *YYCURSOR; - YYDEBUG(767, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy766; - } - YYDEBUG(768, *YYCURSOR); + goto yy780; +yy777: + YYDEBUG(777, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1291 "Zend/zend_language_scanner.l" +#line 1300 "Zend/zend_language_scanner.l" { - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_WHITESPACE); + yy_pop_state(); + zend_copy_value(zendlval, yytext, yyleng); + RETURN_TOKEN(T_STRING); } -#line 7247 "Zend/zend_language_scanner.c" -yy769: - YYDEBUG(769, *YYCURSOR); +#line 7071 "Zend/zend_language_scanner.c" +yy778: + YYDEBUG(778, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '>') goto yy773; - goto yy765; -yy770: - YYDEBUG(770, *YYCURSOR); + goto yy775; +yy779: + YYDEBUG(779, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(771, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy770; +yy780: + YYDEBUG(780, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy779; } - YYDEBUG(772, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1300 "Zend/zend_language_scanner.l" - { - yy_pop_state(); - zend_copy_value(zendlval, yytext, yyleng); - RETURN_TOKEN(T_STRING); -} -#line 7270 "Zend/zend_language_scanner.c" -yy773: - YYDEBUG(773, *YYCURSOR); + goto yy777; +yy781: + YYDEBUG(781, *YYCURSOR); ++YYCURSOR; - YYDEBUG(774, *YYCURSOR); + YYDEBUG(782, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1296 "Zend/zend_language_scanner.l" { RETURN_TOKEN(T_OBJECT_OPERATOR); } -#line 7280 "Zend/zend_language_scanner.c" +#line 7096 "Zend/zend_language_scanner.c" +yy783: + YYDEBUG(783, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy784: + YYDEBUG(784, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy783; + } + goto yy773; } /* *********************************** */ yyc_ST_LOOKING_FOR_VARNAME: @@ -7315,77 +7142,75 @@ int start_line = CG(zend_lineno); 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(775, *YYCURSOR); + YYDEBUG(785, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '_') { - if (yych <= '@') goto yy777; - if (yych <= 'Z') goto yy779; - if (yych >= '_') goto yy779; + if (yych <= '@') goto yy789; + if (yych <= 'Z') goto yy787; + if (yych <= '^') goto yy789; } else { - if (yych <= '`') goto yy777; - if (yych <= 'z') goto yy779; - if (yych >= 0x80) goto yy779; + if (yych <= '`') goto yy789; + if (yych <= 'z') goto yy787; + if (yych <= 0x7F) goto yy789; } -yy777: - YYDEBUG(777, *YYCURSOR); - ++YYCURSOR; -yy778: - YYDEBUG(778, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1611 "Zend/zend_language_scanner.l" - { - yyless(0); - yy_pop_state(); - yy_push_state(ST_IN_SCRIPTING); - goto restart; -} -#line 7344 "Zend/zend_language_scanner.c" -yy779: - YYDEBUG(779, *YYCURSOR); +yy787: + YYDEBUG(787, *YYCURSOR); + yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy778; - if (yych <= '9') goto yy781; - goto yy778; + if (yych <= '/') goto yy788; + if (yych <= '9') goto yy791; } else { - if (yych <= '[') goto yy781; - if (yych <= '^') goto yy778; - goto yy781; + if (yych <= '[') goto yy791; + if (yych >= '_') goto yy791; } } else { if (yych <= '|') { - if (yych <= '`') goto yy778; - if (yych <= 'z') goto yy781; - goto yy778; + if (yych <= '`') goto yy788; + if (yych <= 'z') goto yy791; } else { - if (yych <= '}') goto yy781; - if (yych <= 0x7F) goto yy778; - goto yy781; + if (yych <= '}') goto yy791; + if (yych >= 0x80) goto yy791; } } -yy780: - YYDEBUG(780, *YYCURSOR); +yy788: + YYDEBUG(788, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1611 "Zend/zend_language_scanner.l" + { + yyless(0); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + goto restart; +} +#line 7189 "Zend/zend_language_scanner.c" +yy789: + YYDEBUG(789, *YYCURSOR); + yych = *++YYCURSOR; + goto yy788; +yy790: + YYDEBUG(790, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy781: - YYDEBUG(781, *YYCURSOR); +yy791: + YYDEBUG(791, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy780; + goto yy790; } - if (yych <= '@') goto yy782; - if (yych <= '[') goto yy783; - if (yych == '}') goto yy783; -yy782: - YYDEBUG(782, *YYCURSOR); + if (yych <= '@') goto yy792; + if (yych <= '[') goto yy793; + if (yych == '}') goto yy793; +yy792: + YYDEBUG(792, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy778; -yy783: - YYDEBUG(783, *YYCURSOR); + goto yy788; +yy793: + YYDEBUG(793, *YYCURSOR); ++YYCURSOR; - YYDEBUG(784, *YYCURSOR); + YYDEBUG(794, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1602 "Zend/zend_language_scanner.l" { @@ -7395,16 +7220,16 @@ int start_line = CG(zend_lineno); yy_push_state(ST_IN_SCRIPTING); RETURN_TOKEN(T_STRING_VARNAME); } -#line 7399 "Zend/zend_language_scanner.c" +#line 7224 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: - YYDEBUG(785, *YYCURSOR); + YYDEBUG(795, *YYCURSOR); YYFILL(1); yych = *YYCURSOR; - YYDEBUG(787, *YYCURSOR); + YYDEBUG(797, *YYCURSOR); ++YYCURSOR; - YYDEBUG(788, *YYCURSOR); + YYDEBUG(798, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 2330 "Zend/zend_language_scanner.l" { @@ -7462,7 +7287,7 @@ int start_line = CG(zend_lineno); HANDLE_NEWLINES(yytext, yyleng - newline); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 7466 "Zend/zend_language_scanner.c" +#line 7291 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7473,152 +7298,99 @@ int start_line = CG(zend_lineno); 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 240, 176, 176, 176, 176, 176, 176, - 176, 176, 0, 0, 0, 0, 0, 0, - 0, 160, 160, 160, 160, 160, 160, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 0, 0, 0, 0, 32, - 0, 160, 160, 160, 160, 160, 160, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 0, 0, 0, 0, 0, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, + 240, 240, 112, 112, 112, 112, 112, 112, + 112, 112, 0, 0, 0, 0, 0, 0, + 0, 80, 80, 80, 80, 80, 80, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 16, + 0, 80, 80, 80, 80, 80, 80, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(789, *YYCURSOR); + YYDEBUG(799, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '0') { if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy791; - if (yych <= '\n') goto yy793; + if (yych <= 0x08) goto yy813; + if (yych <= '\n') goto yy809; + goto yy813; } else { - if (yych <= '\r') goto yy793; - if (yych >= ' ') goto yy793; + if (yych <= '\r') goto yy809; + if (yych <= 0x1F) goto yy813; + goto yy809; } } else { if (yych <= '$') { - if (yych <= '"') goto yy795; - if (yych <= '#') goto yy793; - goto yy797; + if (yych <= '"') goto yy808; + if (yych <= '#') goto yy809; + goto yy804; } else { - if (yych == '\'') goto yy793; - if (yych <= '/') goto yy795; - goto yy798; + if (yych == '\'') goto yy809; + if (yych <= '/') goto yy808; } } } else { if (yych <= ']') { if (yych <= 'Z') { - if (yych <= '9') goto yy800; - if (yych <= '@') goto yy795; - goto yy802; + if (yych <= '9') goto yy803; + if (yych <= '@') goto yy808; + goto yy811; } else { - if (yych <= '[') goto yy795; - if (yych <= '\\') goto yy793; - goto yy805; + if (yych <= '[') goto yy808; + if (yych <= '\\') goto yy809; + goto yy806; } } else { if (yych <= '`') { - if (yych == '_') goto yy802; - goto yy795; + if (yych == '_') goto yy811; + goto yy808; } else { - if (yych <= 'z') goto yy802; - if (yych <= '~') goto yy795; - if (yych >= 0x80) goto yy802; + if (yych <= 'z') goto yy811; + if (yych <= '~') goto yy808; + if (yych <= 0x7F) goto yy813; + goto yy811; } } } -yy791: - YYDEBUG(791, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(792, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2387 "Zend/zend_language_scanner.l" - { - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - - zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); - goto restart; -} -#line 7563 "Zend/zend_language_scanner.c" -yy793: - YYDEBUG(793, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(794, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1884 "Zend/zend_language_scanner.l" - { - /* Invalid rule to return a more explicit parse error with proper line number */ - yyless(0); - yy_pop_state(); - ZVAL_NULL(zendlval); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); -} -#line 7577 "Zend/zend_language_scanner.c" -yy795: - YYDEBUG(795, *YYCURSOR); - ++YYCURSOR; -yy796: - YYDEBUG(796, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1879 "Zend/zend_language_scanner.l" - { - /* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */ - RETURN_TOKEN(yytext[0]); -} -#line 7589 "Zend/zend_language_scanner.c" -yy797: - YYDEBUG(797, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy796; - if (yych <= 'Z') goto yy807; - if (yych <= '^') goto yy796; - goto yy807; - } else { - if (yych <= '`') goto yy796; - if (yych <= 'z') goto yy807; - if (yych <= 0x7F) goto yy796; - goto yy807; - } -yy798: - YYDEBUG(798, *YYCURSOR); + YYDEBUG(801, *YYCURSOR); + yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '9') { - if (yych >= '0') goto yy810; + if (yych >= '0') goto yy825; } else { - if (yych == 'B') goto yy813; + if (yych == 'B') goto yy822; } } else { if (yych <= 'b') { - if (yych <= 'X') goto yy815; - if (yych >= 'b') goto yy813; + if (yych <= 'X') goto yy824; + if (yych >= 'b') goto yy822; } else { - if (yych == 'x') goto yy815; + if (yych == 'x') goto yy824; } } -yy799: - YYDEBUG(799, *YYCURSOR); +yy802: + YYDEBUG(802, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1719 "Zend/zend_language_scanner.l" { /* Offset could be treated as a long */ @@ -7636,129 +7408,196 @@ int start_line = CG(zend_lineno); } RETURN_TOKEN(T_NUM_STRING); } -#line 7640 "Zend/zend_language_scanner.c" -yy800: - YYDEBUG(800, *YYCURSOR); +#line 7412 "Zend/zend_language_scanner.c" +yy803: + YYDEBUG(803, *YYCURSOR); + yych = *++YYCURSOR; + goto yy821; +yy804: + YYDEBUG(804, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(801, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy800; + if ((yych = *YYCURSOR) <= '_') { + if (yych <= '@') goto yy805; + if (yych <= 'Z') goto yy817; + if (yych >= '_') goto yy817; + } else { + if (yych <= '`') goto yy805; + if (yych <= 'z') goto yy817; + if (yych >= 0x80) goto yy817; } - goto yy799; -yy802: - YYDEBUG(802, *YYCURSOR); +yy805: + YYDEBUG(805, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1879 "Zend/zend_language_scanner.l" + { + /* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */ + RETURN_TOKEN(yytext[0]); +} +#line 7437 "Zend/zend_language_scanner.c" +yy806: + YYDEBUG(806, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(807, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1874 "Zend/zend_language_scanner.l" + { + yy_pop_state(); + RETURN_TOKEN(']'); +} +#line 7448 "Zend/zend_language_scanner.c" +yy808: + YYDEBUG(808, *YYCURSOR); + yych = *++YYCURSOR; + goto yy805; +yy809: + YYDEBUG(809, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(810, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1884 "Zend/zend_language_scanner.l" + { + /* Invalid rule to return a more explicit parse error with proper line number */ + yyless(0); + yy_pop_state(); + ZVAL_NULL(zendlval); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); +} +#line 7466 "Zend/zend_language_scanner.c" +yy811: + YYDEBUG(811, *YYCURSOR); ++YYCURSOR; - YYFILL(1); yych = *YYCURSOR; - YYDEBUG(803, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy802; - } - YYDEBUG(804, *YYCURSOR); + goto yy816; +yy812: + YYDEBUG(812, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1892 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); RETURN_TOKEN(T_STRING); } -#line 7667 "Zend/zend_language_scanner.c" -yy805: - YYDEBUG(805, *YYCURSOR); +#line 7480 "Zend/zend_language_scanner.c" +yy813: + YYDEBUG(813, *YYCURSOR); ++YYCURSOR; - YYDEBUG(806, *YYCURSOR); + YYDEBUG(814, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1874 "Zend/zend_language_scanner.l" +#line 2387 "Zend/zend_language_scanner.l" { - yy_pop_state(); - RETURN_TOKEN(']'); + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); + goto restart; } -#line 7678 "Zend/zend_language_scanner.c" -yy807: - YYDEBUG(807, *YYCURSOR); +#line 7495 "Zend/zend_language_scanner.c" +yy815: + YYDEBUG(815, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(808, *YYCURSOR); +yy816: + YYDEBUG(816, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy815; + } + goto yy812; +yy817: + YYDEBUG(817, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(818, *YYCURSOR); if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy807; + if (yych >= '0') goto yy817; } else { - if (yych <= '@') goto yy809; - if (yych <= 'Z') goto yy807; + if (yych <= '@') goto yy819; + if (yych <= 'Z') goto yy817; } } else { if (yych <= '`') { - if (yych <= '_') goto yy807; + if (yych <= '_') goto yy817; } else { - if (yych <= 'z') goto yy807; - if (yych >= 0x80) goto yy807; + if (yych <= 'z') goto yy817; + if (yych >= 0x80) goto yy817; } } -yy809: - YYDEBUG(809, *YYCURSOR); +yy819: + YYDEBUG(819, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1869 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 7708 "Zend/zend_language_scanner.c" -yy810: - YYDEBUG(810, *YYCURSOR); +#line 7536 "Zend/zend_language_scanner.c" +yy820: + YYDEBUG(820, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(811, *YYCURSOR); - if (yych <= '/') goto yy812; - if (yych <= '9') goto yy810; -yy812: - YYDEBUG(812, *YYCURSOR); +yy821: + YYDEBUG(821, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy820; + } + goto yy802; +yy822: + YYDEBUG(822, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 128) { + goto yy830; + } +yy823: + YYDEBUG(823, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy802; +yy824: + YYDEBUG(824, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 64) { + goto yy828; + } + goto yy823; +yy825: + YYDEBUG(825, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(826, *YYCURSOR); + if (yych <= '/') goto yy827; + if (yych <= '9') goto yy825; +yy827: + YYDEBUG(827, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1735 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng); RETURN_TOKEN(T_NUM_STRING); } -#line 7725 "Zend/zend_language_scanner.c" -yy813: - YYDEBUG(813, *YYCURSOR); - yych = *++YYCURSOR; - if (yybm[0+yych] & 64) { - goto yy816; - } -yy814: - YYDEBUG(814, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy799; -yy815: - YYDEBUG(815, *YYCURSOR); - yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy818; - } - goto yy814; -yy816: - YYDEBUG(816, *YYCURSOR); +#line 7581 "Zend/zend_language_scanner.c" +yy828: + YYDEBUG(828, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(817, *YYCURSOR); + YYDEBUG(829, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy816; + goto yy828; } - goto yy812; -yy818: - YYDEBUG(818, *YYCURSOR); + goto yy827; +yy830: + YYDEBUG(830, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(819, *YYCURSOR); + YYDEBUG(831, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy818; + goto yy830; } - goto yy812; + goto yy827; } } #line 2396 "Zend/zend_language_scanner.l" diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h index c89b1bba457d0..ceb3688c02ec5 100644 --- a/Zend/zend_language_scanner_defs.h +++ b/Zend/zend_language_scanner_defs.h @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 0.14.3 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE { diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index cbc5804c99c62..f8dbe80ec363b 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -360,7 +360,11 @@ ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) FREE_OP1(); FREE_OP2(); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -378,7 +382,11 @@ ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) FREE_OP1(); FREE_OP2(); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -430,8 +438,12 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -444,7 +456,11 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -498,8 +514,12 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -512,7 +532,11 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -548,8 +572,16 @@ ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -562,7 +594,17 @@ ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } + FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -598,8 +640,16 @@ ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -612,7 +662,17 @@ ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } + FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -2582,7 +2642,7 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR) USE_OPLINE zend_free_op free_op1; zval *val; - int ret; + int ret; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); @@ -2604,7 +2664,9 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR) SAVE_OPLINE(); ret = i_zend_is_true(val); FREE_OP1(); - if (ret) { + if (UNEXPECTED(((opline - 1)->extended_value & ZEND_COMPARE_CONTINUE)) && (ret || Z_LVAL_P(val) == 0)) { + opline++; + } else if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { @@ -2619,7 +2681,6 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR) USE_OPLINE zend_free_op free_op1; zval *val; - int ret; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); @@ -2639,15 +2700,14 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR) } SAVE_OPLINE(); - ret = i_zend_is_true(val); - FREE_OP1(); - if (ret) { + if (i_zend_is_true(val)) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } + FREE_OP1(); ZEND_VM_JMP(opline); } @@ -4655,7 +4715,11 @@ ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY) if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE))) { + ZVAL_COPY(EX_VAR(opline->result.var), val); + } else { + ZVAL_FALSE(EX_VAR(opline->result.var)); + } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index fac8f6e475e4a..236b5322c1c5a 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2787,7 +2787,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEN USE_OPLINE zval *val; - int ret; + int ret; val = EX_CONSTANT(opline->op1); @@ -2809,7 +2809,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEN SAVE_OPLINE(); ret = i_zend_is_true(val); - if (ret) { + if (UNEXPECTED(((opline - 1)->extended_value & ZEND_COMPARE_CONTINUE)) && (ret || Z_LVAL_P(val) == 0)) { + opline++; + } else if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { @@ -2824,7 +2826,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZE USE_OPLINE zval *val; - int ret; val = EX_CONSTANT(opline->op1); @@ -2844,15 +2845,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZE } SAVE_OPLINE(); - ret = i_zend_is_true(val); - - if (ret) { + if (i_zend_is_true(val)) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } + ZEND_VM_JMP(opline); } @@ -3175,7 +3175,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_O if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE))) { + ZVAL_COPY(EX_VAR(opline->result.var), val); + } else { + ZVAL_FALSE(EX_VAR(opline->result.var)); + } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); @@ -4497,7 +4501,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_ ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -4515,7 +4523,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CO ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -4567,8 +4579,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HAND } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -4581,7 +4597,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HAND } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -4635,8 +4655,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_ } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -4649,7 +4673,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_ } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -4685,8 +4713,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -4699,7 +4735,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -4735,8 +4780,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -4749,7 +4802,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -6467,7 +6529,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HA zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -6485,7 +6551,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TM zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -6639,7 +6709,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HA zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -6657,7 +6731,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VA zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -8344,7 +8422,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HAN ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -8362,7 +8444,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -8414,8 +8500,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -8428,7 +8518,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -8482,8 +8576,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HAN } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -8496,7 +8594,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HAN } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -8532,8 +8634,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDL } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -8546,7 +8656,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDL } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -8582,8 +8701,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -8596,7 +8723,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -10403,8 +10539,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HAN } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -10417,7 +10557,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HAN } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -10471,8 +10615,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -10485,7 +10633,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -10521,8 +10673,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_H } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -10535,7 +10695,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_H } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -10571,8 +10740,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -10585,7 +10762,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -13240,7 +13426,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HA zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -13258,7 +13448,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONS zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -13776,7 +13970,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HAND zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -13794,7 +13992,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_ zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -13948,7 +14150,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HAND zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -13966,7 +14172,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_ zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -14471,7 +14681,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDL zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -14489,7 +14703,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_H zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -17301,7 +17519,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HA zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -17319,7 +17541,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONS zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -19888,7 +20114,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HAND zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -19906,7 +20136,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_ zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -20117,7 +20351,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HAND zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -20135,7 +20373,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_ zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -21530,7 +21772,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDL zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -21548,7 +21794,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_H zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -32883,7 +33133,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_O USE_OPLINE zval *val; - int ret; + int ret; val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var); @@ -32905,7 +33155,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_O SAVE_OPLINE(); ret = i_zend_is_true(val); - if (ret) { + if (UNEXPECTED(((opline - 1)->extended_value & ZEND_COMPARE_CONTINUE)) && (ret || Z_LVAL_P(val) == 0)) { + opline++; + } else if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { @@ -32920,7 +33172,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_ USE_OPLINE zval *val; - int ret; val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var); @@ -32940,15 +33191,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_ } SAVE_OPLINE(); - ret = i_zend_is_true(val); - - if (ret) { + if (i_zend_is_true(val)) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } + ZEND_VM_JMP(opline); } @@ -33357,7 +33607,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCO if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE))) { + ZVAL_COPY(EX_VAR(opline->result.var), val); + } else { + ZVAL_FALSE(EX_VAR(opline->result.var)); + } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); @@ -34642,7 +34896,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HAN ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -34660,7 +34918,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -34712,8 +34974,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -34726,7 +34992,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -34780,8 +35050,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HAN } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -34794,7 +35068,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HAN } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -34830,8 +35108,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDL } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -34844,7 +35130,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDL } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -34880,8 +35175,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CO } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -34894,7 +35197,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CO } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -38351,7 +38663,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDL zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -38369,7 +38685,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_H zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -38579,7 +38899,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDL zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -38597,7 +38921,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_H zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -40929,7 +41257,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLE ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -40947,7 +41279,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HA ZEND_VM_SMART_BRANCH(result, 1); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -40999,8 +41335,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZE } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -41013,7 +41353,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZE } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -41067,8 +41411,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLE } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -41081,7 +41429,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLE } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -41117,8 +41469,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER( } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -41131,7 +41491,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER( } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -41167,8 +41536,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -41181,7 +41558,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -44656,8 +45042,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLE } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -44670,7 +45060,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLE } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -44724,8 +45118,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -44738,7 +45136,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -44774,8 +45176,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HAND } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -44788,7 +45198,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HAND } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -44824,8 +45243,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TM } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -44838,7 +45265,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TM } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -47880,7 +48316,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZE USE_OPLINE zend_free_op free_op1; zval *val; - int ret; + int ret; val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1); @@ -47902,7 +48338,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZE SAVE_OPLINE(); ret = i_zend_is_true(val); zval_ptr_dtor_nogc(free_op1); - if (ret) { + if (UNEXPECTED(((opline - 1)->extended_value & ZEND_COMPARE_CONTINUE)) && (ret || Z_LVAL_P(val) == 0)) { + opline++; + } else if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { @@ -47917,7 +48355,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z USE_OPLINE zend_free_op free_op1; zval *val; - int ret; val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1); @@ -47937,15 +48374,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z } SAVE_OPLINE(); - ret = i_zend_is_true(val); - zval_ptr_dtor_nogc(free_op1); - if (ret) { + if (i_zend_is_true(val)) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } + zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(opline); } @@ -47999,7 +48435,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_ if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - ZVAL_FALSE(EX_VAR(opline->result.var)); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE))) { + ZVAL_COPY(EX_VAR(opline->result.var), val); + } else { + ZVAL_FALSE(EX_VAR(opline->result.var)); + } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); @@ -48608,8 +49048,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HAN } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -48622,7 +49066,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HAN } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -48676,8 +49124,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -48690,7 +49142,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -48726,8 +49182,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_H } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -48740,7 +49204,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_H } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } + zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -48776,8 +49250,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -48790,7 +49272,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } + zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -50939,8 +51431,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLE } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -50953,7 +51449,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLE } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -51007,8 +51507,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -51021,7 +51525,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -51057,8 +51565,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HAND } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -51071,7 +51587,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HAND } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } + zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -51107,8 +51633,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -51121,7 +51655,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } + zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -52230,8 +52774,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -52244,7 +52792,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) == 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) == 0); + } zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -52298,8 +52850,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && result)) { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -52312,7 +52868,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + if (UNEXPECTED((opline->extended_value & ZEND_COMPARE_CONTINUE) && (Z_LVAL_P(result) != 0))) { + ZVAL_COPY(result, op2); + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) != 0); + } zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -52348,8 +52908,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_ } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -52362,7 +52930,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_ } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 < Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) < 0); + } + zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -52398,8 +52976,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } else { break; } - ZEND_VM_SMART_BRANCH(result, 0); - ZVAL_BOOL(EX_VAR(opline->result.var), result); + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && result) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(EX_VAR(opline->result.var), op1); + } else { + ZVAL_COPY(EX_VAR(opline->result.var), op2); + } + } else { + ZEND_VM_SMART_BRANCH(result, 0); + ZVAL_BOOL(EX_VAR(opline->result.var), result); + } ZEND_VM_NEXT_OPCODE(); } while (0); @@ -52412,7 +52998,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); - ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + + if ((opline->extended_value & ZEND_COMPARE_CONTINUE) && (0 <= Z_LVAL_P(result))) { + if (opline->extended_value & ZEND_COMPARE_GREATER) { + ZVAL_COPY(result, op1); + } else { + ZVAL_COPY(result, op2); + } + } else { + ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); + } + zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); diff --git a/tests/lang/operators/operator_compare_chaining_false.phpt b/tests/lang/operators/operator_compare_chaining_false.phpt new file mode 100644 index 0000000000000..f84777c4d3f23 --- /dev/null +++ b/tests/lang/operators/operator_compare_chaining_false.phpt @@ -0,0 +1,44 @@ +--TEST-- +Test operator chaining +--FILE-- + 4 > 1); +var_dump(3 >= 4 >= 1); + +// Short Circuit Test +var_dump(1 < 1 < $a++); +var_dump($a); + +// Equality Test +var_dump($a == 1 === $b); +var_dump($a == 1 === $c); +var_dump($a <= 1 === $c); +var_dump(1 < 2 == 3 == 4); + +// Combined Test +var_dump(1 > 2 == 3 < 4); +?> +===DONE=== +--EXPECT-- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +int(1) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +===DONE=== diff --git a/tests/lang/operators/operator_compare_chaining_true.phpt b/tests/lang/operators/operator_compare_chaining_true.phpt new file mode 100644 index 0000000000000..6d0e830a31927 --- /dev/null +++ b/tests/lang/operators/operator_compare_chaining_true.phpt @@ -0,0 +1,44 @@ +--TEST-- +Test operator chaining +--FILE-- + 2 > 1); +var_dump(3 >= 2 >= 1); +var_dump(($a - 4) < 0 < 3); + +// Short Circuit Test +var_dump(0 < 1 <= $a++); +var_dump($a); + +// Equality Test +$a = 1; +var_dump($a == 1 == $b); +var_dump($a == 1 == $c); +var_dump($a <= 1 == $c); + +// Combined Test +var_dump(1 < 2 == 3 < 4); +var_dump((1 < 2) == (3 < 4)); +?> +===DONE=== +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +int(2) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +===DONE===