instance_call:
/* empty */ { $$ = $0; }
- | { zend_do_push_object(&$0 TSRMLS_CC); zend_do_begin_variable_parse(TSRMLS_C); }
- chaining_instance_call { zend_do_pop_object(&$$ TSRMLS_CC); zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); }
+/* | { zend_do_push_object(&$0 TSRMLS_CC); zend_do_begin_variable_parse(TSRMLS_C); }
+ chaining_instance_call { zend_do_pop_object(&$$ TSRMLS_CC); zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); }*/
;
new_expr:
;
variable:
- variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
- object_property { zend_do_push_object(&$4 TSRMLS_CC); } method_or_not
- { zend_do_pop_object(&$$ TSRMLS_CC); $$.EA = $6.EA; }
- | reference_variable { $$ = $1; $$.EA = ZEND_PARSED_VARIABLE; }
+ reference_variable { $$ = $1; }
| array_function_dereference { $$ = $1; }
| function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.EA = ZEND_PARSED_FUNCTION_CALL; }
;
;
directly_callable_variable:
- reference_variable '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
- | reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
- | simple_variable { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
+ reference_variable '[' dim_offset ']'
+ { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); $$.EA = ZEND_PARSED_VARIABLE; }
+ | reference_variable '{' expr '}'
+ { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); $$.EA = ZEND_PARSED_VARIABLE; }
+ | simple_variable
+ { zend_do_begin_variable_parse(TSRMLS_C);
+ fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC);
+ $$.EA = ZEND_PARSED_VARIABLE; }
+ | variable T_OBJECT_OPERATOR object_member
+ { zend_do_fetch_property(&$$, &$1, &$3 TSRMLS_CC);
+ zend_do_begin_method_call(&$$ TSRMLS_CC); }
+ function_call_parameter_list
+ { zend_do_end_function_call(&$4, &$$, 1, 1 TSRMLS_CC);
+ zend_do_extended_fcall_end(TSRMLS_C);
+ $$.EA = ZEND_PARSED_METHOD_CALL; }
;
reference_variable:
directly_callable_variable { $$ = $1; }
- | static_member { $$ = $1; }
+ | static_member { $$ = $1; $$.EA = ZEND_PARSED_STATIC_MEMBER; }
+ | variable T_OBJECT_OPERATOR object_member
+ { zend_do_fetch_property(&$$, &$1, &$3 TSRMLS_CC); $$.EA = ZEND_PARSED_MEMBER; }
;
simple_variable:
| expr { $$ = $1; }
;
+object_member:
+ variable_name { $$ = $1; }
+ | simple_variable { fetch_simple_variable_ex(&$$, &$1, 0, ZEND_FETCH_R TSRMLS_CC); }
+;
object_property:
object_dim_list { $$ = $1; }