felipe Thu, 08 Jul 2010 16:28:38 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=301090
Log:
- More rules translated!
Changed paths:
U php/php-src/branches/LEMON/Zend/zend_language_parser.y
U php/php-src/branches/LEMON/Zend/zend_language_scanner.c
U php/php-src/branches/LEMON/Zend/zend_language_scanner.l
U php/php-src/branches/LEMON/Zend/zend_language_scanner_defs.h
Modified: php/php-src/branches/LEMON/Zend/zend_language_parser.y
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-08 15:56:03 UTC (rev 301089)
+++ php/php-src/branches/LEMON/Zend/zend_language_parser.y 2010-07-08 16:28:38 UTC (rev 301090)
@@ -70,6 +70,7 @@
| => T_BW_OR
^ => T_BW_XOR
@ => T_AT
+ " => T_QUOTE
*/
@@ -408,74 +409,105 @@
// class_statement_list
// RBRACE { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); }
//;
-//
-//
+
//class_entry_type:
// CLASS { $$.u.op.opline_num = CG(zend_lineno); $$.EA = 0; }
// | ABSTRACT CLASS { $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
// | TRAIT { $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_TRAIT; }
// | FINAL CLASS { $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_FINAL_CLASS; }
//;
-//
+
+class_entry_type(A) ::= CLASS. { A.u.op.opline_num = CG(zend_lineno); A.EA = 0; }
+class_entry_type(A) ::= ABSTRACT CLASS. { A.u.op.opline_num = CG(zend_lineno); A.EA = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
+class_entry_type(A) ::= TRAIT. { A.u.op.opline_num = CG(zend_lineno); A.EA = ZEND_ACC_TRAIT; }
+class_entry_type(A) ::= FINAL CLASS. { A.u.op.opline_num = CG(zend_lineno); A.EA = ZEND_ACC_FINAL_CLASS; }
+
//extends_from:
// /* empty */ { $$.op_type = IS_UNUSED; }
// | EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); }
//;
-//
+
+extends_from(A) ::= . { A.op_type = IS_UNUSED; }
+extends_from(A) ::= EXTENDS fully_qualified_class_name(B). { zend_do_fetch_class(&A, &B TSRMLS_CC); }
+
//interface_entry:
// INTERFACE { $$.u.op.opline_num = CG(zend_lineno); $$.EA = ZEND_ACC_INTERFACE; }
//;
-//
+
+interface_entry(A) ::= INTERFACE. { A.u.op.opline_num = CG(zend_lineno); A.EA = ZEND_ACC_INTERFACE; }
+
//interface_extends_list:
// /* empty */
// | EXTENDS interface_list
//;
-//
+
+interface_extends_list ::= .
+interface_extends_list ::= EXTENDS interface_list.
+
//implements_list:
// /* empty */
// | IMPLEMENTS interface_list
//;
-//
+
+implements_list ::= .
+implements_list ::= IMPLEMENTS interface_list.
+
//interface_list:
// fully_qualified_class_name { zend_do_implements_interface(&$1 TSRMLS_CC); }
// | interface_list COMMA fully_qualified_class_name { zend_do_implements_interface(&$3 TSRMLS_CC); }
//;
-//
+
+interface_list ::= fully_qualified_class_name(B). { zend_do_implements_interface(&B TSRMLS_CC); }
+interface_list ::= interface_list COMMA fully_qualified_class_name(B). { zend_do_implements_interface(&B TSRMLS_CC); }
+
//foreach_optional_arg:
// /* empty */ { $$.op_type = IS_UNUSED; }
// | DOUBLE_ARROW foreach_variable { $$ = $2; }
//;
-//
-//
+
+foreach_optional_arg(A) ::= . { A.op_type = IS_UNUSED; }
+foreach_optional_arg(A) ::= DOUBLE_ARROW foreach_variable(B). { A = B; }
+
//foreach_variable:
// variable { zend_check_writable_variable(&$1); $$ = $1; }
// | '&' variable { zend_check_writable_variable(&$2); $$ = $2; $$.EA |= ZEND_PARSED_REFERENCE_VARIABLE; }
//;
-//
+
+foreach_variable(A) ::= variable(B). { zend_check_writable_variable(&B); A = B; }
+foreach_variable(A) ::= BW_AND variable(B). { zend_check_writable_variable(&B); A = B; A.EA |= ZEND_PARSED_REFERENCE_VARIABLE; }
+
//for_statement:
// statement
// | COLON inner_statement_list ENDFOR SEMICOLON
//;
-//
-//
+
+for_statement ::= statement.
+for_statement ::= COLON inner_statement_list ENDFOR SEMICOLON.
+
//foreach_statement:
// statement
// | COLON inner_statement_list ENDFOREACH SEMICOLON
//;
-//
-//
+
+foreach_statement ::= statement.
+foreach_statement ::= COLON inner_statement_list ENDFOREACH SEMICOLON.
+
//declare_statement:
// statement
// | COLON inner_statement_list ENDDECLARE SEMICOLON
//;
-//
-//
+
+declare_statement ::= statement.
+declare_statement ::= COLON inner_statement_list ENDDECLARE SEMICOLON.
+
//declare_list:
// STRING EQUAL static_scalar { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); }
// | declare_list COMMA STRING EQUAL static_scalar { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); }
//;
-//
-//
+
+declare_list ::= STRING(B) EQUAL static_scalar(C). { zend_do_declare_stmt(&B, &C TSRMLS_CC); }
+declare_list ::= declare_list COMMA STRING(B) EQUAL static_scalar(C). { zend_do_declare_stmt(&B, &C TSRMLS_CC); }
+
//switch_case_list:
// LBRACE case_list RBRACE { $$ = $2; }
// | LBRACE SEMICOLON case_list RBRACE { $$ = $3; }
@@ -495,15 +527,18 @@
// COLON
// | SEMICOLON
//;
-//
-//
+
+case_separator ::= COLON.
+case_separator ::= SEMICOLON.
+
//while_statement:
// statement
// | COLON inner_statement_list ENDWHILE SEMICOLON
//;
-//
-//
-//
+
+while_statement ::= statement.
+while_statement ::= COLON inner_statement_list ENDWHILE SEMICOLON.
+
//elseif_list:
// /* empty */
// | elseif_list ELSEIF LPAREN expr RPAREN { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
@@ -514,26 +549,31 @@
// /* empty */
// | elseif_alt_list ELSEIF LPAREN expr RPAREN COLON { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
//;
-//
-//
+
//else_single:
// /* empty */
// | ELSE statement
//;
-//
-//
+
+else_single ::= .
+else_single ::= ELSE statement.
+
//else_alt_single:
// /* empty */
// | ELSE COLON inner_statement_list
//;
-//
-//
+
+else_alt_single ::= .
+else_alt_single ::= ELSE COLON inner_statement_list.
+
//parameter_list:
// non_empty_parameter_list
// | /* empty */
//;
-//
-//
+
+parameter_list ::= .
+parameter_list ::= non_empty_parameter_list.
+
//non_empty_parameter_list:
// optional_class_type VARIABLE { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &$2, &$$, NULL, &$1, 0 TSRMLS_CC); }
// | optional_class_type '&' VARIABLE { $$.op_type = IS_UNUSED; $$.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &$3, &$$, NULL, &$1, 1 TSRMLS_CC); }
@@ -544,8 +584,16 @@
// | non_empty_parameter_list COMMA optional_class_type '&' VARIABLE EQUAL static_scalar { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &$5, &$$, &$7, &$3, 1 TSRMLS_CC); }
// | non_empty_parameter_list COMMA optional_class_type VARIABLE EQUAL static_scalar { $$=$1; $$.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &$4, &$$, &$6, &$3, 0 TSRMLS_CC); }
//;
-//
-//
+
+non_empty_parameter_list(A) ::= optional_class_type(B) VARIABLE(C). { A.op_type = IS_UNUSED; A.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &C, &A, NULL, &B, 0 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= optional_class_type(B) BW_AND VARIABLE(C). { A.op_type = IS_UNUSED; A.u.op.num=1; zend_do_receive_arg(ZEND_RECV, &C, &A, NULL, &B, 1 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= optional_class_type(B) BW_AND VARIABLE(C) EQUAL static_scalar(D). { A.op_type = IS_UNUSED; A.u.op.num=1; zend_do_receive_arg(ZEND_RECV_INIT, &C, &A, &D, &B, 1 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= optional_class_type(B) VARIABLE(C) EQUAL static_scalar(D). { A.op_type = IS_UNUSED; A.u.op.num=1; zend_do_receive_arg(ZEND_RECV_INIT, &C, &A, &D, &B, 0 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= non_empty_parameter_list(B) COMMA optional_class_type(C) VARIABLE(D). { A = B; A.u.op.num++; zend_do_receive_arg(ZEND_RECV, &D, &A, NULL, &C, 0 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= non_empty_parameter_list(B) COMMA optional_class_type(C) BW_AND VARIABLE(D). { A = B; A.u.op.num++; zend_do_receive_arg(ZEND_RECV, &D, &A, NULL, &C, 1 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= non_empty_parameter_list(B) COMMA optional_class_type(C) BW_AND VARIABLE(D) EQUAL static_scalar(E). { A = B; A.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &D, &A, &E, &C, 1 TSRMLS_CC); }
+non_empty_parameter_list(A) ::= non_empty_parameter_list(B) COMMA optional_class_type(C) VARIABLE(D) EQUAL static_scalar(E). { A = B; A.u.op.num++; zend_do_receive_arg(ZEND_RECV_INIT, &D, &A, &E, &C, 0 TSRMLS_CC); }
+
//optional_class_type:
// /* empty */ { $$.op_type = IS_UNUSED; }
// | ARRAY { $$ = $1; $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_ARRAY; }
@@ -559,14 +607,27 @@
// | NUMERIC_HINT { $$ = $1; $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_NUMERIC; }
// | fully_qualified_class_name { $$ = $1; $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_CLASS; }
//;
-//
-//
+
+optional_class_type(A) ::= . { A.op_type = IS_UNUSED; }
+optional_class_type(A) ::= ARRAY(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_ARRAY; }
+optional_class_type(A) ::= BOOL_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_BOOL; }
+optional_class_type(A) ::= STRING_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_STRING; }
+optional_class_type(A) ::= INT_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_LONG; }
+optional_class_type(A) ::= DOUBLE_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_DOUBLE; }
+optional_class_type(A) ::= RESOURCE_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_RESOURCE; }
+optional_class_type(A) ::= OBJECT_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_OBJECT; }
+optional_class_type(A) ::= SCALAR_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_SCALAR; }
+optional_class_type(A) ::= NUMERIC_HINT(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_NUMERIC; }
+optional_class_type(A) ::= fully_qualified_class_name(B). { A = B; A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_CLASS; }
+
//function_call_parameter_list:
// non_empty_function_call_parameter_list { $$ = $1; }
// | /* empty */ { Z_LVAL($$.u.constant) = 0; }
//;
-//
-//
+
+function_call_parameter_list(A) ::= . { Z_LVAL(A.u.constant) = 0; }
+function_call_parameter_list(A) ::= non_empty_function_call_parameter_list(B). { A = B; }
+
//non_empty_function_call_parameter_list:
// expr_without_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); }
// | variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
@@ -575,35 +636,52 @@
// | non_empty_function_call_parameter_list COMMA variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$3, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
// | non_empty_function_call_parameter_list COMMA '&' w_variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$4, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); }
//;
-//
+
+non_empty_function_call_parameter_list(A) ::= expr_without_variable(B). { Z_LVAL(A.u.constant) = 1; zend_do_pass_param(&B, ZEND_SEND_VAL, Z_LVAL(A.u.constant) TSRMLS_CC); }
+non_empty_function_call_parameter_list(A) ::= variable(B). { Z_LVAL(A.u.constant) = 1; zend_do_pass_param(&B, ZEND_SEND_VAR, Z_LVAL(A.u.constant) TSRMLS_CC); }
+non_empty_function_call_parameter_list(A) ::= BW_AND w_variable(B). { Z_LVAL(A.u.constant) = 1; zend_do_pass_param(&B, ZEND_SEND_REF, Z_LVAL(A.u.constant) TSRMLS_CC); }
+non_empty_function_call_parameter_list(A) ::= non_empty_function_call_parameter_list(B) COMMA expr_without_variable(C). { Z_LVAL(A.u.constant)=Z_LVAL(B.u.constant)+1; zend_do_pass_param(&C, ZEND_SEND_VAL, Z_LVAL(A.u.constant) TSRMLS_CC); }
+non_empty_function_call_parameter_list(A) ::= non_empty_function_call_parameter_list(B) COMMA variable(C). { Z_LVAL(A.u.constant)=Z_LVAL(B.u.constant)+1; zend_do_pass_param(&C, ZEND_SEND_VAR, Z_LVAL(A.u.constant) TSRMLS_CC); }
+non_empty_function_call_parameter_list(A) ::= non_empty_function_call_parameter_list(B) COMMA BW_AND w_variable(C). { Z_LVAL(A.u.constant)=Z_LVAL(B.u.constant)+1; zend_do_pass_param(&C, ZEND_SEND_REF, Z_LVAL(A.u.constant) TSRMLS_CC); }
+
//global_var_list:
// global_var_list COMMA global_var { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
// | global_var { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
//;
-//
-//
+
+global_var_list ::= global_var_list COMMA global_var(B). { zend_do_fetch_global_variable(&B, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
+global_var_list ::= global_var(B). { zend_do_fetch_global_variable(&B, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
+
//global_var:
// VARIABLE { $$ = $1; }
// | '$' r_variable { $$ = $2; }
// | '$' LBRACE expr RBRACE { $$ = $3; }
//;
-//
-//
+
+global_var(A) ::= VARIABLE(B). { A = B; }
+global_var(A) ::= DOLLAR r_variable(B). { A = B; }
+global_var(A) ::= DOLLAR LBRACE expr(B) RBRACE. { A = B; }
+
//static_var_list:
// static_var_list COMMA VARIABLE { zend_do_fetch_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
// | static_var_list COMMA VARIABLE EQUAL static_scalar { zend_do_fetch_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); }
// | VARIABLE { zend_do_fetch_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
// | VARIABLE EQUAL static_scalar { zend_do_fetch_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); }
-//
//;
-//
-//
+
+static_var_list ::= static_var_list COMMA VARIABLE(B). { zend_do_fetch_static_variable(&B, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
+static_var_list ::= static_var_list COMMA VARIABLE(B) EQUAL static_scalar(C). { zend_do_fetch_static_variable(&B, &C, ZEND_FETCH_STATIC TSRMLS_CC); }
+static_var_list ::= VARIABLE(B). { zend_do_fetch_static_variable(&B, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
+static_var_list ::= VARIABLE(B) EQUAL static_scalar(C). { zend_do_fetch_static_variable(&B, &C, ZEND_FETCH_STATIC TSRMLS_CC); }
+
//class_statement_list:
// class_statement_list class_statement
// | /* empty */
//;
-//
-//
+
+class_statement_list ::= .
+class_statement_list ::= class_statement_list class_statement.
+
//class_statement:
// variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration SEMICOLON
// | class_constant_declaration SEMICOLON
@@ -615,80 +693,125 @@
//trait_use_statement:
// USE trait_list trait_adaptations
//;
-//
+
+trait_use_statement ::= USE trait_list trait_adaptations.
+
//trait_list:
// fully_qualified_class_name { zend_do_implements_trait(&$1 TSRMLS_CC); }
// | trait_list COMMA fully_qualified_class_name { zend_do_implements_trait(&$3 TSRMLS_CC); }
//;
-//
+
+trait_list ::= fully_qualified_class_name(B). { zend_do_implements_trait(&B TSRMLS_CC); }
+trait_list ::= trait_list COMMA fully_qualified_class_name(B). { zend_do_implements_trait(&B TSRMLS_CC); }
+
//trait_adaptations:
// SEMICOLON
// | LBRACE trait_adaptation_list RBRACE
//;
-//
+
+trait_adaptations ::= SEMICOLON.
+trait_adaptations ::= LBRACE trait_adaptation_list RBRACE.
+
//trait_adaptation_list:
// /* empty */
// | non_empty_trait_adaptation_list
//;
-//
+
+trait_adaptation_list ::= .
+trait_adaptation_list ::= non_empty_trait_adaptation_list.
+
//non_empty_trait_adaptation_list:
// trait_adaptation_statement
// | non_empty_trait_adaptation_list trait_adaptation_statement
//;
-//
+
+non_empty_trait_adaptation_list ::= trait_adaptation_statement.
+non_empty_trait_adaptation_list ::= non_empty_trait_adaptation_list trait_adaptation_statement.
+
//trait_adaptation_statement:
// trait_precedence SEMICOLON { zend_add_trait_precedence(&$1 TSRMLS_CC); }
// | trait_alias SEMICOLON { zend_add_trait_alias(&$1 TSRMLS_CC); }
//;
-//
+
+trait_adaptation_statement ::= trait_precedence(B) SEMICOLON. { zend_add_trait_precedence(&B TSRMLS_CC); }
+trait_adaptation_statement ::= trait_alias(B) SEMICOLON. { zend_add_trait_alias(&B TSRMLS_CC); }
+
//trait_precedence:
// trait_method_reference_fully_qualified INSTEADOF trait_reference_list { zend_prepare_trait_precedence(&$$, &$1, &$3 TSRMLS_CC); }
//;
-//
+
+trait_precedence(A) ::= trait_method_reference_fully_qualified(B) INSTEADOF trait_reference_list(C). { zend_prepare_trait_precedence(&A, &B, &C TSRMLS_CC); }
+
//trait_reference_list:
// fully_qualified_class_name { zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); }
// | trait_reference_list COMMA fully_qualified_class_name { zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; }
//;
-//
+
+trait_reference_list(A) ::= fully_qualified_class_name(B). { zend_init_list(&A.u.op.ptr, Z_STRVAL(B.u.constant) TSRMLS_CC); }
+trait_reference_list(A) ::= trait_reference_list(B) COMMA fully_qualified_class_name(C). { zend_add_to_list(&B.u.op.ptr, Z_STRVAL(C.u.constant) TSRMLS_CC); A = B; }
+
//trait_method_reference:
// STRING { zend_prepare_reference(&$$, NULL, &$1 TSRMLS_CC); }
// | trait_method_reference_fully_qualified { $$ = $1; }
//;
-//
+
+trait_method_reference(A) ::= STRING(B). { zend_prepare_reference(&A, NULL, &B TSRMLS_CC); }
+trait_method_reference(A) ::= trait_method_reference_fully_qualified(B). { A = B; }
+
//trait_method_reference_fully_qualified:
// fully_qualified_class_name PAAMAYIM_NEKUDOTAYIM STRING { zend_prepare_reference(&$$, &$1, &$3 TSRMLS_CC); }
//;
-//
+
+trait_method_reference_fully_qualified(A) ::= fully_qualified_class_name(B) PAAMAYIM_NEKUDOTAYIM STRING(C). { zend_prepare_reference(&A, &B, &C TSRMLS_CC); }
+
//trait_alias:
// trait_method_reference AS trait_modifiers STRING { zend_prepare_trait_alias(&$$, &$1, &$3, &$4 TSRMLS_CC); }
// | trait_method_reference AS member_modifier { zend_prepare_trait_alias(&$$, &$1, &$3, NULL TSRMLS_CC); }
//;
-//
+
+trait_alias(A) ::= trait_method_reference(B) AS trait_modifiers(C) STRING(D). { zend_prepare_trait_alias(&A, &B, &C, &D TSRMLS_CC); }
+trait_alias(A) ::= trait_method_reference(B) AS member_modifier(C). { zend_prepare_trait_alias(&A, &B, &C, NULL TSRMLS_CC); }
+
//trait_modifiers:
// /* empty */ { Z_LVAL($$.u.constant) = 0x0; } /* No change of methods visibility */
// | member_modifier { $$ = $1; } /* REM: Keep in mind, there are not only visibility modifiers */
//;
-//
+
+trait_modifiers(A) ::= . { Z_LVAL(A.u.constant) = 0x0; } /* No change of methods visibility */
+trait_modifiers(A) ::= member_modifier(B). { A = B; } /* REM: Keep in mind, there are not only visibility modifiers */
+
//method_body:
// SEMICOLON /* abstract method */ { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
// | LBRACE inner_statement_list RBRACE { Z_LVAL($$.u.constant) = 0; }
//;
-//
+
+method_body(A) ::= SEMICOLON. { Z_LVAL(A.u.constant) = ZEND_ACC_ABSTRACT; }
+method_body(A) ::= LBRACE inner_statement_list RBRACE. { Z_LVAL(A.u.constant) = 0; }
+
//variable_modifiers:
// non_empty_member_modifiers { $$ = $1; }
// | VAR { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
//;
-//
+
+variable_modifiers(A) ::= non_empty_member_modifiers(B). { A = B; }
+variable_modifiers(A) ::= VAR. { Z_LVAL(A.u.constant) = ZEND_ACC_PUBLIC; }
+
//method_modifiers:
// /* empty */ { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
// | non_empty_member_modifiers { $$ = $1; if (!(Z_LVAL($$.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL($$.u.constant) |= ZEND_ACC_PUBLIC; } }
//;
-//
+
+method_modifiers(A) ::= . { Z_LVAL(A.u.constant) = ZEND_ACC_PUBLIC; }
+method_modifiers(A) ::= non_empty_member_modifiers(B). { A = B; if (!(Z_LVAL(A.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL(A.u.constant) |= ZEND_ACC_PUBLIC; } }
+
//non_empty_member_modifiers:
// member_modifier { $$ = $1; }
// | non_empty_member_modifiers member_modifier { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); }
//;
-//
+
+non_empty_member_modifiers(A) ::= member_modifier(B). { A = B; }
+non_empty_member_modifiers(A) ::= non_empty_member_modifiers(B) member_modifier(C). { Z_LVAL(A.u.constant) = zend_do_verify_access_types(&B, &C); }
+
//member_modifier:
// PUBLIC { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
// | PROTECTED { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; }
@@ -697,39 +820,60 @@
// | ABSTRACT { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
// | FINAL { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; }
//;
-//
+
+member_modifier(A) ::= PUBLIC. { Z_LVAL(A.u.constant) = ZEND_ACC_PUBLIC; }
+member_modifier(A) ::= PROTECTED. { Z_LVAL(A.u.constant) = ZEND_ACC_PROTECTED; }
+member_modifier(A) ::= PRIVATE. { Z_LVAL(A.u.constant) = ZEND_ACC_PRIVATE; }
+member_modifier(A) ::= STATIC. { Z_LVAL(A.u.constant) = ZEND_ACC_STATIC; }
+member_modifier(A) ::= ABSTRACT. { Z_LVAL(A.u.constant) = ZEND_ACC_ABSTRACT; }
+member_modifier(A) ::= FINAL. { Z_LVAL(A.u.constant) = ZEND_ACC_FINAL; }
+
//class_variable_declaration:
// class_variable_declaration COMMA VARIABLE { zend_do_declare_property(&$3, NULL, CG(access_type) TSRMLS_CC); }
// | class_variable_declaration COMMA VARIABLE EQUAL static_scalar { zend_do_declare_property(&$3, &$5, CG(access_type) TSRMLS_CC); }
// | VARIABLE { zend_do_declare_property(&$1, NULL, CG(access_type) TSRMLS_CC); }
// | VARIABLE EQUAL static_scalar { zend_do_declare_property(&$1, &$3, CG(access_type) TSRMLS_CC); }
//;
-//
+
+class_variable_declaration ::= class_variable_declaration COMMA VARIABLE(B). { zend_do_declare_property(&B, NULL, CG(access_type) TSRMLS_CC); }
+class_variable_declaration ::= class_variable_declaration COMMA VARIABLE(B) EQUAL static_scalar(C). { zend_do_declare_property(&B, &C, CG(access_type) TSRMLS_CC); }
+class_variable_declaration ::= VARIABLE(B). { zend_do_declare_property(&B, NULL, CG(access_type) TSRMLS_CC); }
+class_variable_declaration ::= VARIABLE(B) EQUAL static_scalar(C). { zend_do_declare_property(&B, &C, CG(access_type) TSRMLS_CC); }
+
//class_constant_declaration:
// class_constant_declaration COMMA STRING EQUAL static_scalar { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); }
// | CONST STRING EQUAL static_scalar { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); }
//;
-//
+
+class_constant_declaration ::= class_constant_declaration COMMA STRING(B) EQUAL static_scalar(C). { zend_do_declare_class_constant(&B, &C TSRMLS_CC); }
+class_constant_declaration ::= CONST STRING(B) EQUAL static_scalar(C). { zend_do_declare_class_constant(&B, &C TSRMLS_CC); }
+
//echo_expr_list:
// echo_expr_list COMMA expr { zend_do_echo(&$3 TSRMLS_CC); }
// | expr { zend_do_echo(&$1 TSRMLS_CC); }
//;
-//
echo_expr_list ::= expr(A). { zend_do_echo(&A TSRMLS_CC); }
echo_expr_list ::= echo_expr_list COMMA expr(A). { zend_do_echo(&A TSRMLS_CC); }
-//
//for_expr:
// /* empty */ { $$.op_type = IS_CONST; Z_TYPE($$.u.constant) = IS_BOOL; Z_LVAL($$.u.constant) = 1; }
// | non_empty_for_expr { $$ = $1; }
//;
-//
+
+for_expr(A) ::= . { A.op_type = IS_CONST; Z_TYPE(A.u.constant) = IS_BOOL; Z_LVAL(A.u.constant) = 1; }
+for_expr(A) ::= non_empty_for_expr(B). { A = B; }
+
//non_empty_for_expr:
// non_empty_for_expr COMMA { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; }
// | expr { $$ = $1; }
//;
-//
+
+non_empty_for_expr_i ::= non_empty_for_expr(B) COMMA. { zend_do_free(&B TSRMLS_CC); }
+
+non_empty_for_expr(A) ::= non_empty_for_expr_i expr(B). { A = B; }
+non_empty_for_expr(A) ::= expr(B). { A = B; }
+
//expr_without_variable:
// LIST LPAREN { zend_do_list_init(TSRMLS_C); } assignment_list RPAREN EQUAL expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
// | variable EQUAL expr { zend_check_writable_variable(&$1); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
@@ -856,19 +1000,29 @@
//function:
// FUNCTION { $$.u.op.opline_num = CG(zend_lineno); }
//;
-//
+
+function(A) ::= FUNCTION. { A.u.op.opline_num = CG(zend_lineno); }
+
//lexical_vars:
// /* empty */
// | USE LPAREN lexical_var_list RPAREN
//;
-//
+
+lexical_vars ::= .
+lexical_vars ::= USE LPAREN lexical_var_list RPAREN.
+
//lexical_var_list:
// lexical_var_list COMMA VARIABLE { zend_do_fetch_lexical_variable(&$3, 0 TSRMLS_CC); }
// | lexical_var_list COMMA '&' VARIABLE { zend_do_fetch_lexical_variable(&$4, 1 TSRMLS_CC); }
// | VARIABLE { zend_do_fetch_lexical_variable(&$1, 0 TSRMLS_CC); }
// | '&' VARIABLE { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); }
//;
-//
+
+lexical_var_list ::= lexical_var_list COMMA VARIABLE(B). { zend_do_fetch_lexical_variable(&B, 0 TSRMLS_CC); }
+lexical_var_list ::= lexical_var_list COMMA BW_AND VARIABLE(B). { zend_do_fetch_lexical_variable(&B, 1 TSRMLS_CC); }
+lexical_var_list ::= VARIABLE(B). { zend_do_fetch_lexical_variable(&B, 0 TSRMLS_CC); }
+lexical_var_list ::= BW_AND VARIABLE(B). { zend_do_fetch_lexical_variable(&B, 1 TSRMLS_CC); }
+
//function_call:
// namespace_name LPAREN { $2.u.op.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); }
// function_call_parameter_list
@@ -972,9 +1126,10 @@
// /* empty */ { Z_LVAL($$.u.constant)=0; }
// | LPAREN function_call_parameter_list RPAREN { $$ = $2; }
//;
-//
-//
+ctor_arguments(A) ::= . { Z_LVAL(A.u.constant) = 0; }
+ctor_arguments(A) ::= LPAREN function_call_parameter_list(B) RPAREN. { A = B; }
+
common_scalar(A) ::= LNUMBER(B). { A = B; }
common_scalar(A) ::= DNUMBER(B). { A = B; }
common_scalar(A) ::= CONSTANT_ENCAPSED_STRING(B). { A = B; }
@@ -1024,15 +1179,25 @@
// | '"' encaps_list '"' { $$ = $2; }
// | START_HEREDOC encaps_list END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); }
//;
-//
+scalar(A) ::= STRING_VARNAME(B). { A = B; }
+scalar(A) ::= class_constant(B). { A = B; }
+scalar(A) ::= namespace_name(B). { zend_do_fetch_constant(&A, NULL, &B, ZEND_RT, 1 TSRMLS_CC); }
+scalar(A) ::= NAMESPACE NS_SEPARATOR namespace_name(B). { A.op_type = IS_CONST; ZVAL_EMPTY_STRING(&A.u.constant); zend_do_build_namespace_name(&A, &A, &B TSRMLS_CC); B = A; zend_do_fetch_constant(&A, NULL, &B, ZEND_RT, 0 TSRMLS_CC); }
+scalar(A) ::= NS_SEPARATOR namespace_name(B). { char *tmp = estrndup(Z_STRVAL(B.u.constant), Z_STRLEN(B.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL(B.u.constant), Z_STRLEN(B.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL(B.u.constant)); Z_STRVAL(B.u.constant) = tmp; ++Z_STRLEN(B.u.constant); zend_do_fetch_constant(&A, NULL, &B, ZEND_RT, 0 TSRMLS_CC); }
scalar(A) ::= common_scalar(B). { A = B; }
-//
+scalar(A) ::= QUOTE encaps_list(B) QUOTE. { A = B; }
+scalar(A) ::= START_HEREDOC(B) encaps_list(C) END_HEREDOC. { A = C; CG(heredoc) = Z_STRVAL(B.u.constant); CG(heredoc_len) = Z_STRLEN(B.u.constant); }
+
+
//static_array_pair_list:
// /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
// | non_empty_static_array_pair_list possible_comma { $$ = $1; }
//;
-//
+
+static_array_pair_list(A) ::= . { A.op_type = IS_CONST; INIT_PZVAL(&A.u.constant); array_init(&A.u.constant); }
+static_array_pair_list(A) ::= non_empty_static_array_pair_list(B) possible_comma. { A = B; }
+
//possible_comma:
// /* empty */
// | COMMA
@@ -1048,30 +1213,30 @@
// | static_scalar DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, &$1, &$3); }
// | static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); }
//;
-//
+
+non_empty_static_array_pair_list(A) ::= non_empty_static_array_pair_list COMMA static_scalar(B) DOUBLE_ARROW static_scalar(C). { zend_do_add_static_array_element(&A, &B, &C); }
+non_empty_static_array_pair_list(A) ::= non_empty_static_array_pair_list COMMA static_scalar(B). { zend_do_add_static_array_element(&A, NULL, &B); }
+non_empty_static_array_pair_list(A) ::= static_scalar(B) DOUBLE_ARROW static_scalar(C). { A.op_type = IS_CONST; INIT_PZVAL(&A.u.constant); array_init(&A.u.constant); zend_do_add_static_array_element(&A, &B, &C); }
+non_empty_static_array_pair_list(A) ::= static_scalar(B). { A.op_type = IS_CONST; INIT_PZVAL(&A.u.constant); array_init(&A.u.constant); zend_do_add_static_array_element(&A, NULL, &B); }
+
//expr:
// r_variable { $$ = $1; }
// | expr_without_variable { $$ = $1; }
//;
-//
expr(A) ::= r_variable(B). { A = B; }
expr(A) ::= expr_without_variable(B). { A = B; }
-//
//r_variable:
// variable { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
//;
-//
r_variable(A) ::= variable(B). { zend_do_end_variable_parse(&B, BP_VAR_R, 0 TSRMLS_CC); A = B; }
-//
//w_variable:
// variable { zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $$ = $1;
// zend_check_writable_variable(&$1); }
//;
-//
w_variable(A) ::= variable(B). { zend_do_end_variable_parse(&B, BP_VAR_W, 0 TSRMLS_CC); A = B; zend_check_writable_variable(&B); }
@@ -1088,7 +1253,6 @@
// { zend_do_pop_object(&$$ TSRMLS_CC); $$.EA = $1.EA | ($7.EA ? $7.EA : $6.EA); }
// | base_variable_with_function_calls { $$ = $1; }
//;
-//
variable(A) ::= base_variable_with_function_calls(B). { A = B; }
@@ -1096,17 +1260,26 @@
// variable_properties variable_property { $$.EA = $2.EA; }
// | /* empty */ { $$.EA = 0; }
//;
-//
-//
+
+variable_properties(A) ::= . { A.EA = 0; }
+variable_properties(A) ::= variable_properties variable_property(B). { A.EA = B.EA; }
+
//variable_property:
// OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); } method_or_not { $$.EA = $4.EA; }
//;
-//
+
+variable_property_i ::= OBJECT_OPERATOR object_property(B). { zend_do_push_object(&B TSRMLS_CC); }
+
+variable_property(A) ::= variable_property_i method_or_not(B). { A.EA = B.EA; }
+
//array_method_dereference:
// array_method_dereference '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
// | method '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
//;
-//
+
+array_method_dereference(A) ::= array_method_dereference(B) LBRACKET dim_offset(C) RBRACKET. { fetch_array_dim(&A, &B, &C TSRMLS_CC); }
+array_method_dereference(A) ::= method(B) LBRACKET dim_offset(C) RBRACKET. { fetch_array_dim(&A, &B, &C TSRMLS_CC); }
+
//method:
// LPAREN { zend_do_pop_object(&$1 TSRMLS_CC); zend_do_begin_method_call(&$1 TSRMLS_CC); }
// function_call_parameter_list RPAREN
@@ -1118,7 +1291,11 @@
// | array_method_dereference { $$ = $1; zend_do_push_object(&$$ TSRMLS_CC); }
// | /* empty */ { $$.EA = ZEND_PARSED_MEMBER; }
//;
-//
+
+method_or_not(A) ::= . { A.EA = ZEND_PARSED_MEMBER; }
+method_or_not(A) ::= method(B). { A = B; zend_do_push_object(&A TSRMLS_CC); A.EA = ZEND_PARSED_METHOD_CALL; }
+method_or_not(A) ::= array_method_dereference(B). { A = B; zend_do_push_object(&A TSRMLS_CC); }
+
//variable_without_objects:
// reference_variable { $$ = $1; }
// | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); }
@@ -1146,25 +1323,27 @@
// | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$.EA = ZEND_PARSED_FUNCTION_CALL; }
// '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$4 TSRMLS_CC); }
//;
-//
+
+array_function_dereference_i(A) ::= function_call(B). { zend_do_begin_variable_parse(TSRMLS_C); A = B; A.EA = ZEND_PARSED_FUNCTION_CALL; }
+
+array_function_dereference(A) ::= array_function_dereference(B) LBRACKET dim_offset(C) RBRACKET. { fetch_array_dim(&A, &B, &C TSRMLS_CC); }
+array_function_dereference(A) ::= array_function_dereference_i(B) LBRACKET dim_offset(C) RBRACKET. { fetch_array_dim(&A, &B, &C TSRMLS_CC); }
+
//base_variable_with_function_calls:
// base_variable { $$ = $1; }
// | array_function_dereference { $$ = $1; }
// | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.EA = ZEND_PARSED_FUNCTION_CALL; }
//;
-//
base_variable_with_function_calls(A) ::= base_variable(B). { A = B; }
-//base_variable_with_function_calls(A) ::= array_function_dereference(B). { A = B; }
-//base_variable_with_function_calls(A) ::= function_call(B). { zend_do_begin_variable_parse(TSRMLS_C); A = B; A.EA = ZEND_PARSED_FUNCTION_CALL; }
+base_variable_with_function_calls(A) ::= array_function_dereference(B). { A = B; }
+base_variable_with_function_calls(A) ::= function_call(B). { zend_do_begin_variable_parse(TSRMLS_C); A = B; A.EA = ZEND_PARSED_FUNCTION_CALL; }
-//
//base_variable:
// reference_variable { $$ = $1; $$.EA = ZEND_PARSED_VARIABLE; }
// | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.EA = ZEND_PARSED_VARIABLE; }
// | static_member { $$ = $1; $$.EA = ZEND_PARSED_STATIC_MEMBER; }
//;
-//
base_variable(A) ::= reference_variable(B). { A = B; A.EA = ZEND_PARSED_VARIABLE; }
base_variable(A) ::= simple_indirect_reference(B) reference_variable(C). { zend_do_indirect_references(&A, &B, &C TSRMLS_CC); A.EA = ZEND_PARSED_VARIABLE; }
@@ -1312,6 +1491,9 @@
// | variable_class_name PAAMAYIM_NEKUDOTAYIM STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
//;
+class_constant(A) ::= class_name(B) PAAMAYIM_NEKUDOTAYIM STRING(C). { zend_do_fetch_constant(&A, &B, &C, ZEND_RT, 0 TSRMLS_CC); }
+class_constant(A) ::= variable_class_name(B) PAAMAYIM_NEKUDOTAYIM STRING(C). { zend_do_fetch_constant(&A, &B, &C, ZEND_RT, 0 TSRMLS_CC); }
+
// Just to the build works
todo ::= OPEN_TAG OPEN_TAG_WITH_ECHO ENCAPSED_AND_WHITESPACE CURLY_OPEN VARIABLE
DOLLAR_OPEN_CURLY_BRACES END_HEREDOC WHITESPACE COMMENT CLOSE_TAG DOC_COMMENT
Modified: php/php-src/branches/LEMON/Zend/zend_language_scanner.c
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_scanner.c 2010-07-08 15:56:03 UTC (rev 301089)
+++ php/php-src/branches/LEMON/Zend/zend_language_scanner.c 2010-07-08 16:28:38 UTC (rev 301090)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Thu Jul 8 10:31:08 2010 */
+/* Generated by re2c 0.13.5 on Thu Jul 8 13:15:03 2010 */
#line 1 "Zend/zend_language_scanner.l"
/*
+----------------------------------------------------------------------+
@@ -3189,7 +3189,7 @@
++YYCURSOR;
YYDEBUG(206, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2339 "Zend/zend_language_scanner.l"
+#line 2343 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -8582,7 +8582,7 @@
++YYCURSOR;
YYDEBUG(941, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2339 "Zend/zend_language_scanner.l"
+#line 2343 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -8685,6 +8685,6 @@
goto yy953;
}
}
-#line 2348 "Zend/zend_language_scanner.l"
+#line 2352 "Zend/zend_language_scanner.l"
}
Modified: php/php-src/branches/LEMON/Zend/zend_language_scanner.l
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_scanner.l 2010-07-08 15:56:03 UTC (rev 301089)
+++ php/php-src/branches/LEMON/Zend/zend_language_scanner.l 2010-07-08 16:28:38 UTC (rev 301090)
@@ -2336,6 +2336,10 @@
return T_DOLLAR;
}
+<ST_IN_SCRIPTING>'"' {
+ return T_QUOTE;
+}
+
<ST_IN_SCRIPTING,ST_VAR_OFFSET>{ANY_CHAR} {
if (YYCURSOR > YYLIMIT) {
return 0;
Modified: php/php-src/branches/LEMON/Zend/zend_language_scanner_defs.h
===================================================================
--- php/php-src/branches/LEMON/Zend/zend_language_scanner_defs.h 2010-07-08 15:56:03 UTC (rev 301089)
+++ php/php-src/branches/LEMON/Zend/zend_language_scanner_defs.h 2010-07-08 16:28:38 UTC (rev 301090)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Thu Jul 8 10:31:08 2010 */
+/* Generated by re2c 0.13.5 on Thu Jul 8 13:15:03 2010 */
#line 3 "Zend/zend_language_scanner_defs.h"
enum YYCONDTYPE {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php