TwigNodeThrow.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. /**
  3. * @package Grav\Common\Twig
  4. *
  5. * @copyright Copyright (c) 2015 - 2021 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Twig\Node;
  9. use LogicException;
  10. use Twig\Compiler;
  11. use Twig\Node\Node;
  12. /**
  13. * Class TwigNodeThrow
  14. * @package Grav\Common\Twig\Node
  15. */
  16. class TwigNodeThrow extends Node
  17. {
  18. /**
  19. * TwigNodeThrow constructor.
  20. * @param int $code
  21. * @param Node $message
  22. * @param int $lineno
  23. * @param string|null $tag
  24. */
  25. public function __construct($code, Node $message, $lineno = 0, $tag = null)
  26. {
  27. parent::__construct(['message' => $message], ['code' => $code], $lineno, $tag);
  28. }
  29. /**
  30. * Compiles the node to PHP.
  31. *
  32. * @param Compiler $compiler A Twig Compiler instance
  33. * @return void
  34. * @throws LogicException
  35. */
  36. public function compile(Compiler $compiler): void
  37. {
  38. $compiler->addDebugInfo($this);
  39. $compiler
  40. ->write('throw new \Grav\Common\Twig\Exception\TwigException(')
  41. ->subcompile($this->getNode('message'))
  42. ->write(', ')
  43. ->write($this->getAttribute('code') ?: 500)
  44. ->write(");\n");
  45. }
  46. }