1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaudeclare(strict_types=1); 4*37748cd8SNickeau 5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Atn\Actions; 6*37748cd8SNickeau 7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Comparison\Hasher; 8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Lexer; 9*37748cd8SNickeau 10*37748cd8SNickeaufinal class LexerModeAction implements LexerAction 11*37748cd8SNickeau{ 12*37748cd8SNickeau /** @var int */ 13*37748cd8SNickeau private $mode; 14*37748cd8SNickeau 15*37748cd8SNickeau /** 16*37748cd8SNickeau * Constructs a new `mode` action with the specified mode value. 17*37748cd8SNickeau * 18*37748cd8SNickeau * @param int $mode The mode value to pass to {@see Lexer::mode()}. 19*37748cd8SNickeau */ 20*37748cd8SNickeau public function __construct(int $mode) 21*37748cd8SNickeau { 22*37748cd8SNickeau $this->mode = $mode; 23*37748cd8SNickeau } 24*37748cd8SNickeau 25*37748cd8SNickeau /** 26*37748cd8SNickeau * Get the lexer mode this action should transition the lexer to. 27*37748cd8SNickeau * 28*37748cd8SNickeau * @return int The lexer mode for this `mode` command. 29*37748cd8SNickeau */ 30*37748cd8SNickeau public function getMode() : int 31*37748cd8SNickeau { 32*37748cd8SNickeau return $this->mode; 33*37748cd8SNickeau } 34*37748cd8SNickeau 35*37748cd8SNickeau /** 36*37748cd8SNickeau * {@inheritdoc} 37*37748cd8SNickeau * 38*37748cd8SNickeau * @return int This method returns {@see LexerActionType::MODE}. 39*37748cd8SNickeau */ 40*37748cd8SNickeau public function getActionType() : int 41*37748cd8SNickeau { 42*37748cd8SNickeau return LexerActionType::MODE; 43*37748cd8SNickeau } 44*37748cd8SNickeau 45*37748cd8SNickeau /** 46*37748cd8SNickeau * {@inheritdoc} 47*37748cd8SNickeau * 48*37748cd8SNickeau * @return bool This method returns `false`. 49*37748cd8SNickeau */ 50*37748cd8SNickeau public function isPositionDependent() : bool 51*37748cd8SNickeau { 52*37748cd8SNickeau return false; 53*37748cd8SNickeau } 54*37748cd8SNickeau 55*37748cd8SNickeau /** 56*37748cd8SNickeau * {@inheritdoc} 57*37748cd8SNickeau * 58*37748cd8SNickeau * This action is implemented by calling {@see Lexer::mode()} with the 59*37748cd8SNickeau * value provided by {@see LexerModeAction::getMode()}. 60*37748cd8SNickeau */ 61*37748cd8SNickeau public function execute(Lexer $lexer) : void 62*37748cd8SNickeau { 63*37748cd8SNickeau $lexer->mode($this->mode); 64*37748cd8SNickeau } 65*37748cd8SNickeau 66*37748cd8SNickeau public function hashCode() : int 67*37748cd8SNickeau { 68*37748cd8SNickeau return Hasher::hash($this->getActionType(), $this->mode); 69*37748cd8SNickeau } 70*37748cd8SNickeau 71*37748cd8SNickeau public function equals(object $other) : bool 72*37748cd8SNickeau { 73*37748cd8SNickeau if ($this === $other) { 74*37748cd8SNickeau return true; 75*37748cd8SNickeau } 76*37748cd8SNickeau 77*37748cd8SNickeau if (!$other instanceof self) { 78*37748cd8SNickeau return false; 79*37748cd8SNickeau } 80*37748cd8SNickeau 81*37748cd8SNickeau return $this->mode === $other->mode; 82*37748cd8SNickeau } 83*37748cd8SNickeau 84*37748cd8SNickeau public function __toString() : string 85*37748cd8SNickeau { 86*37748cd8SNickeau return \sprintf('mode(%d)', $this->mode); 87*37748cd8SNickeau } 88*37748cd8SNickeau} 89