property_fetch static_property_fetch nodes
This commit is contained in:
		
							parent
							
								
									a73b9a9478
								
							
						
					
					
						commit
						40a27c6131
					
				
							
								
								
									
										36
									
								
								node/expr/property_fetch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								node/expr/property_fetch.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package expr | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/node" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type PropertyFetch struct { | ||||||
|  | 	node.SimpleNode | ||||||
|  | 	variable node.Node | ||||||
|  | 	name     node.Node | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewPropertyFetch(variable node.Node, name node.Node) node.Node { | ||||||
|  | 	return PropertyFetch{ | ||||||
|  | 		node.SimpleNode{Name: "PropertyFetch", Attributes: make(map[string]string)}, | ||||||
|  | 		variable, | ||||||
|  | 		name, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (n PropertyFetch) Print(out io.Writer, indent string) { | ||||||
|  | 	fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) | ||||||
|  | 
 | ||||||
|  | 	if n.variable != nil { | ||||||
|  | 		fmt.Fprintf(out, "\n%vvariable:", indent+"  ") | ||||||
|  | 		n.variable.Print(out, indent+"    ") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if n.name != nil { | ||||||
|  | 		fmt.Fprintf(out, "\n%vname:", indent+"  ") | ||||||
|  | 		n.name.Print(out, indent+"    ") | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								node/expr/static_property_fetch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								node/expr/static_property_fetch.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package expr | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/node" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type StaticPropertyFetch struct { | ||||||
|  | 	node.SimpleNode | ||||||
|  | 	class node.Node | ||||||
|  | 	name  node.Node | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewStaticPropertyFetch(class node.Node, name node.Node) node.Node { | ||||||
|  | 	return StaticPropertyFetch{ | ||||||
|  | 		node.SimpleNode{Name: "StaticPropertyFetch", Attributes: make(map[string]string)}, | ||||||
|  | 		class, | ||||||
|  | 		name, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (n StaticPropertyFetch) Print(out io.Writer, indent string) { | ||||||
|  | 	fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) | ||||||
|  | 
 | ||||||
|  | 	if n.class != nil { | ||||||
|  | 		fmt.Fprintf(out, "\n%vclass:", indent+"  ") | ||||||
|  | 		n.class.Print(out, indent+"    ") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if n.name != nil { | ||||||
|  | 		fmt.Fprintf(out, "\n%vname:", indent+"  ") | ||||||
|  | 		n.name.Print(out, indent+"    ") | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								node/identifier.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								node/identifier.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | package node | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"github.com/z7zmey/php-parser/token" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Identifier struct { | ||||||
|  | 	SimpleNode | ||||||
|  | 	name token.Token | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewIdentifier(name token.Token) Node { | ||||||
|  | 	return Identifier{ | ||||||
|  | 		SimpleNode{Name: "Identifier", Attributes: make(map[string]string)}, | ||||||
|  | 		name, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (n Identifier) Print(out io.Writer, indent string) { | ||||||
|  | 	fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) | ||||||
|  | 	fmt.Fprintf(out, "\n%vname: %q", indent+"  ", n.name.Value) | ||||||
|  | } | ||||||
| @ -4641,7 +4641,7 @@ yydefault: | |||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1036 | 		//line parser/parser.y:1036 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("Property").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 434: | 	case 434: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| @ -4665,13 +4665,13 @@ yydefault: | |||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1047 | 		//line parser/parser.y:1047 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("StaticProp").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 438: | 	case 438: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1049 | 		//line parser/parser.y:1049 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("StaticProp").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 439: | 	case 439: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| @ -4695,19 +4695,19 @@ yydefault: | |||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1056 | 		//line parser/parser.y:1056 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("Property").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 443: | 	case 443: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1058 | 		//line parser/parser.y:1058 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("StaticProperty").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 444: | 	case 444: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1060 | 		//line parser/parser.y:1060 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("StaticProperty").Append(yyDollar[1].node).Append(yyDollar[3].node) | 			yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) | ||||||
| 		} | 		} | ||||||
| 	case 445: | 	case 445: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| @ -4731,7 +4731,7 @@ yydefault: | |||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		//line parser/parser.y:1070 | 		//line parser/parser.y:1070 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("PropertyName").Attribute("value", yyDollar[1].token.String()) | 			yyVAL.node = node.NewIdentifier(yyDollar[1].token) | ||||||
| 		} | 		} | ||||||
| 	case 449: | 	case 449: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| @ -4859,7 +4859,7 @@ yydefault: | |||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		//line parser/parser.y:1126 | 		//line parser/parser.y:1126 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String()).Append(node.NewSimpleNode("property").Attribute("value", yyDollar[3].token.String())) | 			yyVAL.node = expr.NewPropertyFetch(expr.NewVariable(yyDollar[1].token), node.NewIdentifier(yyDollar[3].token)) | ||||||
| 		} | 		} | ||||||
| 	case 469: | 	case 469: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
|  | |||||||
| @ -1033,7 +1033,7 @@ callable_variable: | |||||||
| variable: | variable: | ||||||
|         callable_variable                               { $$ = $1; } |         callable_variable                               { $$ = $1; } | ||||||
|     |   static_member                                   { $$ = $1; } |     |   static_member                                   { $$ = $1; } | ||||||
|     |   dereferencable T_OBJECT_OPERATOR property_name  { $$ = node.NewSimpleNode("Property").Append($1).Append($3) } |     |   dereferencable T_OBJECT_OPERATOR property_name  { $$ = expr.NewPropertyFetch($1, $3) } | ||||||
| ; | ; | ||||||
| 
 | 
 | ||||||
| simple_variable: | simple_variable: | ||||||
| @ -1044,20 +1044,20 @@ simple_variable: | |||||||
| 
 | 
 | ||||||
| static_member: | static_member: | ||||||
|         class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable |         class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable | ||||||
|                                                         { $$ = node.NewSimpleNode("StaticProp").Append($1).Append($3) } |                                                         { $$ = expr.NewStaticPropertyFetch($1, $3) } | ||||||
|     |   variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable |     |   variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable | ||||||
|                                                         { $$ = node.NewSimpleNode("StaticProp").Append($1).Append($3) } |                                                         { $$ = expr.NewStaticPropertyFetch($1, $3) } | ||||||
| ; | ; | ||||||
| 
 | 
 | ||||||
| new_variable: | new_variable: | ||||||
|         simple_variable                                 { $$ = $1 } |         simple_variable                                 { $$ = $1 } | ||||||
|     |   new_variable '[' optional_expr ']'              { $$ = expr.NewArrayDimFetch($1, $3) } |     |   new_variable '[' optional_expr ']'              { $$ = expr.NewArrayDimFetch($1, $3) } | ||||||
|     |   new_variable '{' expr '}'                       { $$ = expr.NewArrayDimFetch($1, $3) } |     |   new_variable '{' expr '}'                       { $$ = expr.NewArrayDimFetch($1, $3) } | ||||||
|     |   new_variable T_OBJECT_OPERATOR property_name    { $$ = node.NewSimpleNode("Property").Append($1).Append($3) } |     |   new_variable T_OBJECT_OPERATOR property_name    { $$ = expr.NewPropertyFetch($1, $3) } | ||||||
|     |   class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable |     |   class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable | ||||||
|                                                         { $$ = node.NewSimpleNode("StaticProperty").Append($1).Append($3) } |                                                         { $$ = expr.NewStaticPropertyFetch($1, $3) } | ||||||
|     |   new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable |     |   new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable | ||||||
|                                                         { $$ = node.NewSimpleNode("StaticProperty").Append($1).Append($3) } |                                                         { $$ = expr.NewStaticPropertyFetch($1, $3) } | ||||||
| ; | ; | ||||||
| 
 | 
 | ||||||
| member_name: | member_name: | ||||||
| @ -1067,7 +1067,7 @@ member_name: | |||||||
| ; | ; | ||||||
| 
 | 
 | ||||||
| property_name: | property_name: | ||||||
|         T_STRING                                        { $$ = node.NewSimpleNode("PropertyName").Attribute("value", $1.String()) } |         T_STRING                                        { $$ = node.NewIdentifier($1) } | ||||||
|     |   '{' expr '}'                                    { $$ = $2; } |     |   '{' expr '}'                                    { $$ = $2; } | ||||||
|     |   simple_variable                                 { $$ = $1 } |     |   simple_variable                                 { $$ = $1 } | ||||||
| ; | ; | ||||||
| @ -1123,7 +1123,7 @@ encaps_list: | |||||||
| encaps_var: | encaps_var: | ||||||
|         T_VARIABLE                                      { $$ = node.NewSimpleNode("Variable").Attribute("value", $1.String()) } |         T_VARIABLE                                      { $$ = node.NewSimpleNode("Variable").Attribute("value", $1.String()) } | ||||||
|     |   T_VARIABLE '[' encaps_var_offset ']'            { $$ = expr.NewArrayDimFetch(expr.NewVariable($1), $3) } |     |   T_VARIABLE '[' encaps_var_offset ']'            { $$ = expr.NewArrayDimFetch(expr.NewVariable($1), $3) } | ||||||
|     |   T_VARIABLE T_OBJECT_OPERATOR T_STRING           { $$ = node.NewSimpleNode("Variable").Attribute("value", $1.String()).Append(node.NewSimpleNode("property").Attribute("value", $3.String())) } |     |   T_VARIABLE T_OBJECT_OPERATOR T_STRING           { $$ = expr.NewPropertyFetch(expr.NewVariable($1), node.NewIdentifier($3)) } | ||||||
|     |   T_DOLLAR_OPEN_CURLY_BRACES expr '}'             { $$ = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append($2)) } |     |   T_DOLLAR_OPEN_CURLY_BRACES expr '}'             { $$ = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append($2)) } | ||||||
|     |   T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = node.NewSimpleNode("Variable").Attribute("value", $2.String()) } |     |   T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = node.NewSimpleNode("Variable").Attribute("value", $2.String()) } | ||||||
|     |   T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' |     |   T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user