ref: d4bd43e5d1cec8f0c498e4e344abeccab20f5ad5
parent: e243750f8f47bb6a7d69c2d2ddaa1f0719148d22
author: aiju <devnull@localhost>
date: Sat Mar 31 08:30:48 EDT 2018
forp: fix precedence for []
--- a/sys/src/cmd/forp/parse.c
+++ b/sys/src/cmd/forp/parse.c
@@ -291,12 +291,8 @@
mpint *num;
int t;
- if(level == MAXPREC+1){+ if(level == MAXPREC+2){ switch(t = lex()){- case '~': return node(ASTUN, OPCOM, expr(level));
- case '!': return node(ASTUN, OPNOT, expr(level));
- case '+': return expr(level);
- case '-': return node(ASTUN, OPNEG, expr(level));
case '(':a = expr(0);
expect(')');@@ -318,7 +314,7 @@
default:
error(nil, "unexpected %t", t);
}
- }else if(level == MAXPREC){+ }else if(level == MAXPREC+1){a = expr(level + 1);
if(got('[')){b = expr(0);
@@ -330,6 +326,14 @@
a = node(ASTIDX, a, b, c);
}
return a;
+ }else if(level == MAXPREC){+ switch(t = lex()){+ case '~': return node(ASTUN, OPCOM, expr(level));
+ case '!': return node(ASTUN, OPNOT, expr(level));
+ case '+': return expr(level);
+ case '-': return node(ASTUN, OPNEG, expr(level));
+ default: superman(t); return expr(level+1); break;
+ }
}else if(level == 3){a = expr(level + 1);
if(got('?')){--
⑨