function Parser::parseTemplateLiteral
Parses a template literal
Parameters
bool $tagged True if the template is tagged:
Return value
Node\Literal|null
2 calls to Parser::parseTemplateLiteral()
- Parser::parseLeftHandSideExpression in vendor/
mck89/ peast/ lib/ Peast/ Syntax/ Parser.php - Parses a left hand side expression
- Parser::parsePrimaryExpression in vendor/
mck89/ peast/ lib/ Peast/ Syntax/ Parser.php - Parses a primary expression
File
-
vendor/
mck89/ peast/ lib/ Peast/ Syntax/ Parser.php, line 3882
Class
- Parser
- Parser class
Namespace
Peast\SyntaxCode
protected function parseTemplateLiteral($tagged = false) {
$token = $this->scanner
->getToken();
if (!$token || $token->type !== Token::TYPE_TEMPLATE) {
return null;
}
//Do not parse templates parts
$val = $token->value;
if ($val[0] !== "`") {
return null;
}
$quasis = $expressions = array();
$valid = false;
do {
$this->scanner
->consumeToken();
$val = $token->value;
$this->checkInvalidEscapeSequences($val, false, true, $tagged);
$lastChar = substr($val, -1);
$quasi = $this->createNode("TemplateElement", $token);
$quasi->setRawValue($val);
if ($lastChar === "`") {
$quasi->setTail(true);
$quasis[] = $this->completeNode($quasi);
$valid = true;
break;
}
else {
$quasis[] = $this->completeNode($quasi);
$exp = $this->isolateContext(array(
"allowIn" => true,
), "parseExpression");
if ($exp) {
$expressions[] = $exp;
}
else {
$valid = false;
break;
}
}
$token = $this->scanner
->getToken();
} while ($token && $token->type === Token::TYPE_TEMPLATE);
if ($valid) {
$node = $this->createNode("TemplateLiteral", $quasis[0]);
$node->setQuasis($quasis);
$node->setExpressions($expressions);
return $this->completeNode($node);
}
$this->error();
}