subscript 5.4.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/evaluate.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // calltree → result
2
2
  export const evaluate = (node, ctx={}) => {
3
3
  if (typeof node === 'string')
4
- return node[0] === '"' ? node.slice(1,-1) : node[0]==='@' ? node.slice(1) : node in ctx ? ctx[node] : node
4
+ return node[0]==='@' ? node.slice(1) : ctx[node]
5
5
 
6
6
  if (Array.isArray(node)) {
7
7
  // [[a,b], c] or ['+', a, b] or ['myfn', a, b], or
package/justin.js CHANGED
@@ -27,7 +27,7 @@ parse.token.push(
27
27
  if (c === 92) skip(), str += escape[char()] || char(); else str+=char()
28
28
  skip()
29
29
  }
30
- return skip(), qc + str + qc
30
+ return skip(), '@' + str
31
31
  },
32
32
 
33
33
  // id
@@ -65,8 +65,7 @@ const addOps = (add, stride=2, list) => {
65
65
 
66
66
  addOps(parse.operator, 3, [
67
67
  // subscript ones
68
- // TODO: add ,, as node here?
69
- ',', PREC_SEQ,,
68
+ ',', PREC_SEQ,,
70
69
 
71
70
  '|', PREC_OR,,
72
71
  '||', PREC_SOME,,
@@ -93,13 +92,13 @@ addOps(parse.operator, 3, [
93
92
  '+', PREC_SUM,,
94
93
  '+', PREC_UNARY, -1,
95
94
  '++', PREC_UNARY, -1,
96
- '++', PREC_UNARY, +1,
95
+ '++', PREC_POSTFIX, +1,
97
96
  '-', PREC_SUM,,
98
97
  '-', PREC_UNARY, -1,
99
98
  '--', PREC_UNARY, -1,
100
- '--', PREC_UNARY, +1,
99
+ '--', PREC_POSTFIX, +1,
101
100
 
102
- // !
101
+ // ! ~
103
102
  '!', PREC_UNARY, -1,
104
103
 
105
104
  // * / %
@@ -108,14 +107,14 @@ addOps(parse.operator, 3, [
108
107
  '%', PREC_MULT,,
109
108
 
110
109
  // a.b
111
- '.', PREC_CALL, (node,b) => node && [skip(),node, typeof (b = expr(PREC_CALL)) === 'string' ? '"' + b + '"' : b.valueOf()],
110
+ '.', PREC_CALL, (node,b) => node && [skip(), node, '@' + expr(PREC_CALL)],
112
111
 
113
112
  // a[b]
114
113
  '[', PREC_CALL, (node) => (skip(), node = ['.', node, val(expr(0,CBRACK))], node),
115
114
  ']',,,
116
115
 
117
116
  // a(b)
118
- '(', PREC_CALL, (node,b) => ( skip(), b=expr(0,CPAREN),
117
+ '(', PREC_CALL, (node,b) => (skip(), b=expr(0,CPAREN),
119
118
  Array.isArray(b) && b[0]===',' ? (b[0]=node, b) : b ? [node, val(b)] : [node]
120
119
  ),
121
120
  // (a+b)
@@ -134,9 +133,8 @@ addOps(parse.operator, 3, [
134
133
  skip(), parse.space(), a = expr()
135
134
  return ['?:', node, a[1], a[2]]
136
135
  },
137
- '}',,,
138
- ':',2,,
139
- 'in', PREC_COMP, (node) => code(2) <= 32 && [skip(2), '"'+node+'"', expr(PREC_COMP)],
136
+ ':', PREC_COMP,,
137
+ 'in', PREC_COMP, (node) => code(2)<=32 && [skip(2), '@'+node, expr(PREC_COMP)],
140
138
 
141
139
  // as operator it's faster to lookup (no need to extra rule check), smaller and no conflict with word names
142
140
  // [a,b,c]
@@ -147,8 +145,9 @@ addOps(parse.operator, 3, [
147
145
 
148
146
  // {a:0, b:1}
149
147
  '{', PREC_TOKEN, (node,arg) => !node && (skip(), arg=expr(0,125),
150
- !arg ? ['{'] : arg[0] == ':' ? ['{',arg] : arg[0] == ',' ? (arg[0]='{',arg) : ['{',arg])
151
- ,
148
+ !arg ? ['{'] : arg[0] == ':' ? ['{',strkey(arg)] : arg[0] == ',' ? (arg[0]='{',arg.map(strkey)) : ['{',arg]),
149
+ '}',,,
150
+
152
151
 
153
152
  // literals
154
153
  'null', PREC_TOKEN, node=>!node&&(skip(4),v(null)),
@@ -156,6 +155,7 @@ addOps(parse.operator, 3, [
156
155
  'true', PREC_TOKEN, node=>!node&&(skip(4),v(true)),
157
156
  'undefined', PREC_TOKEN, node=>!node&&(skip(9),v(undefined)),
158
157
  ])
158
+ const strkey = a => Array.isArray(a) ? (a[1]=(a[1][0]==='@'?'':'@')+a[1],a) : a
159
159
  const v = v => ({valueOf:()=>v})
160
160
 
161
161
  addOps(evaluate.operator, 2, [
package/justin.min.js CHANGED
@@ -1 +1 @@
1
- const e=(t,n={},o,s)=>{if("string"==typeof t)return'"'===t[0]?t.slice(1,-1):"@"===t[0]?t.slice(1):t in n?n[t]:t;if(Array.isArray(t)&&("string"==typeof t[0]||Array.isArray(t[0]))){let[o,...s]=t,a="string"==typeof o?r[o]||n[o]:e(o,n);return s=s.map((r=>e(r,n))),a.apply(o,s)}return t},r={};let t,n;e.operator=(e,t)=>r[e]=2==t.length?(...e)=>e.reduce(t):t;const o=(e,r)=>(n=e,t=0,r=l(),t<n.length?s():y(r)),s=(e="Bad syntax")=>{throw Error(e+" `"+n[t]+"` at "+t)},a=(e=1,r=t)=>{if("number"==typeof e)t+=e;else for(;e(i());)t++;return n.slice(r,t)},i=(e=0)=>n.charCodeAt(t+e),f=(e=1)=>n.substr(t,e),l=(e=0,r,n,a,i=0,f,l)=>{for(;(n=o.space())&&(l=c[n]?.(a,e)||!a&&p(n));)a=l;return r&&(n!=r?s("Unclosed paren"):t++),a};o.space=e=>{for(;(e=i())<=32;)t++;return e};const u=o.token=[],p=(e,r=0,t)=>{for(;r<u.length;)if(t=u[r++](e))return t},c=[];o.operator=(e,r=0,n=0,s,u=e.charCodeAt(0),p=e.length,d=c[u],h=n<=0&&e.toUpperCase()!==e)=>(s=n?n>0?e=>e&&[a(p),y(e)]:n<0?e=>!e&&[a(p),y(l(r-1))]:n:n=>{n=[e,y(n)];do{t+=p,n.push(y(l(r)))}while(o.space()==u&&(p<2||f(p)==e)&&(!h||i(p)<=32));return n},c[u]=(t,n)=>n<r&&(p<2||f(p)==e)&&(!h||i(p)<=32)&&s(t)||d&&d(t,n));const y=e=>Array.isArray(e)?e:(e||s()).valueOf();o.token.push((e=>(e=a((e=>e>47&&e<58||46==e)))&&((69==i()||101==i())&&(e+=a(2)+a((e=>e>=48&&e<=57))),isNaN(e=new Number(e))?s("Bad number"):e)),((e,r,t,n)=>{if(34===e||39===e){for(r=f(),a(),n="";(t=i())-e;)92===t?(a(),n+=d[f()]||f()):n+=f(),a();return a(),r+n+r}}),(e=>a((e=>e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>=192&&215!=e&&247!=e))));const d={n:"\n",r:"\r",t:"\t",b:"\b",f:"\f",v:"\v"};o.space=e=>{for(;(e=i())<=32||47===e;)if(e<=32)a();else if(47===e)if(42===i(1))a(2),a((e=>42!==e&&47!==i(1))),a(2);else{if(47!==i(1))break;a(2),a((e=>e>=32))}return e};const h=(e,r=2,t)=>{for(let n=0;n<t.length;n+=r)e(t[n],t[n+1],t[n+2])};h(o.operator,3,[",",1,,"|",6,,"||",4,,"&",8,,"&&",5,,"^",7,,"==",9,,"!=",9,,">",10,,">=",10,,">>",11,,">>>",11,,"<",10,,"<=",10,,"<<",11,,"+",12,,"+",15,-1,"++",15,-1,"++",15,1,"-",12,,"-",15,-1,"--",15,-1,"--",15,1,"!",15,-1,"*",13,,"/",13,,"%",13,,".",18,(e,r)=>e&&[a(),e,"string"==typeof(r=l(18))?'"'+r+'"':r.valueOf()],"[",18,e=>(a(),[".",e,y(l(0,93))]),"]",,,"(",18,(e,r)=>(a(),r=l(0,41),Array.isArray(r)&&","===r[0]?(r[0]=e,r):r?[e,y(r)]:[e]),"(",19,(e,r)=>!e&&(a(),l(0,41)||s()),")",,,";",1,,"===",9,,"!==",9,,"**",14,,"~",15,-1,"?",3,e=>{let r;return e||s("Expected expression"),a(),o.space(),r=l(),["?:",e,r[1],r[2]]},"}",,,":",2,,"in",10,e=>i(2)<=32&&[a(2),'"'+e+'"',l(10)],"[",20,(e,r)=>!e&&(a(),(r=l(0,93))?","==r[0]?(r[0]="[",r):["[",r]:["["]),"{",20,(e,r)=>!e&&(a(),(r=l(0,125))?":"==r[0]?["{",r]:","==r[0]?(r[0]="{",r):["{",r]:["{"]),"null",20,e=>!e&&(a(4),g(null)),"false",20,e=>!e&&(a(5),g(!1)),"true",20,e=>!e&&(a(4),g(!0)),"undefined",20,e=>!e&&(a(9),g(void 0))]);const g=e=>({valueOf:()=>e});h(e.operator,2,["!",e=>!e,"++",e=>++e,"--",e=>--e,".",(e,r)=>e?e[r]:e,"%",(e,r)=>e%r,"/",(e,r)=>e/r,"*",(e,r)=>e*r,"+",(e,r)=>e+r,"-",(...e)=>e.length<2?-e:e.reduce(((e,r)=>e-r)),">>>",(e,r)=>e>>>r,">>",(e,r)=>e>>r,"<<",(e,r)=>e<<r,">=",(e,r)=>e>=r,">",(e,r)=>e>r,"<=",(e,r)=>e<=r,"<",(e,r)=>e<r,"!=",(e,r)=>e!=r,"==",(e,r)=>e==r,"&",(e,r)=>e&r,"^",(e,r)=>e^r,"|",(e,r)=>e|r,"&&",(...e)=>e.every(Boolean),"||",(...e)=>e.some(Boolean),",",(e,r)=>r,"**",(...e)=>e.reduceRight(((e,r)=>Math.pow(r,e))),"~",e=>~e,"?:",(e,r,t)=>e?r:t,"in",(e,r)=>e in r,"[",(...e)=>Array(...e),"{",(...e)=>Object.fromEntries(e),":",(e,r)=>[e,r]]);var A=r=>(r="string"==typeof r?o(r):r,t=>e(r,t));export{A as default,e as evaluate,o as parse};
1
+ const r=(t,n={})=>{if("string"==typeof t)return"@"===t[0]?t.slice(1):n[t];if(Array.isArray(t)){let o=t[0],a=Array.isArray(o)?r(o,n):e[o]||n[o]||o,s=[],l=1;for(;l<t.length;l++)s.push(r(t[l],n));return s.length>a.length&&a.length?s.reduce(a):a.apply(o,s)}return t},e={};let t,n;r.operator=(r,t)=>e[r]=t;const o=(r,e)=>(n=r,t=0,e=i(),t<n.length?a():h(e)),a=(r="Bad syntax")=>{throw Error(r+" `"+n[t]+"` at "+t)},s=(r=1,e=t)=>{if("number"==typeof r)t+=r;else for(;r(l());)t++;return n.slice(e,t)},l=(r=0)=>n.charCodeAt(t+r),f=(r=1)=>n.substr(t,r),i=(r=0,e,n,s,l=0,f,i)=>{for(;(n=o.space())&&(f=(i=c[n])&&i(s,r)||!s&&p(n));)s=f;return e&&(n!=e?a("Unclosed paren"):t++),s};o.space=r=>{for(;(r=l())<=32;)t++;return r};const u=o.token=[],p=(r,e=0,t)=>{for(;e<u.length;)if(t=u[e++](r))return t},c=[];o.operator=(r,e=0,n=0,a,l=r.charCodeAt(0),u=r.length,p=c[l])=>(a=n?n>0?r=>r&&[s(u),h(r)]:n<0?r=>!r&&[s(u),h(i(e-1))]:n:n=>{n=[r,h(n)];do{t+=u,n.push(h(i(e)))}while(o.space()==l&&(u<2||f(u)==r));return n},c[l]=(t,n)=>n<e&&(u<2||f(u)==r)&&a(t)||p&&p(t,n));const h=r=>Array.isArray(r)?r:(r||a()).valueOf();o.token.push((r=>(r=s((r=>r>47&&r<58||46==r)))&&((69==l()||101==l())&&(r+=s(2)+s((r=>r>=48&&r<=57))),isNaN(r=new Number(r))?a("Bad number"):r)),((r,e,t,n)=>{if(34===r||39===r){for(f(),s(),n="";(t=l())-r;)92===t?(s(),n+=y[f()]||f()):n+=f(),s();return s(),"@"+n}}),(r=>s((r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||36==r||95==r||r>=192&&215!=r&&247!=r))));const y={n:"\n",r:"\r",t:"\t",b:"\b",f:"\f",v:"\v"};o.space=r=>{for(;(r=l())<=32||47===r;)if(r<=32)s();else if(47===r)if(42===l(1))s(2),s((r=>42!==r&&47!==l(1))),s(2);else{if(47!==l(1))break;s(2),s((r=>r>=32))}return r};const d=(r,e=2,t)=>{for(let n=0;n<t.length;n+=e)r(t[n],t[n+1],t[n+2])};d(o.operator,3,[",",1,,"|",6,,"||",4,,"&",8,,"&&",5,,"^",7,,"==",9,,"!=",9,,">",10,,">=",10,,">>",11,,">>>",11,,"<",10,,"<=",10,,"<<",11,,"+",12,,"+",15,-1,"++",15,-1,"++",16,1,"-",12,,"-",15,-1,"--",15,-1,"--",16,1,"!",15,-1,"*",13,,"/",13,,"%",13,,".",18,(r,e)=>r&&[s(),r,"@"+i(18)],"[",18,r=>(s(),[".",r,h(i(0,93))]),"]",,,"(",18,(r,e)=>(s(),e=i(0,41),Array.isArray(e)&&","===e[0]?(e[0]=r,e):e?[r,h(e)]:[r]),"(",19,(r,e)=>!r&&(s(),i(0,41)||a()),")",,,";",1,,"===",9,,"!==",9,,"**",14,,"~",15,-1,"?",3,r=>{let e;return r||a("Expected expression"),s(),o.space(),e=i(),["?:",r,e[1],e[2]]},":",10,,"in",10,r=>l(2)<=32&&[s(2),"@"+r,i(10)],"[",20,(r,e)=>!r&&(s(),(e=i(0,93))?","==e[0]?(e[0]="[",e):["[",e]:["["]),"{",20,(r,e)=>!r&&(s(),(e=i(0,125))?":"==e[0]?["{",A(e)]:","==e[0]?(e[0]="{",e.map(A)):["{",e]:["{"]),"}",,,"null",20,r=>!r&&(s(4),g(null)),"false",20,r=>!r&&(s(5),g(!1)),"true",20,r=>!r&&(s(4),g(!0)),"undefined",20,r=>!r&&(s(9),g(void 0))]);const A=r=>Array.isArray(r)?(r[1]=("@"===r[1][0]?"":"@")+r[1],r):r,g=r=>({valueOf:()=>r});d(r.operator,2,["!",r=>!r,"++",r=>++r,"--",r=>--r,".",(r,e)=>r?r[e]:r,"%",(r,e)=>r%e,"/",(r,e)=>r/e,"*",(r,e)=>r*e,"+",(r,e=0)=>r+e,"-",(r,e)=>null==e?-r:r-e,">>>",(r,e)=>r>>>e,">>",(r,e)=>r>>e,"<<",(r,e)=>r<<e,">=",(r,e)=>r>=e,">",(r,e)=>r>e,"<=",(r,e)=>r<=e,"<",(r,e)=>r<e,"!=",(r,e)=>r!=e,"==",(r,e)=>r==e,"&",(r,e)=>r&e,"^",(r,e)=>r^e,"|",(r,e)=>r|e,"&&",(...r)=>r.every(Boolean),"||",(...r)=>r.some(Boolean),",",(r,e)=>e,"**",(...r)=>r.reduceRight(((r,e)=>Math.pow(e,r))),"~",r=>~r,"?:",(r,e,t)=>r?e:t,"in",(r,e)=>r in e,"[",(...r)=>Array(...r),"{",(...r)=>Object.fromEntries(r),":",(r,e)=>[r,e]]);var b=e=>(e="string"==typeof e?o(e):e,t=>r(e,t));export{b as default,r as evaluate,o as parse};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "subscript",
3
- "version": "5.4.0",
3
+ "version": "5.5.0",
4
4
  "description": "Microlanguage with common syntax for JS/C++/Python/Rust",
5
5
  "main": "subscript.js",
6
6
  "type": "module",
package/parse.js CHANGED
@@ -18,10 +18,10 @@ code = (i=0) => cur.charCodeAt(idx+i),
18
18
  char = (n=1) => cur.substr(idx, n),
19
19
 
20
20
  // a + b - c
21
- expr = (prec=0, end, cc, node, i=0, map, newNode) => {
21
+ expr = (prec=0, end, cc, node, i=0, newNode, op) => {
22
22
  // chunk/token parser
23
23
  while (
24
- (cc=parse.space()) && (newNode = lookup[cc]?.(node, prec) || (!node && token(cc)) )
24
+ (cc=parse.space()) && (newNode = (op=lookup[cc]) && op(node, prec) || (!node && token(cc)) )
25
25
  ) node = newNode;
26
26
 
27
27
  // skip end character, if expected
@@ -45,14 +45,12 @@ lookup = [],
45
45
  // @param prec is operator precedenc to check
46
46
  // @param map is either number +1 - postfix unary, -1 prefix unary, 0 binary, else - custom mapper function
47
47
  operator = parse.operator = (
48
- op, prec=0, type=0, map, c=op.charCodeAt(0), l=op.length,
49
- prev=lookup[c],
50
- spaced=type<=0&&op.toUpperCase()!==op // non-postfix word operator must have space after
48
+ op, prec=0, type=0, map, c=op.charCodeAt(0), l=op.length, prev=lookup[c]
51
49
  ) => (
52
- map = !type ? node => { // binary, consume same-op group
50
+ map = !type ? node => { // binary
53
51
  node = [op, val(node)]
54
- do { idx+=l, node.push(val(expr(prec))) }
55
- while (parse.space()==c && (l<2||char(l)==op) && (!spaced||code(l)<=SPACE))
52
+ do { idx+=l, node.push(val(expr(prec))) } // consume same-op group
53
+ while (parse.space()==c && (l<2||char(l)==op))
56
54
  return node
57
55
  } :
58
56
  type > 0 ? node => node && [skip(l), val(node)] : // postfix unary
@@ -60,8 +58,7 @@ operator = parse.operator = (
60
58
  type,
61
59
 
62
60
  lookup[c] = (node, curPrec) =>
63
- curPrec < prec && (l<2||char(l)==op) && (!spaced||code(l)<=SPACE) &&
64
- map(node) || (prev && prev(node, curPrec))
61
+ curPrec < prec && (l<2||char(l)==op) && map(node) || (prev && prev(node, curPrec))
65
62
  ),
66
63
 
67
64
  // in order to support literal tokens, we call valueOf any time we create or modify calltree node
package/subscript.js CHANGED
@@ -15,7 +15,7 @@ tokens.push(
15
15
  )
16
16
  ),
17
17
  // "a"
18
- (q, qc) => q == 34 && (skip() + skip(c => c-q) + skip()),
18
+ (q, qc, v) => q == 34 && (skip(), v=skip(c => c-q), skip(), '@'+v),
19
19
  // id
20
20
  c => skip(c =>
21
21
  (c >= 48 && c <= 57) || // 0..9
@@ -73,14 +73,14 @@ addOps(parseOp, 3, [
73
73
  '%', PREC_MULT,,
74
74
 
75
75
  // a.b
76
- '.', PREC_CALL, (node,b) => node && [skip(),node, typeof (b = expr(PREC_CALL)) === 'string' ? '"' + b + '"' : b.valueOf()],
76
+ '.', PREC_CALL, (node,b) => node && [skip(), node, '@' + expr(PREC_CALL)],
77
77
 
78
78
  // a[b]
79
79
  '[', PREC_CALL, (node) => (skip(), node = ['.', node, val(expr(0,CBRACK))], node),
80
80
  ']',,,
81
81
 
82
82
  // a(b)
83
- '(', PREC_CALL, (node,b) => ( skip(), b=expr(0,CPAREN),
83
+ '(', PREC_CALL, (node,b) => (skip(), b=expr(0,CPAREN),
84
84
  Array.isArray(b) && b[0]===',' ? (b[0]=node, b) : b ? [node, val(b)] : [node]
85
85
  ),
86
86
  // (a+b)
package/subscript.min.js CHANGED
@@ -1 +1 @@
1
- let r,e;const t=(t,o)=>(e=t,r=0,o=l(),r<e.length?n():h(o)),n=(t="Bad syntax")=>{throw Error(t+" `"+e[r]+"` at "+r)},o=(t=1,n=r)=>{if("number"==typeof t)r+=t;else for(;t(a());)r++;return e.slice(n,r)},a=(t=0)=>e.charCodeAt(r+t),s=(t=1)=>e.substr(r,t),l=(e=0,o,a,s,l=0,u,i)=>{for(;(a=t.space())&&(i=f[a]?.(s,e)||!s&&p(a));)s=i;return o&&(a!=o?n("Unclosed paren"):r++),s};t.space=e=>{for(;(e=a())<=32;)r++;return e};const u=t.token=[],p=(r,e=0,t)=>{for(;e<u.length;)if(t=u[e++](r))return t},f=[],i=t.operator=(e,n=0,u=0,p,i=e.charCodeAt(0),y=e.length,c=f[i],g=u<=0&&e.toUpperCase()!==e)=>(p=u?u>0?r=>r&&[o(y),h(r)]:u<0?r=>!r&&[o(y),h(l(n-1))]:u:o=>{o=[e,h(o)];do{r+=y,o.push(h(l(n)))}while(t.space()==i&&(y<2||s(y)==e)&&(!g||a(y)<=32));return o},f[i]=(r,t)=>t<n&&(y<2||s(y)==e)&&(!g||a(y)<=32)&&p(r)||c&&c(r,t)),h=r=>Array.isArray(r)?r:(r||n()).valueOf(),y=(r,e={})=>{if("string"==typeof r)return'"'===r[0]?r.slice(1,-1):"@"===r[0]?r.slice(1):r in e?e[r]:r;if(Array.isArray(r)){let t=r[0],n=Array.isArray(t)?y(t,e):c[t]||e[t]||t,o=[],a=1;for(;a<r.length;a++)o.push(y(r[a],e));return o.length>n.length&&n.length?o.reduce(n):n.apply(t,o)}return r},c={},g=y.operator=(r,e)=>c[r]=e;u.push((r=>(r=o((r=>r>47&&r<58||46==r)))&&((69==a()||101==a())&&(r+=o(2)+o((r=>r>=48&&r<=57))),isNaN(r=new Number(r))?n("Bad number"):r)),((r,e)=>34==r&&o()+o((e=>e-r))+o()),(r=>o((r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||36==r||95==r||r>=192))));const A=(r,e=2,t)=>{for(let n=0;n<t.length;n+=e)r(t[n],t[n+1],t[n+2])};A(i,3,[",",1,,"|",6,,"||",4,,"&",8,,"&&",5,,"^",7,,"==",9,,"!=",9,,">",10,,">=",10,,">>",11,,">>>",11,,"<",10,,"<=",10,,"<<",11,,"+",12,,"+",15,-1,"++",15,-1,"++",16,1,"-",12,,"-",15,-1,"--",15,-1,"--",16,1,"!",15,-1,"*",13,,"/",13,,"%",13,,".",18,(r,e)=>r&&[o(),r,"string"==typeof(e=l(18))?'"'+e+'"':e.valueOf()],"[",18,r=>(o(),[".",r,h(l(0,93))]),"]",,,"(",18,(r,e)=>(o(),e=l(0,41),Array.isArray(e)&&","===e[0]?(e[0]=r,e):e?[r,h(e)]:[r]),"(",19,(r,e)=>!r&&(o(),l(0,41)||n()),")",,,]),A(g,2,["!",r=>!r,"++",r=>++r,"--",r=>--r,".",(r,e)=>r?r[e]:r,"%",(r,e)=>r%e,"/",(r,e)=>r/e,"*",(r,e)=>r*e,"+",(r,e=0)=>r+e,"-",(r,e)=>null==e?-r:r-e,">>>",(r,e)=>r>>>e,">>",(r,e)=>r>>e,"<<",(r,e)=>r<<e,">=",(r,e)=>r>=e,">",(r,e)=>r>e,"<=",(r,e)=>r<=e,"<",(r,e)=>r<e,"!=",(r,e)=>r!=e,"==",(r,e)=>r==e,"&",(r,e)=>r&e,"^",(r,e)=>r^e,"|",(r,e)=>r|e,"&&",(...r)=>r.every(Boolean),"||",(...r)=>r.some(Boolean),",",(r,e)=>e]);var d=r=>(r="string"==typeof r?t(r):r,e=>y(r,e));export{d as default,y as evaluate,t as parse};
1
+ let r,e;const t=(t,o)=>(e=t,r=0,o=l(),r<e.length?n():i(o)),n=(t="Bad syntax")=>{throw Error(t+" `"+e[r]+"` at "+r)},o=(t=1,n=r)=>{if("number"==typeof t)r+=t;else for(;t(a());)r++;return e.slice(n,r)},a=(t=0)=>e.charCodeAt(r+t),s=(t=1)=>e.substr(r,t),l=(e=0,o,a,s,l=0,u,p)=>{for(;(a=t.space())&&(u=(p=h[a])&&p(s,e)||!s&&f(a));)s=u;return o&&(a!=o?n("Unclosed paren"):r++),s};t.space=e=>{for(;(e=a())<=32;)r++;return e};const u=t.token=[],f=(r,e=0,t)=>{for(;e<u.length;)if(t=u[e++](r))return t},h=[],p=t.operator=(e,n=0,a=0,u,f=e.charCodeAt(0),p=e.length,y=h[f])=>(u=a?a>0?r=>r&&[o(p),i(r)]:a<0?r=>!r&&[o(p),i(l(n-1))]:a:o=>{o=[e,i(o)];do{r+=p,o.push(i(l(n)))}while(t.space()==f&&(p<2||s(p)==e));return o},h[f]=(r,t)=>t<n&&(p<2||s(p)==e)&&u(r)||y&&y(r,t)),i=r=>Array.isArray(r)?r:(r||n()).valueOf(),y=(r,e={})=>{if("string"==typeof r)return"@"===r[0]?r.slice(1):e[r];if(Array.isArray(r)){let t=r[0],n=Array.isArray(t)?y(t,e):c[t]||e[t]||t,o=[],a=1;for(;a<r.length;a++)o.push(y(r[a],e));return o.length>n.length&&n.length?o.reduce(n):n.apply(t,o)}return r},c={},g=y.operator=(r,e)=>c[r]=e;u.push((r=>(r=o((r=>r>47&&r<58||46==r)))&&((69==a()||101==a())&&(r+=o(2)+o((r=>r>=48&&r<=57))),isNaN(r=new Number(r))?n("Bad number"):r)),((r,e,t)=>34==r&&(o(),t=o((e=>e-r)),o(),"@"+t)),(r=>o((r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||36==r||95==r||r>=192))));const A=(r,e=2,t)=>{for(let n=0;n<t.length;n+=e)r(t[n],t[n+1],t[n+2])};A(p,3,[",",1,,"|",6,,"||",4,,"&",8,,"&&",5,,"^",7,,"==",9,,"!=",9,,">",10,,">=",10,,">>",11,,">>>",11,,"<",10,,"<=",10,,"<<",11,,"+",12,,"+",15,-1,"++",15,-1,"++",16,1,"-",12,,"-",15,-1,"--",15,-1,"--",16,1,"!",15,-1,"*",13,,"/",13,,"%",13,,".",18,(r,e)=>r&&[o(),r,"@"+l(18)],"[",18,r=>(o(),[".",r,i(l(0,93))]),"]",,,"(",18,(r,e)=>(o(),e=l(0,41),Array.isArray(e)&&","===e[0]?(e[0]=r,e):e?[r,i(e)]:[r]),"(",19,(r,e)=>!r&&(o(),l(0,41)||n()),")",,,]),A(g,2,["!",r=>!r,"++",r=>++r,"--",r=>--r,".",(r,e)=>r?r[e]:r,"%",(r,e)=>r%e,"/",(r,e)=>r/e,"*",(r,e)=>r*e,"+",(r,e=0)=>r+e,"-",(r,e)=>null==e?-r:r-e,">>>",(r,e)=>r>>>e,">>",(r,e)=>r>>e,"<<",(r,e)=>r<<e,">=",(r,e)=>r>=e,">",(r,e)=>r>e,"<=",(r,e)=>r<=e,"<",(r,e)=>r<e,"!=",(r,e)=>r!=e,"==",(r,e)=>r==e,"&",(r,e)=>r&e,"^",(r,e)=>r^e,"|",(r,e)=>r|e,"&&",(...r)=>r.every(Boolean),"||",(...r)=>r.some(Boolean),",",(r,e)=>e]);var d=r=>(r="string"==typeof r?t(r):r,e=>y(r,e));export{d as default,y as evaluate,t as parse};