Plural_Forms::execute( int $n ): int

In this article

Execute the plural form function.

Parameters

$nintrequired
Variable "n" to substitute.

Return

int Plural form value.

Source

public function execute( $n ) {
	$stack = array();
	$i     = 0;
	$total = count( $this->tokens );
	while ( $i < $total ) {
		$next = $this->tokens[ $i ];
		++$i;
		if ( 'var' === $next[0] ) {
			$stack[] = $n;
			continue;
		} elseif ( 'value' === $next[0] ) {
			$stack[] = $next[1];
			continue;
		}

		// Only operators left.
		switch ( $next[1] ) {
			case '%':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 % $v2;
				break;

			case '||':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 || $v2;
				break;

			case '&&':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 && $v2;
				break;

			case '<':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 < $v2;
				break;

			case '<=':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 <= $v2;
				break;

			case '>':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 > $v2;
				break;

			case '>=':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 >= $v2;
				break;

			case '!=':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 !== $v2;
				break;

			case '==':
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 === $v2;
				break;

			case '?:':
				$v3      = array_pop( $stack );
				$v2      = array_pop( $stack );
				$v1      = array_pop( $stack );
				$stack[] = $v1 ? $v2 : $v3;
				break;

			default:
				throw new Exception( sprintf( 'Unknown operator "%s"', $next[1] ) );
		}
	}

	if ( count( $stack ) !== 1 ) {
		throw new Exception( 'Too many values remaining on the stack' );
	}

	return (int) $stack[0];
}

Changelog

VersionDescription
4.9.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.