private function parseScalarNode(Node\Scalar $scalar)
{
switch ($scalar->getType()) {
case 'Scalar_Encapsed':
$op = new Op\Expr\ConcatList($this->parseExprList($scalar->parts, self::MODE_READ), $this->mapAttributes($scalar));
$this->block->children[] = $op;
return $op->result;
case 'Scalar_DNumber':
case 'Scalar_LNumber':
case 'Scalar_String':
case 'Scalar_EncapsedStringPart':
return new Literal($scalar->value);
case 'Scalar_MagicConst_Class':
// TODO
return new Literal("__CLASS__");
case 'Scalar_MagicConst_Dir':
return new Literal(dirname($this->fileName));
case 'Scalar_MagicConst_File':
return new Literal($this->fileName);
case 'Scalar_MagicConst_Namespace':
// TODO
return new Literal("__NAMESPACE__");
case 'Scalar_MagicConst_Method':
// TODO
return new Literal("__METHOD__");
case 'Scalar_MagicConst_Function':
// TODO
return new Literal("__FUNCTION__");
default:
throw new \RuntimeException("Unknown how to deal with scalar type " . $scalar->getType());
}
}