@@ -37,9 +37,8 @@ export let idx, cur,
3737
3838 // a + b - c
3939 expr = ( p = 0 , end ) => {
40- let cc , token , newNode , fn , prevReserved = parse . reserved , nl ;
40+ let cc , token , newNode , fn , nl ;
4141 if ( end ) parse . asi && ( parse . newline = false ) ;
42- parse . reserved = 0 ;
4342
4443 while (
4544 ( cc = parse . space ( ) ) &&
@@ -48,10 +47,9 @@ export let idx, cur,
4847 ( newNode =
4948 ( ( fn = lookup [ cc ] ) && fn ( token , p ) ) ??
5049 ( token && nl && parse . asi ?. ( token , p , expr ) ) ??
51- ( ! token && ! parse . reserved && next ( parse . id ) )
50+ ( ! token && next ( parse . id ) )
5251 )
53- ) token = newNode , parse . reserved = 0 ;
54- parse . reserved = prevReserved ;
52+ ) token = newNode ;
5553
5654 if ( end ) cc == end ? idx ++ : err ( 'Unclosed ' + String . fromCharCode ( end - ( end > 42 ? 2 : 1 ) ) ) ;
5755
@@ -67,6 +65,9 @@ export let idx, cur,
6765 return cc
6866 } ,
6967
68+ // peek at next non-space char without modifying idx
69+ peek = ( from = idx ) => { while ( cur . charCodeAt ( from ) <= SPACE ) from ++ ; return cur . charCodeAt ( from ) ; } ,
70+
7071 // is char an id?
7172 id = parse . id = c =>
7273 ( c >= 48 && c <= 57 ) ||
@@ -87,7 +88,8 @@ export let idx, cur,
8788 // precedence registry - features register via token(), others can read
8889 prec = { } ,
8990
90- // create operator checker/mapper
91+ // create operator checker/mapper - for symbols and special cases
92+ // For prefix word operators, prefer keyword() from block.js
9193 token = (
9294 op ,
9395 p = SPACE ,
@@ -104,17 +106,17 @@ export let idx, cur,
104106 ( l < 2 || ( op . charCodeAt ( 1 ) === cur . charCodeAt ( idx + 1 ) && ( l < 3 || cur . substr ( idx , l ) == op ) ) ) && ( ! word || ! parse . id ( cur . charCodeAt ( idx + l ) ) ) && ( matched = curOp = op )
105107 ) &&
106108 curPrec < p &&
107- ( idx += l , ( r = map ( a ) ) ? loc ( r , from ) : ( idx = from , matched = 0 , word && r !== false && ( parse . reserved = 1 ) , ! word && ! prev && err ( ) ) , r )
109+ ( idx += l , ( r = map ( a ) ) ? loc ( r , from ) : ( idx = from , matched = 0 , ! word && ! prev && err ( ) ) , r )
108110 ) ||
109111 prev ?. ( a , curPrec , matched ) ) ,
110112
111- binary = ( op , p , right = false ) => token ( op , p , ( a , b ) => a && ( b = expr ( p - ( right ? .5 : 0 ) ) ) && [ op , a , b ] ) ,
113+ binary = ( op , p , right = false ) => token ( op , p , a => a && ( b => b && [ op , a , b ] ) ( expr ( p - ( right ? .5 : 0 ) ) ) ) ,
112114
113115 unary = ( op , p , post ) => token ( op , p , a => post ? ( a && [ op , a ] ) : ( ! a && ( a = expr ( p - .5 ) ) && [ op , a ] ) ) ,
114116
115117 literal = ( op , val ) => token ( op , 200 , a => ! a && [ , val ] ) ,
116118
117- nary = ( op , p , right ) => {
119+ nary = ( op , p , right ) =>
118120 token ( op , p ,
119121 ( a , b ) => (
120122 b = expr ( p - ( right ? .5 : 0 ) ) ,
@@ -124,7 +126,7 @@ export let idx, cur,
124126 a
125127 ) )
126128 )
127- } ,
129+ ,
128130
129131 group = ( op , p ) => token ( op [ 0 ] , p , a => ( ! a && [ op , expr ( 0 , op . charCodeAt ( 1 ) ) || null ] ) ) ,
130132
0 commit comments