blacklist: vsyslog
[m6w6/ext-psi] / scripts / gen_calc_oper.php
index 126e9ac83000c3cef244fb0890972700b0fe8a39..ab71f62c2542ce98794a89186cae4cf5e958e17b 100644 (file)
@@ -3,7 +3,7 @@
 include __DIR__."/_include.php";
 
 $oper = [
-               ["NOT", "TILDE"],
+               ["NOT", "TILDE", "CAST"],
                ["ASTERISK", "SLASH", "MODULO"],
                ["PLUS", "MINUS"],
                ["LSHIFT", "RSHIFT"],
@@ -27,26 +27,41 @@ static inline int psi_calc_oper(token_t op1, token_t op2)
                return 1;
        } else if (op1 == op2) {
                return 0;
-       } else if (!op1) {
+       } else if (!op1 || op1 == PSI_T_NUMBER) {
                return 1;
-       } else if (!op2) {
+       } else if (!op2 || op2 == PSI_T_NUMBER) {
                return -1;
        }
 
        switch (op1) {<?php /*nobr*/ ?>
        <?php foreach ($oper as $prec1 => $ops1) : ?>
-       <?php foreach ($ops1 as $op1) : ?>
+       <?php foreach ($ops1 as $op1) : $check = NAN; ?>
 
        case PSI_T_<?=$op1?>:
                switch (op2) {<?php /*nobr*/ ?>
                <?php foreach ($oper as $prec2 => $ops2) : ?>
                        <?php foreach ($ops2 as $op2) : ?>
+                               <?php 
+                               if ($prec1 == $prec2) :
+                                       $ret = 0;
+                               elseif ($prec1 > $prec2) :
+                                       $ret = 1;
+                               else :
+                                       $ret = -1;
+                               endif; 
+                               ?>
+                               <?php if (!is_nan($check) && $check !== $ret) : ?>
 
-               case PSI_T_<?=$op2?>:
-                       return <?=$prec1==$prec2?0:($prec1>$prec2?1:-1)?>;<?php /*nobr */ ?>
+                       return <?=$check?>;
+                               <?php endif; ?>
+                               <?php $check = $ret; ?>
+
+               case PSI_T_<?=$op2?>:<?php /*nobr*/ ?>
                        <?php endforeach; ?>
                <?php endforeach; ?>
 
+                       return <?=$ret?>;<?php /*nobr*/ ?>
+
                default:
                        assert(0);
                        break;