2021-02-15 21:29:38 +01:00
< ? php
/**
2023-07-07 22:33:10 +02:00
* @ private
2021-02-15 21:29:38 +01:00
*/
class Less_Tree_Variable extends Less_Tree {
public $name ;
public $index ;
public $currentFileInfo ;
public $evaluating = false ;
public $type = 'Variable' ;
/**
* @ param string $name
*/
public function __construct ( $name , $index = null , $currentFileInfo = null ) {
$this -> name = $name ;
$this -> index = $index ;
$this -> currentFileInfo = $currentFileInfo ;
}
2023-07-07 22:33:10 +02:00
/**
* @ param Less_Environment $env
* @ return Less_Tree
* @ see less - 2.5 . 3. js #Ruleset.prototype.eval
*/
2021-02-15 21:29:38 +01:00
public function compile ( $env ) {
if ( $this -> name [ 1 ] === '@' ) {
$v = new Less_Tree_Variable ( substr ( $this -> name , 1 ), $this -> index + 1 , $this -> currentFileInfo );
2023-07-07 22:33:10 +02:00
// While some Less_Tree nodes have no 'value', we know these can't ocurr after a variable
// assignment (would have been a ParseError).
// TODO: Solve better (https://phabricator.wikimedia.org/T327082).
// @phan-suppress-next-line PhanUndeclaredProperty
2021-02-15 21:29:38 +01:00
$name = '@' . $v -> compile ( $env ) -> value ;
} else {
$name = $this -> name ;
}
if ( $this -> evaluating ) {
throw new Less_Exception_Compiler ( " Recursive variable definition for " . $name , null , $this -> index , $this -> currentFileInfo );
}
$this -> evaluating = true ;
foreach ( $env -> frames as $frame ) {
if ( $v = $frame -> variable ( $name ) ) {
$r = $v -> value -> compile ( $env );
$this -> evaluating = false ;
return $r ;
}
}
2023-07-07 22:33:10 +02:00
throw new Less_Exception_Compiler ( " variable " . $name . " is undefined in file " . $this -> currentFileInfo [ " filename " ], null , $this -> index , $this -> currentFileInfo );
2021-02-15 21:29:38 +01:00
}
}