Skip to content

Instantly share code, notes, and snippets.

@zonuexe
Created July 22, 2017 13:15
Show Gist options
  • Save zonuexe/0962e71f5e2a149365971fc6c32a0737 to your computer and use it in GitHub Desktop.
Save zonuexe/0962e71f5e2a149365971fc6c32a0737 to your computer and use it in GitHub Desktop.
PHPにihuとerusuを追加するやつ
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 2c508a59fe..47d2ff5af9 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -82,8 +82,11 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%nonassoc T_NEW T_CLONE
%left T_NOELSE
%left T_ELSEIF
+%left T_ERUSUIHU
%left T_ELSE
+%left T_ERUSU
%left T_ENDIF
+%left T_ENDIHU
%right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
%token <ast> T_LNUMBER "integer number (T_LNUMBER)"
@@ -144,9 +147,13 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%token T_CLONE "clone (T_CLONE)"
%token T_EXIT "exit (T_EXIT)"
%token T_IF "if (T_IF)"
+%token T_IHU "ihu (T_IHU)"
%token T_ELSEIF "elseif (T_ELSEIF)"
+%token T_ERUSUIHU "erusuihu (T_ERUSUIHU)"
%token T_ELSE "else (T_ELSE)"
+%token T_ERUSU "erus (T_ERUS)"
%token T_ENDIF "endif (T_ENDIF)"
+%token T_ENDIHU "endihu (T_ENDIHU)"
%token T_ECHO "echo (T_ECHO)"
%token T_DO "do (T_DO)"
%token T_WHILE "while (T_WHILE)"
@@ -268,7 +275,7 @@ start:
reserved_non_modifiers:
T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
- | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE | T_ENDWHILE
+ | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_IHU | T_ELSEIF | T_ERUSUIHU | T_ELSE | T_ERUSU | T_ENDIF | T_ENDIHU |T_ECHO | T_DO | T_WHILE | T_ENDWHILE
| T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH | T_FINALLY
| T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO
| T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT | T_BREAK
@@ -599,31 +606,49 @@ if_stmt_without_else:
T_IF '(' expr ')' statement
{ $$ = zend_ast_create_list(1, ZEND_AST_IF,
zend_ast_create(ZEND_AST_IF_ELEM, $3, $5)); }
+ | T_IHU '(' expr ')' statement
+ { $$ = zend_ast_create_list(1, ZEND_AST_IF,
+ zend_ast_create(ZEND_AST_IF_ELEM, $3, $5)); }
| if_stmt_without_else T_ELSEIF '(' expr ')' statement
{ $$ = zend_ast_list_add($1,
zend_ast_create(ZEND_AST_IF_ELEM, $4, $6)); }
+ | if_stmt_without_else T_ERUSUIHU '(' expr ')' statement
+ { $$ = zend_ast_list_add($1,
+ zend_ast_create(ZEND_AST_IF_ELEM, $4, $6)); }
;
if_stmt:
if_stmt_without_else %prec T_NOELSE { $$ = $1; }
| if_stmt_without_else T_ELSE statement
{ $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_IF_ELEM, NULL, $3)); }
+ | if_stmt_without_else T_ERUSU statement
+ { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_IF_ELEM, NULL, $3)); }
;
alt_if_stmt_without_else:
T_IF '(' expr ')' ':' inner_statement_list
{ $$ = zend_ast_create_list(1, ZEND_AST_IF,
zend_ast_create(ZEND_AST_IF_ELEM, $3, $6)); }
+ | T_IHU '(' expr ')' ':' inner_statement_list
+ { $$ = zend_ast_create_list(1, ZEND_AST_IF,
+ zend_ast_create(ZEND_AST_IF_ELEM, $3, $6)); }
| alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list
{ $$ = zend_ast_list_add($1,
zend_ast_create(ZEND_AST_IF_ELEM, $4, $7)); }
+ | alt_if_stmt_without_else T_ERUSUIHU '(' expr ')' ':' inner_statement_list
+ { $$ = zend_ast_list_add($1,
+ zend_ast_create(ZEND_AST_IF_ELEM, $4, $7)); }
;
alt_if_stmt:
alt_if_stmt_without_else T_ENDIF ';' { $$ = $1; }
+ | alt_if_stmt_without_else T_ENDIHU ';' { $$ = $1; }
| alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';'
{ $$ = zend_ast_list_add($1,
zend_ast_create(ZEND_AST_IF_ELEM, NULL, $4)); }
+ | alt_if_stmt_without_else T_ERUSU ':' inner_statement_list T_ENDIHU ';'
+ { $$ = zend_ast_list_add($1,
+ zend_ast_create(ZEND_AST_IF_ELEM, NULL, $4)); }
;
parameter_list:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment