Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
parseMultitargetExpression example
final
class
DumpTokenParser
extends
AbstractTokenParser
{
public
function
parse
(
Token
$token
)
: Node
{
$values
= null;
if
(
!
$this
->parser->
getStream
(
)
->
test
(
Token::BLOCK_END_TYPE
)
)
{
$values
=
$this
->parser->
getExpressionParser
(
)
->
parseMultitargetExpression
(
)
;
}
$this
->parser->
getStream
(
)
->
expect
(
Token::BLOCK_END_TYPE
)
;
return
new
DumpNode
(
$this
->parser->
getVarName
(
)
,
$values
,
$token
->
getLine
(
)
,
$this
->
getTag
(
)
)
;
}
public
function
getTag
(
)
: string
{
return
'dump';
}
}
final
class
SetTokenParser
extends
AbstractTokenParser
{
public
function
parse
(
Token
$token
)
: Node
{
$lineno
=
$token
->
getLine
(
)
;
$stream
=
$this
->parser->
getStream
(
)
;
$names
=
$this
->parser->
getExpressionParser
(
)
->
parseAssignmentExpression
(
)
;
$capture
= false;
if
(
$stream
->
nextIf
(
/* Token::OPERATOR_TYPE */ 8, '='
)
)
{
$values
=
$this
->parser->
getExpressionParser
(
)
->
parseMultitargetExpression
(
)
;
$stream
->
expect
(
/* Token::BLOCK_END_TYPE */ 3
)
;
if
(
\
count
(
$names
)
!== \
count
(
$values
)
)
{
throw
new
SyntaxError
(
'When using set, you must have the same number of variables and assignments.',
$stream
->
getCurrent
(
)
->
getLine
(
)
,
$stream
->
getSourceContext
(
)
)
;
}
}
else
{
$capture
= true;
if
(
\
count
(
$names
)
> 1
)
{
throw
new
SyntaxError
(
'When using set with a block, you cannot have a multi-target.',
$stream
->
getCurrent
(
)
->
getLine
(
)
,
$stream
->
getSourceContext
(
)
)
;
}