@@ -72,7 +72,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
72
72
%token T_PRINT " print (T_PRINT)"
73
73
%right T_YIELD
74
74
%token T_YIELD " yield (T_YIELD)"
75
- %left ' =' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
75
+ %left ' =' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL
76
76
%token T_PLUS_EQUAL " += (T_PLUS_EQUAL)"
77
77
%token T_MINUS_EQUAL " -= (T_MINUS_EQUAL)"
78
78
%token T_MUL_EQUAL " *= (T_MUL_EQUAL)"
@@ -109,6 +109,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
109
109
%nonassoc T_INSTANCEOF
110
110
%token T_INSTANCEOF " instanceof (T_INSTANCEOF)"
111
111
%right ' ~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST ' @'
112
+ %right T_POW
112
113
%token T_INC " ++ (T_INC)"
113
114
%token T_DEC " -- (T_DEC)"
114
115
%token T_INT_CAST " (int) (T_INT_CAST)"
@@ -213,6 +214,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
213
214
%token T_DIR " __DIR__ (T_DIR)"
214
215
%token T_NS_SEPARATOR " \\ (T_NS_SEPARATOR)"
215
216
%token T_ELLIPSIS " ... (T_ELLIPSIS)"
217
+ %token T_POW " ** (T_POW)"
218
+ %token T_POW_EQUAL " **= (T_POW_EQUAL)"
216
219
217
220
%% /* Rules */
218
221
@@ -778,6 +781,7 @@ expr_without_variable:
778
781
| variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$ , &$1 , &$3 TSRMLS_CC); }
779
782
| variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$ , &$1 , &$3 TSRMLS_CC); }
780
783
| variable T_MUL_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$ , &$1 , &$3 TSRMLS_CC); }
784
+ | variable T_POW_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_POW, &$$ , &$1 , &$3 TSRMLS_CC); }
781
785
| variable T_DIV_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$ , &$1 , &$3 TSRMLS_CC); }
782
786
| variable T_CONCAT_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$ , &$1 , &$3 TSRMLS_CC); }
783
787
| variable T_MOD_EQUAL expr { zend_check_writable_variable(&$1 ); zend_do_end_variable_parse(&$1 , BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$ , &$1 , &$3 TSRMLS_CC); }
@@ -802,6 +806,7 @@ expr_without_variable:
802
806
| expr ' +' expr { zend_do_binary_op(ZEND_ADD, &$$ , &$1 , &$3 TSRMLS_CC); }
803
807
| expr ' -' expr { zend_do_binary_op(ZEND_SUB, &$$ , &$1 , &$3 TSRMLS_CC); }
804
808
| expr ' *' expr { zend_do_binary_op(ZEND_MUL, &$$ , &$1 , &$3 TSRMLS_CC); }
809
+ | expr T_POW expr { zend_do_binary_op(ZEND_POW, &$$ , &$1 , &$3 TSRMLS_CC); }
805
810
| expr ' /' expr { zend_do_binary_op(ZEND_DIV, &$$ , &$1 , &$3 TSRMLS_CC); }
806
811
| expr ' %' expr { zend_do_binary_op(ZEND_MOD, &$$ , &$1 , &$3 TSRMLS_CC); }
807
812
| expr T_SL expr { zend_do_binary_op(ZEND_SL, &$$ , &$1 , &$3 TSRMLS_CC); }
0 commit comments