126e9ac83000c3cef244fb0890972700b0fe8a39
[m6w6/ext-psi] / scripts / gen_calc_oper.php
1 <?php
2
3 include __DIR__."/_include.php";
4
5 $oper = [
6 ["NOT", "TILDE"],
7 ["ASTERISK", "SLASH", "MODULO"],
8 ["PLUS", "MINUS"],
9 ["LSHIFT", "RSHIFT"],
10 ["LCHEVR", "CMP_LE", "RCHEVR", "CMP_GE"],
11 ["AMPERSAND"],
12 ["CMP_EQ", "CMP_NE"],
13 ["CARET"],
14 ["PIPE"],
15 ["AND"],
16 ["OR"]
17 ];
18
19 ?>
20
21
22 static inline int psi_calc_oper(token_t op1, token_t op2)
23 {
24 if (PSI_T_LPAREN == op2) {
25 return -1;
26 } else if (PSI_T_LPAREN == op1) {
27 return 1;
28 } else if (op1 == op2) {
29 return 0;
30 } else if (!op1) {
31 return 1;
32 } else if (!op2) {
33 return -1;
34 }
35
36 switch (op1) {<?php /*nobr*/ ?>
37 <?php foreach ($oper as $prec1 => $ops1) : ?>
38 <?php foreach ($ops1 as $op1) : ?>
39
40 case PSI_T_<?=$op1?>:
41 switch (op2) {<?php /*nobr*/ ?>
42 <?php foreach ($oper as $prec2 => $ops2) : ?>
43 <?php foreach ($ops2 as $op2) : ?>
44
45 case PSI_T_<?=$op2?>:
46 return <?=$prec1==$prec2?0:($prec1>$prec2?1:-1)?>;<?php /*nobr */ ?>
47 <?php endforeach; ?>
48 <?php endforeach; ?>
49
50 default:
51 assert(0);
52 break;
53 }
54 break;
55 <?php endforeach; ?>
56 <?php endforeach; ?>
57
58 default:
59 assert(0);
60 break;
61 }
62 return 0;
63 }