parse method use stmt
This commit is contained in:
parent
a6cef6d7c3
commit
0c91b7e0cb
64
parser.y
64
parser.y
@ -239,6 +239,14 @@ func (n node) attribute(key string, value string) node {
|
|||||||
%type <node> class_const_list
|
%type <node> class_const_list
|
||||||
%type <node> class_const_decl
|
%type <node> class_const_decl
|
||||||
%type <node> method_modifiers
|
%type <node> method_modifiers
|
||||||
|
%type <node> name_list
|
||||||
|
%type <node> trait_adaptations
|
||||||
|
%type <node> trait_adaptation_list
|
||||||
|
%type <node> trait_adaptation
|
||||||
|
%type <node> trait_precedence
|
||||||
|
%type <node> trait_alias
|
||||||
|
%type <node> trait_method_reference
|
||||||
|
%type <node> absolute_trait_method_reference
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
@ -264,8 +272,8 @@ semi_reserved:
|
|||||||
;
|
;
|
||||||
|
|
||||||
identifier:
|
identifier:
|
||||||
T_STRING { $$ = Node("identifier") }
|
T_STRING { $$ = Node("identifier").attribute("value", $1) }
|
||||||
| semi_reserved { $$ = Node("reserved") }
|
| semi_reserved { $$ = Node("identifier").attribute("value", "reserved") }
|
||||||
;
|
;
|
||||||
|
|
||||||
namespace_name_parts:
|
namespace_name_parts:
|
||||||
@ -590,8 +598,51 @@ class_statement_list:
|
|||||||
class_statement:
|
class_statement:
|
||||||
variable_modifiers property_list ';' { $$ = $2.append($1) }
|
variable_modifiers property_list ';' { $$ = $2.append($1) }
|
||||||
| method_modifiers T_CONST class_const_list ';' { $$ = $3.append($1); }
|
| method_modifiers T_CONST class_const_list ';' { $$ = $3.append($1); }
|
||||||
|
| T_USE name_list trait_adaptations { $$ = Node("Use").append($2).append($3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
name_list:
|
||||||
|
name { $$ = Node("NameList").append($1) }
|
||||||
|
| name_list ',' name { $$ = $1.append($3) }
|
||||||
|
;
|
||||||
|
|
||||||
|
trait_adaptations:
|
||||||
|
';' { $$ = Node(""); }
|
||||||
|
| '{' '}' { $$ = Node(""); }
|
||||||
|
| '{' trait_adaptation_list '}' { $$ = $2; }
|
||||||
|
;
|
||||||
|
|
||||||
|
trait_adaptation_list:
|
||||||
|
trait_adaptation { $$ = Node("TraitAdaptionList").append($1) }
|
||||||
|
| trait_adaptation_list trait_adaptation { $$ = $1.append($2) }
|
||||||
|
;
|
||||||
|
|
||||||
|
trait_adaptation:
|
||||||
|
trait_precedence ';' { $$ = $1; }
|
||||||
|
| trait_alias ';' { $$ = $1; }
|
||||||
|
;
|
||||||
|
|
||||||
|
trait_precedence:
|
||||||
|
absolute_trait_method_reference T_INSTEADOF name_list
|
||||||
|
{ $$ = Node("TraitPrecedence").append($1).append($3) }
|
||||||
|
;
|
||||||
|
|
||||||
|
trait_alias:
|
||||||
|
trait_method_reference T_AS T_STRING { $$ = $1.append(Node("as").attribute("value", $3)); }
|
||||||
|
| trait_method_reference T_AS reserved_non_modifiers
|
||||||
|
{ $$ = $1.append(Node("as").append(Node("reservedNonModifiers"))); }
|
||||||
|
| trait_method_reference T_AS member_modifier identifier
|
||||||
|
{ $$ = $1.append($3).append($4); }
|
||||||
|
| trait_method_reference T_AS member_modifier { $$ = $1.append($3); }
|
||||||
|
;
|
||||||
|
trait_method_reference:
|
||||||
|
identifier { $$ = Node("TraitMethodRef").append($1); }
|
||||||
|
| absolute_trait_method_reference { $$ = $1; }
|
||||||
|
;
|
||||||
|
|
||||||
|
absolute_trait_method_reference:
|
||||||
|
name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = Node("TraitMethodRef").append($1).append($3) }
|
||||||
|
|
||||||
variable_modifiers:
|
variable_modifiers:
|
||||||
non_empty_member_modifiers { $$ = $1; }
|
non_empty_member_modifiers { $$ = $1; }
|
||||||
| T_VAR { $$ = Node("VarMemberModifier") }
|
| T_VAR { $$ = Node("VarMemberModifier") }
|
||||||
@ -815,8 +866,13 @@ simple_variable:
|
|||||||
const src = `<?php
|
const src = `<?php
|
||||||
|
|
||||||
abstract class test {
|
abstract class test {
|
||||||
public static $a ,$b = $c;
|
use \test\tt, tt {
|
||||||
private static const TEST = $a, TEST2 = $b;
|
tt::test insteadof test;
|
||||||
|
\test\tt::test as include;
|
||||||
|
\test\tt::test as public include;
|
||||||
|
\test\tt::test as public private;
|
||||||
|
\test\tt::test as private somestring;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
`
|
`
|
||||||
|
Loading…
Reference in New Issue
Block a user