@@ -36,7 +36,7 @@ export let idx, cur,
3636 seek = n => idx = n ,
3737
3838 // a + b - c
39- expr = ( prec = 0 , end ) => {
39+ expr = ( p = 0 , end ) => {
4040 let cc , token , newNode , fn , prevReserved = parse . reserved , nl ;
4141 if ( end ) parse . asi && ( parse . newline = false ) ;
4242 parse . reserved = 0 ;
@@ -46,8 +46,8 @@ export let idx, cur,
4646 ( nl = parse . newline , 1 ) &&
4747 cc !== end &&
4848 ( newNode =
49- ( ( fn = lookup [ cc ] ) && fn ( token , prec ) ) ??
50- ( token && nl && parse . asi ?. ( token , prec , expr ) ) ??
49+ ( ( fn = lookup [ cc ] ) && fn ( token , p ) ) ??
50+ ( token && nl && parse . asi ?. ( token , p , expr ) ) ??
5151 ( ! token && ! parse . reserved && next ( parse . id ) )
5252 )
5353 ) token = newNode , parse . reserved = 0 ;
@@ -84,7 +84,7 @@ export let idx, cur,
8484 // operator lookup table
8585 lookup = [ ] ,
8686
87- // precedence registry - features register, others can read/override
87+ // precedence registry - features register via token() , others can read
8888 prec = { } ,
8989
9090 // create operator checker/mapper
@@ -97,7 +97,7 @@ export let idx, cur,
9797 prev = lookup [ c ] ,
9898 word = op . toUpperCase ( ) !== op ,
9999 matched , r
100- ) => ( prec [ op ] = p , lookup [ c ] = ( a , curPrec , curOp , from = idx ) =>
100+ ) => ( p = prec [ op ] = ! prev && prec [ op ] || p , lookup [ c ] = ( a , curPrec , curOp , from = idx ) =>
101101 ( matched = curOp ,
102102 ( curOp ?
103103 op == curOp :
@@ -108,16 +108,16 @@ export let idx, cur,
108108 ) ||
109109 prev ?. ( a , curPrec , matched ) ) ,
110110
111- binary = ( op , prec , right = false ) => token ( op , prec , ( a , b ) => a && ( b = expr ( prec - ( right ? .5 : 0 ) ) ) && [ op , a , b ] ) ,
111+ binary = ( op , p , right = false ) => token ( op , p , ( a , b ) => a && ( b = expr ( p - ( right ? .5 : 0 ) ) ) && [ op , a , b ] ) ,
112112
113- unary = ( op , prec , post ) => token ( op , prec , a => post ? ( a && [ op , a ] ) : ( ! a && ( a = expr ( prec - .5 ) ) && [ op , a ] ) ) ,
113+ unary = ( op , p , post ) => token ( op , p , a => post ? ( a && [ op , a ] ) : ( ! a && ( a = expr ( p - .5 ) ) && [ op , a ] ) ) ,
114114
115115 literal = ( op , val ) => token ( op , 200 , a => ! a && [ , val ] ) ,
116116
117- nary = ( op , prec , right ) => {
118- token ( op , prec ,
117+ nary = ( op , p , right ) => {
118+ token ( op , p ,
119119 ( a , b ) => (
120- b = expr ( prec - ( right ? .5 : 0 ) ) ,
120+ b = expr ( p - ( right ? .5 : 0 ) ) ,
121121 (
122122 ( a ?. [ 0 ] !== op ) && ( a = [ op , a || null ] ) ,
123123 b ?. [ 0 ] === op ? a . push ( ...b . slice ( 1 ) ) : a . push ( b || null ) ,
@@ -126,9 +126,9 @@ export let idx, cur,
126126 )
127127 } ,
128128
129- group = ( op , prec ) => token ( op [ 0 ] , prec , a => ( ! a && [ op , expr ( 0 , op . charCodeAt ( 1 ) ) || null ] ) ) ,
129+ group = ( op , p ) => token ( op [ 0 ] , p , a => ( ! a && [ op , expr ( 0 , op . charCodeAt ( 1 ) ) || null ] ) ) ,
130130
131- access = ( op , prec ) => token ( op [ 0 ] , prec , a => ( a && [ op , a , expr ( 0 , op . charCodeAt ( 1 ) ) || null ] ) ) ;
131+ access = ( op , p ) => token ( op [ 0 ] , p , a => ( a && [ op , a , expr ( 0 , op . charCodeAt ( 1 ) ) || null ] ) ) ;
132132
133133// === Compile: AST → Evaluator ===
134134
0 commit comments