php5 syntax
This commit is contained in:
parent
f1908571dd
commit
1d4e52ebc5
@ -5,13 +5,15 @@ import "github.com/z7zmey/php-parser/walker"
|
|||||||
// Argument node
|
// Argument node
|
||||||
type Argument struct {
|
type Argument struct {
|
||||||
Variadic bool // if ... before variable
|
Variadic bool // if ... before variable
|
||||||
|
IsReference bool // if & before variable
|
||||||
Expr Node // Exression
|
Expr Node // Exression
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewArgument node constuctor
|
// NewArgument node constuctor
|
||||||
func NewArgument(Expression Node, Variadic bool) *Argument {
|
func NewArgument(Expression Node, Variadic bool, IsReference bool) *Argument {
|
||||||
return &Argument{
|
return &Argument{
|
||||||
Variadic,
|
Variadic,
|
||||||
|
IsReference,
|
||||||
Expression,
|
Expression,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -20,6 +22,7 @@ func NewArgument(Expression Node, Variadic bool) *Argument {
|
|||||||
func (n *Argument) Attributes() map[string]interface{} {
|
func (n *Argument) Attributes() map[string]interface{} {
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
"Variadic": n.Variadic,
|
"Variadic": n.Variadic,
|
||||||
|
"IsReference": n.IsReference,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1018
php5/php5.go
1018
php5/php5.go
File diff suppressed because it is too large
Load Diff
114
php5/php5.y
114
php5/php5.y
@ -208,7 +208,7 @@ import (
|
|||||||
%type <node> else_single new_else_single while_statement for_statement unset_variable foreach_statement declare_statement
|
%type <node> else_single new_else_single while_statement for_statement unset_variable foreach_statement declare_statement
|
||||||
%type <node> finally_statement additional_catch unticked_function_declaration_statement unticked_class_declaration_statement
|
%type <node> finally_statement additional_catch unticked_function_declaration_statement unticked_class_declaration_statement
|
||||||
%type <node> optional_class_type parameter class_entry_type extends_from class_statement class_constant_declaration
|
%type <node> optional_class_type parameter class_entry_type extends_from class_statement class_constant_declaration
|
||||||
%type <node> trait_use_statement
|
%type <node> trait_use_statement function_call_parameter
|
||||||
|
|
||||||
%type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations
|
%type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations
|
||||||
%type <list> inner_statement_list global_var_list static_var_list encaps_list isset_variables non_empty_array_pair_list
|
%type <list> inner_statement_list global_var_list static_var_list encaps_list isset_variables non_empty_array_pair_list
|
||||||
@ -216,7 +216,7 @@ import (
|
|||||||
%type <list> for_expr case_list echo_expr_list unset_variables declare_list catch_statement additional_catches
|
%type <list> for_expr case_list echo_expr_list unset_variables declare_list catch_statement additional_catches
|
||||||
%type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list implements_list
|
%type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list implements_list
|
||||||
%type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration interface_extends_list
|
%type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration interface_extends_list
|
||||||
%type <list> interface_list
|
%type <list> interface_list non_empty_function_call_parameter_list
|
||||||
|
|
||||||
|
|
||||||
%type <simpleIndirectReference> simple_indirect_reference
|
%type <simpleIndirectReference> simple_indirect_reference
|
||||||
@ -1259,21 +1259,51 @@ optional_class_type:
|
|||||||
function_call_parameter_list:
|
function_call_parameter_list:
|
||||||
'(' ')'
|
'(' ')'
|
||||||
{ $$ = &nodesWithEndToken{[]node.Node{}, $2} }
|
{ $$ = &nodesWithEndToken{[]node.Node{}, $2} }
|
||||||
| '(' non_empty_function_call_parameter_list ')' { }
|
| '(' non_empty_function_call_parameter_list ')'
|
||||||
| '(' yield_expr ')' { }
|
{ $$ = &nodesWithEndToken{$2, $3} }
|
||||||
|
| '(' yield_expr ')'
|
||||||
|
{
|
||||||
|
arg := node.NewArgument($2, false, false)
|
||||||
|
positions.AddPosition(arg, positionBuilder.NewNodePosition($2))
|
||||||
|
comments.AddComments(arg, comments[$2])
|
||||||
|
|
||||||
|
$$ = &nodesWithEndToken{[]node.Node{arg}, $3}
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
non_empty_function_call_parameter_list:
|
non_empty_function_call_parameter_list:
|
||||||
function_call_parameter
|
function_call_parameter
|
||||||
|
{ $$ = []node.Node{$1} }
|
||||||
| non_empty_function_call_parameter_list ',' function_call_parameter
|
| non_empty_function_call_parameter_list ',' function_call_parameter
|
||||||
|
{ $$ = append($1, $3) }
|
||||||
;
|
;
|
||||||
|
|
||||||
function_call_parameter:
|
function_call_parameter:
|
||||||
expr_without_variable { }
|
expr_without_variable
|
||||||
| variable { }
|
{
|
||||||
| '&' w_variable { }
|
$$ = node.NewArgument($1, false, false)
|
||||||
| T_ELLIPSIS expr { }
|
positions.AddPosition($$, positionBuilder.NewNodePosition($1))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| variable
|
||||||
|
{
|
||||||
|
$$ = node.NewArgument($1, false, false)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodePosition($1))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| '&' w_variable
|
||||||
|
{
|
||||||
|
$$ = node.NewArgument($2, false, true)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodePosition($2))
|
||||||
|
comments.AddComments($$, $1.Comments())
|
||||||
|
}
|
||||||
|
| T_ELLIPSIS expr
|
||||||
|
{
|
||||||
|
$$ = node.NewArgument($2, true, false)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
||||||
|
comments.AddComments($$, $1.Comments())
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
global_var_list:
|
global_var_list:
|
||||||
@ -1799,14 +1829,66 @@ lexical_var_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
function_call:
|
function_call:
|
||||||
namespace_name function_call_parameter_list { }
|
namespace_name function_call_parameter_list
|
||||||
| T_NAMESPACE T_NS_SEPARATOR namespace_name function_call_parameter_list { }
|
{
|
||||||
| T_NS_SEPARATOR namespace_name function_call_parameter_list { }
|
name := name.NewName($1)
|
||||||
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list { }
|
positions.AddPosition(name, positionBuilder.NewNodeListPosition($1))
|
||||||
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list { }
|
comments.AddComments(name, ListGetFirstNodeComments($1))
|
||||||
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list { }
|
|
||||||
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list { }
|
$$ = expr.NewFunctionCall(name, $2.nodes)
|
||||||
| variable_without_objects function_call_parameter_list { }
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition(name, $2.endToken))
|
||||||
|
comments.AddComments($$, comments[name])
|
||||||
|
}
|
||||||
|
| T_NAMESPACE T_NS_SEPARATOR namespace_name function_call_parameter_list
|
||||||
|
{
|
||||||
|
funcName := name.NewRelative($3)
|
||||||
|
positions.AddPosition(funcName, positionBuilder.NewTokenNodeListPosition($1, $3))
|
||||||
|
comments.AddComments(funcName, $1.Comments())
|
||||||
|
|
||||||
|
$$ = expr.NewFunctionCall(funcName, $4.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition(funcName, $4.endToken))
|
||||||
|
comments.AddComments($$, comments[funcName])
|
||||||
|
}
|
||||||
|
| T_NS_SEPARATOR namespace_name function_call_parameter_list
|
||||||
|
{
|
||||||
|
funcName := name.NewFullyQualified($2)
|
||||||
|
positions.AddPosition(funcName, positionBuilder.NewTokenNodeListPosition($1, $2))
|
||||||
|
comments.AddComments(funcName, $1.Comments())
|
||||||
|
|
||||||
|
$$ = expr.NewFunctionCall(funcName, $3.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition(funcName, $3.endToken))
|
||||||
|
comments.AddComments($$, comments[funcName])
|
||||||
|
}
|
||||||
|
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list
|
||||||
|
{
|
||||||
|
$$ = expr.NewStaticCall($1, $3, $4.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $4.endToken))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list
|
||||||
|
{
|
||||||
|
$$ = expr.NewStaticCall($1, $3, $4.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $4.endToken))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list
|
||||||
|
{
|
||||||
|
$$ = expr.NewStaticCall($1, $3, $4.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $4.endToken))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list
|
||||||
|
{
|
||||||
|
$$ = expr.NewStaticCall($1, $3, $4.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $4.endToken))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
|
| variable_without_objects function_call_parameter_list
|
||||||
|
{
|
||||||
|
$$ = expr.NewFunctionCall($1, $2.nodes)
|
||||||
|
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $2.endToken))
|
||||||
|
comments.AddComments($$, comments[$1])
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
class_name:
|
class_name:
|
||||||
|
@ -3660,7 +3660,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:1094
|
//line php7/php7.y:1094
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewArgument(yyDollar[1].node, false)
|
yyVAL.node = node.NewArgument(yyDollar[1].node, false, false)
|
||||||
positions.AddPosition(yyVAL.node, positionBuilder.NewNodePosition(yyDollar[1].node))
|
positions.AddPosition(yyVAL.node, positionBuilder.NewNodePosition(yyDollar[1].node))
|
||||||
comments.AddComments(yyVAL.node, comments[yyDollar[1].node])
|
comments.AddComments(yyVAL.node, comments[yyDollar[1].node])
|
||||||
}
|
}
|
||||||
@ -3668,7 +3668,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:1100
|
//line php7/php7.y:1100
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewArgument(yyDollar[2].node, true)
|
yyVAL.node = node.NewArgument(yyDollar[2].node, true, false)
|
||||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||||
comments.AddComments(yyVAL.node, yyDollar[1].token.Comments())
|
comments.AddComments(yyVAL.node, yyDollar[1].token.Comments())
|
||||||
}
|
}
|
||||||
|
@ -1092,13 +1092,13 @@ non_empty_argument_list:
|
|||||||
argument:
|
argument:
|
||||||
expr
|
expr
|
||||||
{
|
{
|
||||||
$$ = node.NewArgument($1, false)
|
$$ = node.NewArgument($1, false, false)
|
||||||
positions.AddPosition($$, positionBuilder.NewNodePosition($1))
|
positions.AddPosition($$, positionBuilder.NewNodePosition($1))
|
||||||
comments.AddComments($$, comments[$1])
|
comments.AddComments($$, comments[$1])
|
||||||
}
|
}
|
||||||
| T_ELLIPSIS expr
|
| T_ELLIPSIS expr
|
||||||
{
|
{
|
||||||
$$ = node.NewArgument($2, true)
|
$$ = node.NewArgument($2, true, false)
|
||||||
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
||||||
comments.AddComments($$, $1.Comments())
|
comments.AddComments($$, $1.Comments())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user