diff options
author | derchris | 2019-02-02 15:35:30 +0100 |
---|---|---|
committer | derchris | 2019-02-02 15:35:30 +0100 |
commit | 7ad9f272a482802da2d43fe83841adbe9bcd8cb4 (patch) | |
tree | 75b43a2a8c3ab3dbdcb0694d135f4729c90b8af7 /lib/less.php/Tree/Condition.php | |
parent | eb6601b2520d48a0be91634fada0389faadde31d (diff) |
update less.php to PHP 7.x compatible fork
Diffstat (limited to 'lib/less.php/Tree/Condition.php')
-rw-r--r-- | lib/less.php/Tree/Condition.php | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/less.php/Tree/Condition.php b/lib/less.php/Tree/Condition.php new file mode 100644 index 0000000..929d33b --- /dev/null +++ b/lib/less.php/Tree/Condition.php @@ -0,0 +1,72 @@ +<?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; + } + +} |