Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
isMainScope example
final
class
ImportTokenParser
extends
AbstractTokenParser
{
public
function
parse
(
Token
$token
)
: Node
{
$macro
=
$this
->parser->
getExpressionParser
(
)
->
parseExpression
(
)
;
$this
->parser->
getStream
(
)
->
expect
(
/* Token::NAME_TYPE */ 5, 'as'
)
;
$var
=
new
AssignNameExpression
(
$this
->parser->
getStream
(
)
->
expect
(
/* Token::NAME_TYPE */ 5
)
->
getValue
(
)
,
$token
->
getLine
(
)
)
;
$this
->parser->
getStream
(
)
->
expect
(
/* Token::BLOCK_END_TYPE */ 3
)
;
$this
->parser->
addImportedSymbol
(
'template',
$var
->
getAttribute
(
'name'
)
)
;
return
new
ImportNode
(
$macro
,
$var
,
$token
->
getLine
(
)
,
$this
->
getTag
(
)
,
$this
->parser->
isMainScope
(
)
)
;
}
public
function
getTag
(
)
: string
{
return
'import';
}
}
$targets
[
$name
]
=
$alias
;
if
(
!
$stream
->
nextIf
(
/* Token::PUNCTUATION_TYPE */ 9, ','
)
)
{
break
;
}
}
while
(
true
)
;
$stream
->
expect
(
/* Token::BLOCK_END_TYPE */ 3
)
;
$var
=
new
AssignNameExpression
(
$this
->parser->
getVarName
(
)
,
$token
->
getLine
(
)
)
;
$node
=
new
ImportNode
(
$macro
,
$var
,
$token
->
getLine
(
)
,
$this
->
getTag
(
)
,
$this
->parser->
isMainScope
(
)
)
;
foreach
(
$targets
as
$name
=>
$alias
)
{
$this
->parser->
addImportedSymbol
(
'function',
$alias
, 'macro_'.
$name
,
$var
)
;
}
return
$node
;
}
public
function
getTag
(
)
: string
{
return
'from';
}
final
class
ExtendsTokenParser
extends
AbstractTokenParser
{
public
function
parse
(
Token
$token
)
: Node
{
$stream
=
$this
->parser->
getStream
(
)
;
if
(
$this
->parser->
peekBlockStack
(
)
)
{
throw
new
SyntaxError
(
'Cannot use "extend" in a block.',
$token
->
getLine
(
)
,
$stream
->
getSourceContext
(
)
)
;
}
elseif
(
!
$this
->parser->
isMainScope
(
)
)
{
throw
new
SyntaxError
(
'Cannot use "extend" in a macro.',
$token
->
getLine
(
)
,
$stream
->
getSourceContext
(
)
)
;
}
if
(
null !==
$this
->parser->
getParent
(
)
)
{
throw
new
SyntaxError
(
'Multiple extends tags are forbidden.',
$token
->
getLine
(
)
,
$stream
->
getSourceContext
(
)
)
;
}
$this
->parser->
setParent
(
$this
->parser->
getExpressionParser
(
)
->
parseExpression
(
)
)
;
$stream
->
expect
(
/* Token::BLOCK_END_TYPE */ 3
)
;
return
new
Node
(
)
;
}