Viewing file: Condition.php (1.46 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/** * Condition * * @package Less * @subpackage tree */ class Less_Tree_Condition extends Less_Tree{
public $op; public $lvalue; public $rvalue; public $index; public $negate; public $type = 'Condition';
public function __construct($op, $l, $r, $i = 0, $negate = false) { $this->op = trim($op); $this->lvalue = $l; $this->rvalue = $r; $this->index = $i; $this->negate = $negate; }
public function accept($visitor){ $this->lvalue = $visitor->visitObj( $this->lvalue ); $this->rvalue = $visitor->visitObj( $this->rvalue ); }
public function compile($env) { $a = $this->lvalue->compile($env); $b = $this->rvalue->compile($env);
switch( $this->op ){ case 'and': $result = $a && $b; break;
case 'or': $result = $a || $b; break;
default: if( Less_Parser::is_method($a, 'compare') ){ $result = $a->compare($b); }elseif( Less_Parser::is_method($b, 'compare') ){ $result = $b->compare($a); }else{ throw new Less_Exception_Compiler('Unable to perform comparison', null, $this->index); }
switch ($result) { case -1: $result = $this->op === '<' || $this->op === '=<' || $this->op === '<='; break;
case 0: $result = $this->op === '=' || $this->op === '>=' || $this->op === '=<' || $this->op === '<='; break;
case 1: $result = $this->op === '>' || $this->op === '>='; break; } break; }
return $this->negate ? !$result : $result; }
}
|