aboutsummaryrefslogtreecommitdiff
path: root/src/NXP/Classes/Token
diff options
context:
space:
mode:
authorAlexander Kiryukhin <alexander@kiryukhin.su>2019-01-16 10:27:56 +0300
committerGitHub <noreply@github.com>2019-01-16 10:27:56 +0300
commit36b252b7c91fada20489be9ee60f173b49b823cb (patch)
treea2d1f4dd6504745596efe10620997bcc1ce06b5a /src/NXP/Classes/Token
parent5a26d651dd241f2457cda49206e3439513ea4788 (diff)
parente1b770d6c884d79b8c3c6226d2e6cc8cc5a633ca (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.php30
-rw-r--r--src/NXP/Classes/Token/TokenFunction.php5
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);
}