diff options
author | Alexander Kiryukhin <alexander@kiryukhin.su> | 2019-01-16 10:27:56 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-16 10:27:56 +0300 |
commit | 36b252b7c91fada20489be9ee60f173b49b823cb (patch) | |
tree | a2d1f4dd6504745596efe10620997bcc1ce06b5a /src/NXP/Classes/Token | |
parent | 5a26d651dd241f2457cda49206e3439513ea4788 (diff) | |
parent | e1b770d6c884d79b8c3c6226d2e6cc8cc5a633ca (diff) |
Merge pull request #44 from phpfui/masterv0.7.2
* Fixed comma operator
Added unit tests for expressions in function arguments.
Changed array_push to $var[] = native code.
* Fixed merge error
* Fixed typo in constant
Diffstat (limited to 'src/NXP/Classes/Token')
-rw-r--r-- | src/NXP/Classes/Token/TokenComma.php | 30 | ||||
-rw-r--r-- | src/NXP/Classes/Token/TokenFunction.php | 5 |
2 files changed, 32 insertions, 3 deletions
diff --git a/src/NXP/Classes/Token/TokenComma.php b/src/NXP/Classes/Token/TokenComma.php index 6a45595..f6fc068 100644 --- a/src/NXP/Classes/Token/TokenComma.php +++ b/src/NXP/Classes/Token/TokenComma.php @@ -13,7 +13,7 @@ namespace NXP\Classes\Token; /** * @author Alexander Kiryukhin <a.kiryukhin@mail.ru> */ -class TokenComma implements InterfaceToken +class TokenComma extends AbstractOperator { /** * @return string @@ -22,4 +22,32 @@ class TokenComma implements InterfaceToken { return '\,'; } + + /** + * Comma operator is lowest priority + * + * @return int + */ + public function getPriority() + { + return 0; + } + + /** + * @return string + */ + public function getAssociation() + { + return self::LEFT_ASSOC; + } + + /** + * @param array $stack + * @return TokenNumber + */ + public function execute(&$stack) + { + // Comma operators don't do anything, stack has already executed + } + } diff --git a/src/NXP/Classes/Token/TokenFunction.php b/src/NXP/Classes/Token/TokenFunction.php index 04eae30..432f107 100644 --- a/src/NXP/Classes/Token/TokenFunction.php +++ b/src/NXP/Classes/Token/TokenFunction.php @@ -32,9 +32,10 @@ class TokenFunction extends AbstractContainerToken implements InterfaceFunction $args = []; list($places, $function) = $this->value; for ($i = 0; $i < $places; $i++) { - $args[] = array_pop($stack)->getValue(); + array_unshift($args, array_pop($stack)->getValue()); } - $result = call_user_func_array($function, array_reverse($args)); + + $result = call_user_func_array($function, $args); return new TokenNumber($result); } |