subscript
Version:
Modular expression parser & evaluator
9 lines (8 loc) • 25.3 kB
JavaScript
var l,c,s=r=>(l=0,c=r,s.enter?.(),r=a(),c[l]?R():r||""),R=(r="Unexpected token",e=l,t=c.slice(0,e).split(`
`),o=t.pop(),n=c.slice(Math.max(0,e-40),e),p="\u032D",m=(c[e]||" ")+p,u=c.slice(e+1,e+20))=>{throw SyntaxError(`${r} at ${t.length+1}:${o.length+1}
${n}${m}${u}`)},Br=(r,e=l)=>(Array.isArray(r)&&(r.loc=e),r),k=(r,e=l,t)=>{for(;t=r(c.charCodeAt(l));)l+=t;return c.slice(e,l)},h=(r=1)=>c[l+=r],I=r=>l=r,a=(r=0,e)=>{let t,o,n;for(e&&s.enter?.(r,e);(t=s.space())&&t!==e&&(n=s.step(o,r,t,a));)o=n;return e&&(t==e?(l++,s.exit?.(r,e)):R("Unclosed "+String.fromCharCode(e-(e>42?2:1)))),o},W=(r=l)=>{for(;c.charCodeAt(r)<=32;)r++;return c.charCodeAt(r)},Co=s.id=r=>r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122||r==36||r==95||r>=192&&r!=215&&r!=247,T=(r,e=r.length)=>c.substr(l,e)===r&&!s.id(c.charCodeAt(l+e)),L=()=>(h(),a(0,41)),N=[],D={},S=(r,e=32,t,o=r.charCodeAt(0),n=r.length,p=N[o],m=r.toUpperCase()!==r,u,d)=>(e=D[r]=!p&&D[r]||e,N[o]=(y,g,E,w=l)=>(u=E,(E?r==E:(n<2||r.charCodeAt(1)===c.charCodeAt(l+1)&&(n<3||c.substr(l,n)==r))&&(!m||!s.id(c.charCodeAt(l+n)))&&(u=E=r))&&g<e&&(l+=n,(d=t(y))?Br(d,w):(l=w,u=0,!m&&!p&&!y&&R()),d)||p?.(y,g,u))),A=(r,e,t=!1)=>S(r,e,o=>o&&(n=>n&&[r,o,n])(a(e-(t?.5:0)))),_=(r,e,t)=>S(r,e,o=>t?o&&[r,o]:!o&&(o=a(e-.5))&&[r,o]),$=(r,e)=>S(r,200,t=>!t&&[,e]),ir=(r,e,t,o)=>S(r,e,(n,p,m=n)=>(p=a(e-(t?.5:0)),n?.[0]!==r&&(n=[r,n||null]),p?.[0]===r?n.push(...p.slice(1)):p?n.push(p):o||W()===r.charCodeAt(0)?n.push(null):m&&n.length===2&&(n=n[1]),n)),z=(r,e)=>S(r[0],e,t=>!t&&[r,a(0,r.charCodeAt(1))||null]),sr=(r,e)=>S(r[0],e,t=>t&&[r,t,a(0,r.charCodeAt(1))||null]),pr=(r,e)=>(s.space(),e=c.charCodeAt(l),s.id(e)&&(e<48||e>57)?k(s.id):a(r)),vr=(r,e)=>S(r,e,t=>t&&(o=>o&&[r,t,o])(pr(e))),C=(r,e,t,o=r.charCodeAt(0),n=r.length,p=N[o],m)=>(D[r]??=e,N[o]=(u,d,y,g=l)=>!u&&(y?r==y:(n<2||c.substr(l,n)==r)&&(y=r))&&d<e&&!s.id(c.charCodeAt(l+n))&&(!s.prop||s.prop(l+n))&&(I(l+n),(m=t())?Br(m,g):I(g),m)||p?.(u,d,y));s.space=r=>{for(;(r=c.charCodeAt(l))<=32;)l++;return r};s.step=(r,e,t,o,n)=>(n=N[t])&&n(r,e)||(r?null:k(s.id)||null);var nr={},f=(r,e,t=nr[r])=>nr[r]=(...o)=>e(...o)||t?.(...o),i=r=>Array.isArray(r)?r[0]==null?(e=>()=>e)(r[1]):nr[r[0]]?.(...r.slice(1))??R(`Unknown operator: ${r[0]}`,r?.loc):r===void 0?()=>{}:e=>e?.[r];var fr=46,H=48,j=57,Mr=69,Ur=101,Ne=43,Ie=45,Kr=95,Dr=110,Re=97,Oe=102,_e=65,Le=70,Gr=r=>r.indexOf("_")<0?r:r.replaceAll("_",""),lr=r=>{let e=Gr(k(t=>t===fr&&(t=c.charCodeAt(l+1))!==fr&&!(s.id(t)&&t>j&&t!==Ur&&t!==Mr)||t>=H&&t<=j||t===Kr||((t===Mr||t===Ur)&&((t=c.charCodeAt(l+1))>=H&&t<=j||t===Ne||t===Ie)?2:0)));return c.charCodeAt(l)===Dr?(h(),[,BigInt(e)]):(r=+e)!=r?R():[,r]},Pe=r=>e=>e===Kr||e>=H&&e<=j&&e-H<r||r===16&&(e>=Re&&e<=Oe||e>=_e&&e<=Le);s.number=null;N[fr]=r=>!r&&c.charCodeAt(l+1)>=H&&c.charCodeAt(l+1)<=j&&lr();for(let r=H;r<=j;r++)N[r]=e=>e?void 0:lr();N[H]=r=>{if(r)return;let e=s.number;if(e){for(let[t,o]of Object.entries(e))if(t[0]==="0"&&c[l+1]?.toLowerCase()===t[1]){h(2);let n=Gr(k(Pe(o)));return c.charCodeAt(l)===Dr?(h(),[,BigInt("0"+t[1]+n)]):[,parseInt(n,o)]}}return lr()};var Be=92,Fr=34,Hr=39,Xr=117,Qr=120,ve=123,Me=125,$r=10,Ue=13,Ke={n:`
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v",0:"\0"},jr=r=>r>=48&&r<=57?r-48:r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:-1,xr=r=>(e,t,o="",n=String.fromCharCode(r))=>{if(e||!s.string?.[n])return;h();let p=()=>{let m=c.charCodeAt(l+1);if(m===$r)return 2;if(m===Ue)return c.charCodeAt(l+2)===$r?3:2;if(m===Qr||m===Xr&&c.charCodeAt(l+2)!==ve){let u=m===Qr?2:4,d=0,y;for(let g=0;g<u;g++){if((y=jr(c.charCodeAt(l+2+g)))<0)return o+=c[l+1],2;d=d*16+y}return o+=String.fromCharCode(d),2+u}if(m===Xr){let u=0,d=l+3,y;for(;(y=jr(c.charCodeAt(d)))>=0;)u=u*16+y,d++;return d>l+3&&u<=1114111&&c.charCodeAt(d)===Me?(o+=String.fromCodePoint(u),d-l+1):(o+=c[l+1],2)}return o+=Ke[c[l+1]]||c[l+1],2};return k(m=>m-r&&(m!==Be?(o+=c[l],1):p())),c[l]===n?h():R("Bad string"),[,o]};N[Fr]=xr(Fr);N[Hr]=xr(Hr);s.string={'"':!0};var De=20;"= += -= *= /= %= |= &= ^= >>= <<=".split(" ").map(r=>A(r,De,!0));var Ge=30,Fe=40,He=140;_("!",He);A("||",Ge);A("&&",Fe);var Xe=50,Qe=60,$e=70,Wr=100,je=140;A("|",Xe);A("&",$e);A("^",Qe);A(">>",Wr);A("<<",Wr);_("~",je);var Y=90;A("<",Y);A(">",Y);A("<=",Y);A(">=",Y);var zr=80;A("==",zr);A("!=",zr);var Jr=110,ur=120,Vr=140;A("+",Jr);A("-",Jr);A("*",ur);A("/",ur);A("%",ur);_("+",Vr);_("-",Vr);var Z=150;S("++",Z,r=>r?["++",r,null]:["++",a(Z-1)]);S("--",Z,r=>r?["--",r,null]:["--",a(Z-1)]);var xe=5,We=10;ir(",",We);ir(";",xe,!0,!0);var ze=170;z("()",ze);var Yr=170,Je=160;sr("[]",Yr);vr(".",Yr);sr("()",Je);var Ve=32,Ye=s.space;s.comment??={"//":`
`,"/*":"*/"};var mr;s.space=()=>{mr||(mr=Object.entries(s.comment).map(([n,p])=>[n,p,n.charCodeAt(0)]));for(var r;r=Ye();){for(var e=0,t;t=mr[e++];)if(r===t[2]&&c.substr(l,t[0].length)===t[0]){var o=l+t[0].length;if(t[1]===`
`)for(;c.charCodeAt(o)>=Ve;)o++;else{for(;c[o]&&c.substr(o,t[1].length)!==t[1];)o++;c[o]&&(o+=t[1].length)}I(o),r=0;break}if(r)return r}return r};var Zr=80;A("===",Zr);A("!==",Zr);var Ze=30;A("??",Ze);var qe=130,be=20;A("**",qe,!0);A("**=",be,!0);var qr=90;A("in",qr);A("of",qr);var rt=20,et=100;A(">>>",et);A(">>>=",rt,!0);var cr=20;A("||=",cr,!0);A("&&=",cr,!0);A("??=",cr,!0);$("true",!0);$("false",!1);$("null",null);C("undefined",200,()=>[]);$("NaN",NaN);$("Infinity",1/0);var ar=20;S("?",ar,(r,e,t)=>r&&(e=a(ar-1))&&k(o=>o===58)&&(t=a(ar-1),["?",r,e,t]));var tt=20;A("=>",tt,!0);var ot=20;_("...",ot);var br=170;S("?.",br,(r,e)=>{if(!r)return;let t=s.space();return t===40?(h(),["?.()",r,a(0,41)||null]):t===91?(h(),["?.[]",r,a(0,93)]):(e=pr(br),e?["?.",r,e]:void 0)});var dr=140,re=160,nt=re+1;_("typeof",dr);_("void",dr);_("delete",dr);var it=r=>s.space()===40?(h(),["()",r,a(0,41)||null]):r;C("new",nt,()=>T(".target")?(h(7),["new.target"]):["new",it(a(re))]);var st=20,ee=200;s.prop=r=>W(r)!==58;z("[]",ee);z("{}",ee);A(":",st-1,!0);var pt=170,hr=96,ft=36,lt=123,ut=92,mt={n:`
`,r:"\r",t:" ",b:"\b",f:"\f",v:"\v"},te=()=>{let r=[],e="",t;for(;(t=c.charCodeAt(l))!==hr;)t?t===ut?(h(),e+=mt[c[l]]||c[l],h()):t===ft&&c.charCodeAt(l+1)===lt?(r.push([,e]),e="",h(2),r.push(a(0,125))):(e+=c[l],h()):R("Unterminated template");return r.push([,e]),h(),r},ct=r=>r.length<2&&r[0]?.[0]===void 0?r[0]||[,""]:["`",...r],at=N[hr];N[hr]=(r,e)=>r&&e<pt?s.asi&&s.newline?void 0:(h(),["``",r,...te()]):r?at?.(r,e):(h(),ct(te()));s.string["'"]=!0;s.number={"0x":16,"0b":2,"0o":8};var dt=92,ht=117,At=123,yt=125,Ct=183,wt=s.id,oe=r=>r>=48&&r<=57||r>=65&&r<=70||r>=97&&r<=102,gt=(r=l+2,e,t=0,o=0)=>{if(c.charCodeAt(l)!==dt||c.charCodeAt(l+1)!==ht)return 0;if(c.charCodeAt(r)===At){for(;oe(e=c.charCodeAt(++r));)t=t*16+(e<=57?e-48:(e&31)+9);return r>l+3&&t<=1114111&&c.charCodeAt(r)===yt?r-l+1:0}for(;o<4&&oe(c.charCodeAt(r+o));)o++;return o===4?6:0};s.id=r=>wt(r)||r===Ct||gt();var Ar=5,Et=10,yr=r=>{let e=l,t=a(Et-1);return t==null?r:r==="let"&&(t==="in"||t==="of")?(I(e),r):t[0]==="in"||t[0]==="of"?[t[0],[r,t[1]],t[2]]:t[0]===","?[r,...t.slice(1)]:[r,t]};C("let",Ar+1,()=>yr("let"));C("const",Ar+1,()=>yr("const"));C("var",Ar+1,()=>yr("var"));var q=5,St=59,B=()=>(s.space()===123||R("Expected {"),h(),a(q-.5,125)||null),U=()=>s.space()!==123?a(q+.5):(h(),a(q-.5,125)||null),kt=()=>{let r=l;return s.space()===St&&h(),s.space(),T("else")?(h(4),s.semi=!1,!0):(I(r),!1)};C("if",q+1,()=>{s.space();let r=["if",L(),U()];return kt()&&r.push(U()),r});var Tt=200;C("function",Tt,()=>{s.space();let r=!1;c[l]==="*"&&(r=!0,h(),s.space());let e=k(s.id);return e&&s.space(),r?["function*",e,L()||null,B()]:["function",e,L()||null,B()]});var b=140,Cr=20,Nt=40;_("await",b);C("yield",b,()=>(s.space(),c[l]==="*"?(h(),s.space(),["yield*",a(Cr)]):["yield",a(Cr)]));C("async",b,()=>{if(s.space(),T("function"))return["async",a(b)];let r=l,e=k(s.id);if(e){if(s.space(),c.charCodeAt(l)===Nt)return["async",e];I(r)}let t=a(Cr-.5);return t&&["async",t]});var ne=200;var It=90,Rt=175,Ot=160,_t=Ot-.5;_("static",Rt);A("instanceof",It);S("#",ne,r=>{if(r)return;let e=k(s.id);return e?"#"+e:void 0});C("class",ne,()=>{s.space();let r=k(s.id)||null;if(r==="extends")r=null,s.space();else{if(s.space(),!T("extends"))return["class",r,null,B()];h(7),s.space()}return["class",r,a(_t),B()]});var wr=47,Lt=92,Pt=91,Bt=93;S("/",140,r=>{let e=c.charCodeAt(l);if(r||e===wr||e===42||e===43||e===63)return;let t=!1,o=k(p=>p===Lt?2:p===Pt?(t=!0,1):p===Bt?(t=!1,1):p&&(t||p!==wr));c.charCodeAt(l)===wr||R("Unterminated regex"),h();let n=k(p=>p===103||p===105||p===109||p===115||p===117||p===121);return n?["//",o,n]:["//",o]});var X=5,J=125,V=59;C("while",X+1,()=>(s.space(),["while",L(),U()]));C("do",X+1,()=>(r=>(s.space(),h(5),s.space(),["do",r,L()]))(U()));C("for",X+1,()=>(s.space(),T("await")?(h(5),s.space(),["for await",L(),U()]):["for",L(),U()]));C("break",X+1,()=>{s.asi&&(s.newline=!1);let r=l,e=s.space();if(!e||e===J||e===V||s.newline)return["break"];let t=k(s.id);if(!t)return["break"];let o=s.space();return!o||o===J||o===V||s.newline?["break",t]:(I(r),["break"])});C("continue",X+1,()=>{s.asi&&(s.newline=!1);let r=l,e=s.space();if(!e||e===J||e===V||s.newline)return["continue"];let t=k(s.id);if(!t)return["continue"];let o=s.space();return!o||o===J||o===V||s.newline?["continue",t]:(I(r),["continue"])});C("return",X+1,()=>{s.asi&&(s.newline=!1);let r=s.space();return!r||r===J||r===V||s.newline?["return"]:["return",a(X)]});var gr=5;C("try",gr+1,()=>{let r=["try",B()];return s.space(),T("catch")&&(h(5),s.space(),r.push(["catch",W()===40?L():null,B()])),s.space(),T("finally")&&(h(7),r.push(["finally",B()])),r});C("throw",gr+1,()=>{if(s.asi&&(s.newline=!1),s.space(),s.newline)throw SyntaxError("Unexpected newline after throw");return["throw",a(gr)]});var pe=5,vt=20,ie=58,Mt=59,fe=125,Er=0,le=(r,e=r.length,t=r.charCodeAt(0),o=N[t])=>N[t]=(n,p,m)=>T(r)&&!n&&Er&&(!s.prop||s.prop(l+e))||o?.(n,p,m);le("case");le("default");var se=r=>{let e=[];for(;(r=s.space())!==fe&&!T("case")&&!T("default");){if(r===Mt){h();continue}s.semi=!1,e.push(a(pe+.5))||R()}return e.length>1?[";",...e]:e[0]||null},Ut=()=>{s.space()===123||R("Expected {"),h(),Er++;let r=[];try{for(;s.space()!==fe;)if(T("case")){I(l+4),s.space(),s.semi=!1;let e=a(vt-.5);s.space()===ie&&h(),r.push(["case",e,se()])}else T("default")?(I(l+7),s.space()===ie&&h(),r.push(["default",se()])):R("Expected case or default")}finally{Er--}return h(),r};C("switch",pe+1,()=>s.space()===40&&["switch",L(),...Ut()]);var Sr=5,Kt=20;C("debugger",Sr+1,()=>["debugger"]);C("with",Sr+1,()=>(s.space(),["with",L(),U()]));var Dt=["if","for","while","do","switch","try"];S(":",Kt-1,r=>typeof r=="string"&&(s.space(),Dt.some(e=>T(e)))&&[":",r,a(Sr)]);var kr=5,x=10,ue=42,Gt=N[ue];N[ue]=(r,e)=>r?Gt?.(r,e):(h(),"*");S("from",x+1,r=>r?r[0]!=="="&&r[0]!==","&&(s.space(),["from",r,a(x+1)]):!1);S("as",x+2,r=>r?(s.space(),["as",r,a(x+2)]):!1);C("import",kr,()=>T(".meta")?(h(5),["import.meta"]):["import",a(x)]);C("export",kr,()=>(s.space(),T("default")?(h(7),["export",["default",a(x)]]):["export",a(kr)]));var Tr=20,Ft=200,Ht=10,Xt=13,Qt=34,$t=35,jt=39,xt=40,me=41,Wt=91,ce=123,ae=125,zt=(r,e)=>{for(;r<e;){let t=c.charCodeAt(r++);if(t===Ht||t===Xt)return!0}return!1},Jt=r=>r===Qt||r===jt||r===Wt||r===$t,Vt=()=>k(s.id)||(Jt(c.charCodeAt(l))?a(Ft-.5):null),Yt=r=>typeof r=="string"||Array.isArray(r)&&(r[0]===void 0||r[0]==="[]"),de=r=>e=>{if(e)return;let t=l;if(s.space(),s.semi||zt(t,l))return!1;let o=Vt();if(!o||(s.space(),c.charCodeAt(l)!==xt))return!1;h();let n=a(0,me);return s.space(),c.charCodeAt(l)!==ce?!1:(h(),[r,o,n,a(0,ae)])};S("get",Tr-1,de("get"));S("set",Tr-1,de("set"));S("(",Tr-1,r=>{if(!r)return;let e,t;if(Array.isArray(r)&&r[0]==="static"&&(e="static",r=r[1]),Array.isArray(r)&&r[0]==="async"&&(t=!0,r=r[1]),!Yt(r))return;let o=a(0,me)||null;if(s.space(),c.charCodeAt(l)!==ce)return;h();let n=["=>",["()",o],a(0,ae)||null];t&&(n=["async",n]);let p=[":",r,n];return e?[e,p]:p});s.comment["#!"]=`
`;var Ce=32,Or=10,Zt=59,qt=125,he=91,Ae=40,rr=D.asi??D[";"],bt=s._baseSpace??=s.space,ro=s._baseStep??=s.step,Nr=r=>Array.isArray(r)||typeof r=="string",eo=(D[";"]??5)+1,Rr=r=>Array.isArray(r)&&(D[r[0]]<=eo||r[0]==="{}"&&Rr(r[1])),to=(r,e)=>{for(;(e=c.charCodeAt(r))<=Ce;){if(e===Or)return!0;r++}return!1},oo=(r=l,e)=>{for(;r-- >0&&(e=c.charCodeAt(r))<=Ce;)if(e===Or)return!0;return!1};s.space=(r,e)=>{for(;;){for(e=l,r=bt();e<l;)if(c.charCodeAt(e++)===Or){s.newline=!0;break}if(r===Zt&&to(l+1)){I(l+1),s.newline=s.semi=!0;continue}return r}};s.enter=()=>s.newline=s.semi=!1;s.exit=(r,e)=>{e===qt&&(s.newline=!0,s.semi=!1)};s.step=(r,e,t,o)=>{if(s.semi&&e>=rr)return!1;if(r&&!Nr(r))return null;if(Nr(r)){let p=(t===he||t===Ae)&&oo();if(s.semi||t===he&&(p||Rr(r))||t===Ae&&(Rr(r)||p&&e>=rr))return ye(r,e,o)??null}let n=s.newline;return ro(r,e,t,o)??(Nr(r)&&n?ye(r,e,o)??null:null)};var Ir=0,no=2e3,ye=s.asi=(r,e,t,o,n)=>{if(e>=rr||Ir>=no)return;s.semi=!1;let p=l;Ir++;try{o=t(rr-.5)}finally{Ir--}if(!(!o||l===p))return n=o?.[0]===";"?o.slice(1):[o],r?.[0]===";"?(r.push(...n),r):[";",r,...n]};var ge=(r,e,t,o)=>typeof r=="string"?n=>e(n,r,n):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o,n)):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n),n)):r[0]==="()"&&r.length===2?ge(r[1],e):(()=>{throw Error("Invalid assignment target")})(),we={"=":(r,e,t)=>r[e]=t,"+=":(r,e,t)=>r[e]+=t,"-=":(r,e,t)=>r[e]-=t,"*=":(r,e,t)=>r[e]*=t,"/=":(r,e,t)=>r[e]/=t,"%=":(r,e,t)=>r[e]%=t,"|=":(r,e,t)=>r[e]|=t,"&=":(r,e,t)=>r[e]&=t,"^=":(r,e,t)=>r[e]^=t,">>=":(r,e,t)=>r[e]>>=t,"<<=":(r,e,t)=>r[e]<<=t};for(let r in we)f(r,(e,t)=>(t=i(t),ge(e,(o,n,p)=>we[r](o,n,t(p)))));f("!",r=>(r=i(r),e=>!r(e)));f("||",(r,e)=>(r=i(r),e=i(e),t=>r(t)||e(t)));f("&&",(r,e)=>(r=i(r),e=i(e),t=>r(t)&&e(t)));f("~",r=>(r=i(r),e=>~r(e)));f("|",(r,e)=>(r=i(r),e=i(e),t=>r(t)|e(t)));f("&",(r,e)=>(r=i(r),e=i(e),t=>r(t)&e(t)));f("^",(r,e)=>(r=i(r),e=i(e),t=>r(t)^e(t)));f(">>",(r,e)=>(r=i(r),e=i(e),t=>r(t)>>e(t)));f("<<",(r,e)=>(r=i(r),e=i(e),t=>r(t)<<e(t)));f(">",(r,e)=>(r=i(r),e=i(e),t=>r(t)>e(t)));f("<",(r,e)=>(r=i(r),e=i(e),t=>r(t)<e(t)));f(">=",(r,e)=>(r=i(r),e=i(e),t=>r(t)>=e(t)));f("<=",(r,e)=>(r=i(r),e=i(e),t=>r(t)<=e(t)));f("==",(r,e)=>(r=i(r),e=i(e),t=>r(t)==e(t)));f("!=",(r,e)=>(r=i(r),e=i(e),t=>r(t)!=e(t)));f("+",(r,e)=>e!==void 0?(r=i(r),e=i(e),t=>r(t)+e(t)):(r=i(r),t=>+r(t)));f("-",(r,e)=>e!==void 0?(r=i(r),e=i(e),t=>r(t)-e(t)):(r=i(r),t=>-r(t)));f("*",(r,e)=>(r=i(r),e=i(e),t=>r(t)*e(t)));f("/",(r,e)=>(r=i(r),e=i(e),t=>r(t)/e(t)));f("%",(r,e)=>(r=i(r),e=i(e),t=>r(t)%e(t)));var _r=(r,e,t,o)=>typeof r=="string"?n=>e(n,r):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o)):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n))):r[0]==="()"&&r.length===2?_r(r[1],e):(()=>{throw Error("Invalid increment target")})();f("++",(r,e)=>_r(r,e===null?(t,o)=>t[o]++:(t,o)=>++t[o]));f("--",(r,e)=>_r(r,e===null?(t,o)=>t[o]--:(t,o)=>--t[o]));var Ee=(...r)=>(r=r.map(i),e=>{let t;for(let o of r)t=o(e);return t});f(",",Ee);f(";",Ee);var Q=r=>r?.[0]==="_"&&r[1]==="_"||r==="constructor"||r==="prototype",er=r=>{throw Error(r)};f("[]",(r,e)=>e===void 0?(r=r?r[0]===","?r.slice(1):[r]:[],r=r.map(t=>t==null?(()=>{}):t[0]==="..."?(t=i(t[1]),o=>t(o)):(t=i(t),o=>[t(o)])),t=>r.flatMap(o=>o(t))):(e==null&&er("Missing index"),r=i(r),e=i(e),t=>{let o=e(t);return Q(o)?void 0:r(t)[o]}));f(".",(r,e)=>(r=i(r),e=e[0]?e:e[1],Q(e)?()=>{}:t=>r(t)[e]));f("()",(r,e)=>{if(e===void 0)return r==null?er("Empty ()"):i(r);let t=n=>n?.[0]===","&&n.slice(1).some(p=>p==null||t(p));t(e)&&er("Empty argument");let o=e?e[0]===","?(e=e.slice(1).map(i),n=>e.map(p=>p(n))):(e=i(e),n=>[e(n)]):()=>[];return Lr(r,(n,p,m)=>n[p](...o(m)))});var v=r=>typeof r=="string"||Array.isArray(r)&&(r[0]==="."||r[0]==="?."||r[0]==="[]"&&r.length===3||r[0]==="?.[]"||r[0]==="()"&&r.length===2&&v(r[1])||r[0]==="{}"),Lr=(r,e,t,o)=>r==null?er("Empty ()"):r[0]==="()"&&r.length==2?Lr(r[1],e):typeof r=="string"?n=>e(n,r,n):r[0]==="."?(t=i(r[1]),o=r[2],n=>e(t(n),o,n)):r[0]==="?."?(t=i(r[1]),o=r[2],n=>{let p=t(n);return p==null?void 0:e(p,o,n)}):r[0]==="[]"&&r.length===3?(t=i(r[1]),o=i(r[2]),n=>e(t(n),o(n),n)):r[0]==="?.[]"?(t=i(r[1]),o=i(r[2]),n=>{let p=t(n);return p==null?void 0:e(p,o(n),n)}):(r=i(r),n=>e([r(n)],0,n)),K=Lr;f("===",(r,e)=>(r=i(r),e=i(e),t=>r(t)===e(t)));f("!==",(r,e)=>(r=i(r),e=i(e),t=>r(t)!==e(t)));f("??",(r,e)=>(r=i(r),e=i(e),t=>r(t)??e(t)));var io=r=>{throw Error(r)};f("**",(r,e)=>(r=i(r),e=i(e),t=>r(t)**e(t)));f("**=",(r,e)=>(v(r)||io("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]**=e(n))));f("in",(r,e)=>(r=i(r),e=i(e),t=>r(t)in e(t)));var so=r=>{throw Error(r)};f(">>>",(r,e)=>(r=i(r),e=i(e),t=>r(t)>>>e(t)));f(">>>=",(r,e)=>(v(r)||so("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]>>>=e(n))));var po=r=>r[0]?.[0]===","?r[0].slice(1):r,G=(r,e,t)=>{if(typeof r=="string"){t[r]=e;return}let[o,...n]=r,p=po(n);if(o==="{}"){let m=[];for(let u of p){if(Array.isArray(u)&&u[0]==="..."){let w={};for(let O in e)m.includes(O)||(w[O]=e[O]);t[u[1]]=w;break}let d,y,g;typeof u=="string"?d=y=u:u[0]==="="?(typeof u[1]=="string"?d=y=u[1]:[,d,y]=u[1],g=u[2]):[,d,y]=u,m.push(d);let E=e[d];E===void 0&&g&&(E=i(g)(t)),G(y,E,t)}}else if(o==="[]"){let m=0;for(let u of p){if(u===null){m++;continue}if(Array.isArray(u)&&u[0]==="..."){t[u[1]]=e.slice(m);break}let d=u,y;Array.isArray(u)&&u[0]==="="&&([,d,y]=u);let g=e[m++];g===void 0&&y&&(g=i(y)(t)),G(d,g,t)}}},Pr=(...r)=>(r=r.map(e=>{if(typeof e=="string")return t=>{t[e]=void 0};if(e[0]==="="){let[,t,o]=e,n=i(o);return typeof t=="string"?p=>{p[t]=n(p)}:p=>G(t,n(p),p)}return i(e)}),e=>{for(let t of r)t(e)});f("let",Pr);f("const",Pr);f("var",Pr);var tr=r=>{throw Error(r)};f("=",(r,e)=>{if(Array.isArray(r)&&(r[0]==="let"||r[0]==="const"||r[0]==="var")){let t=r[1];return e=i(e),typeof t=="string"?o=>{o[t]=e(o)}:o=>G(t,e(o),o)}return v(r)||tr("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]=e(n))});f("||=",(r,e)=>(v(r)||tr("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]||=e(n))));f("&&=",(r,e)=>(v(r)||tr("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]&&=e(n))));f("??=",(r,e)=>(v(r)||tr("Invalid assignment target"),e=i(e),K(r,(t,o,n)=>t[o]??=e(n))));f("?",(r,e,t)=>(r=i(r),e=i(e),t=i(t),o=>r(o)?e(o):t(o)));var P=[];f("=>",(r,e)=>{r=r?.[0]==="()"?r[1]:r;let t=r?r[0]===","?r.slice(1):[r]:[],o=-1,n=null,p=t[t.length-1];Array.isArray(p)&&p[0]==="..."&&(o=t.length-1,n=p[1],t.length--);let m=e?.[0]==="{}";return e=i(m?["{",e[1]]:e),u=>(...d)=>{let y={};t.forEach((E,w)=>y[E]=d[w]),n&&(y[n]=d.slice(o));let g=new Proxy(y,{get:(E,w)=>w in E?E[w]:u?.[w],set:(E,w,O)=>((w in E?E:u)[w]=O,!0),has:(E,w)=>w in E||(u?w in u:!1)});try{let E=e(g);return m?void 0:E}catch(E){if(E===P)return E[0];throw E}}});f("...",r=>(r=i(r),e=>Object.entries(r(e))));f("?.",(r,e)=>(r=i(r),Q(e)?()=>{}:t=>r(t)?.[e]));f("?.[]",(r,e)=>(r=i(r),e=i(e),t=>{let o=e(t);return Q(o)?void 0:r(t)?.[o]}));f("?.()",(r,e)=>{let t=e?e[0]===","?(e=e.slice(1).map(i),n=>e.map(p=>p(n))):(e=i(e),n=>[e(n)]):()=>[];if(r[0]==="."||r[0]==="?."){let n=i(r[1]),p=r[2];return Q(p)?()=>{}:m=>n(m)?.[p]?.(...t(m))}if((r[0]==="[]"||r[0]==="?.[]")&&r.length===3){let n=i(r[1]),p=i(r[2]);return m=>{let u=p(m);return Q(u)?void 0:n(m)?.[u]?.(...t(m))}}let o=i(r);return n=>o(n)?.(...t(n))});f("typeof",r=>(r=i(r),e=>typeof r(e)));f("void",r=>(r=i(r),e=>(r(e),void 0)));f("delete",r=>{if(r[0]==="."){let e=i(r[1]),t=r[2];return o=>delete e(o)[t]}if(r[0]==="[]"){let e=i(r[1]),t=i(r[2]);return o=>delete e(o)[t(o)]}return()=>!0});f("new",r=>{let e=i(r?.[0]==="()"?r[1]:r),t=r?.[0]==="()"?r[2]:null,o=t?t[0]===","?(n=>p=>n.map(m=>m(p)))(t.slice(1).map(i)):(n=>p=>[n(p)])(i(t)):()=>[];return n=>new(e(n))(...o(n))});var or=Symbol("accessor");f("get",(r,e)=>(e=e?i(e):()=>{},t=>[[or,r,{get:function(){let o=Object.create(t||{});return o.this=this,e(o)}}]]));f("set",(r,e,t)=>(t=t?i(t):()=>{},o=>[[or,r,{set:function(n){let p=Object.create(o||{});p.this=this,p[e]=n,t(p)}}]]));var fo=r=>r==null||typeof r=="string"||[":",",","...","get","set"].includes(r[0]);f("{}",(r,e)=>{if(e!==void 0)return;if(!fo(r))return i(["{",r]);r=r?r[0]!==","?[r]:r.slice(1):[];let t=r.map(o=>i(typeof o=="string"?[":",o,o]:o));return o=>{let n={},p={};for(let m of t.flatMap(u=>u(o)))if(m[0]===or){let[,u,d]=m;p[u]={...p[u],...d,configurable:!0,enumerable:!0}}else n[m[0]]=m[1];for(let m in p)Object.defineProperty(n,m,p[m]);return n}});f("{",r=>(r=r?i(r):()=>{},e=>r(Object.create(e))));f(":",(r,e)=>(e=i(e),Array.isArray(r)?(r=i(r),t=>[[r(t),e(t)]]):t=>[[r,e(t)]]));f("`",(...r)=>(r=r.map(i),e=>r.map(t=>t(e)).join("")));f("``",(r,...e)=>{r=i(r);let t=[],o=[];for(let p of e)Array.isArray(p)&&p[0]===void 0?t.push(p[1]):o.push(i(p));let n=Object.assign([...t],{raw:t});return p=>r(p)(n,...o.map(m=>m(p)))});f("function",(r,e,t)=>{t=t?i(t):()=>{};let o=e?e[0]===","?e.slice(1):[e]:[],n=null,p=-1,m=o[o.length-1];return Array.isArray(m)&&m[0]==="..."&&(p=o.length-1,n=m[1],o.length--),u=>{let d=(...y)=>{let g={};o.forEach((w,O)=>g[w]=y[O]),n&&(g[n]=y.slice(p));let E=new Proxy(g,{get:(w,O)=>O in w?w[O]:u[O],set:(w,O,Te)=>((O in w?w:u)[O]=Te,!0),has:(w,O)=>O in w||O in u});try{return t(E)}catch(w){if(w===P)return w[0];throw w}};return r&&(u[r]=d),d}});f("function*",(r,e,t)=>{throw Error("Generator functions are not supported in evaluation")});f("async",r=>{let e=i(r);return t=>{let o=e(t);return async function(...n){return o(...n)}}});f("await",r=>(r=i(r),async e=>await r(e)));f("yield",r=>(r=r?i(r):null,e=>{throw{__yield__:r?r(e):void 0}}));f("yield*",r=>(r=i(r),e=>{throw{__yield_all__:r(e)}}));var lo=Symbol("static"),uo=r=>{throw Error(r)};f("instanceof",(r,e)=>(r=i(r),e=i(e),t=>r(t)instanceof e(t)));f("class",(r,e,t)=>(e=e?i(e):null,t=t?i(t):null,o=>{let n=e?e(o):Object,p=function(...m){if(!(this instanceof p))return uo("Class constructor must be called with new");let u=e?Reflect.construct(n,m,p):this;return p.prototype.__constructor__&&p.prototype.__constructor__.apply(u,m),u};if(Object.setPrototypeOf(p.prototype,n.prototype),Object.setPrototypeOf(p,n),t){let m=Object.create(o);m.super=n;let u=t(m),d=Array.isArray(u)&&typeof u[0]?.[0]=="string"?u:[];for(let[y,g]of d)y==="constructor"?p.prototype.__constructor__=g:p.prototype[y]=g}return r&&(o[r]=p),p}));f("static",r=>(r=i(r),e=>[[lo,r(e)]]));f("//",(r,e)=>{let t=new RegExp(r,e||"");return()=>t});f("if",(r,e,t)=>(r=i(r),e=i(e),t=t!==void 0?i(t):null,o=>r(o)?e(o):t?.(o)));var M=Symbol("break"),F=Symbol("continue");f("while",(r,e)=>(r=i(r),e=i(e),t=>{let o;for(;r(t);)try{o=e(t)}catch(n){if(n===M)break;if(n===F)continue;if(n===P)return n[0];throw n}return o}));f("do",(r,e)=>(r=i(r),e=i(e),t=>{let o;do try{o=r(t)}catch(n){if(n===M)break;if(n===F)continue;if(n===P)return n[0];throw n}while(e(t));return o}));f("for",(r,e)=>{if(Array.isArray(r)&&r[0]===";"){let[,t,o,n]=r;return t=t?i(t):null,o=o?i(o):()=>!0,n=n?i(n):null,e=i(e),p=>{let m;for(t?.(p);o(p);n?.(p))try{m=e(p)}catch(u){if(u===M)break;if(u===F)continue;if(u===P)return u[0];throw u}return m}}if(Array.isArray(r)&&(r[0]==="in"||r[0]==="of")){let[t,o,n]=r;if(Array.isArray(o)&&(o[0]==="let"||o[0]==="const"||o[0]==="var")&&(o=o[1]),t==="in")return co(o,n,e);if(t==="of")return mo(o,n,e)}});var mo=(r,e,t)=>{e=i(e),t=i(t);let o=Array.isArray(r);return n=>{let p,m=o?null:n[r];for(let u of e(n)){o?G(r,u,n):n[r]=u;try{p=t(n)}catch(d){if(d===M)break;if(d===F)continue;if(d===P)return d[0];throw d}}return o||(n[r]=m),p}},co=(r,e,t)=>{e=i(e),t=i(t);let o=Array.isArray(r);return n=>{let p,m=o?null:n[r];for(let u in e(n)){o?G(r,u,n):n[r]=u;try{p=t(n)}catch(d){if(d===M)break;if(d===F)continue;if(d===P)return d[0];throw d}}return o||(n[r]=m),p}};f("break",()=>()=>{throw M});f("continue",()=>()=>{throw F});f("return",r=>(r=r!==void 0?i(r):null,e=>{throw P[0]=r?.(e),P}));f("try",(r,...e)=>{r=r?i(r):null;let t=e.find(u=>u?.[0]==="catch"),o=e.find(u=>u?.[0]==="finally"),n=t?.[1],p=t?.[2]?i(t[2]):null,m=o?.[1]?i(o[1]):null;return u=>{let d;try{d=r?.(u)}catch(y){if(y===M||y===F||y===P)throw y;if(n!=null&&p){let g=n in u,E=u[n];u[n]=y;try{d=p(u)}finally{g?u[n]=E:delete u[n]}}else if(!p)throw y}finally{m?.(u)}return d}});f("throw",r=>(r=i(r),e=>{throw r(e)}));f("switch",(r,...e)=>(r=i(r),e.length?(e=e.map(t=>[t[0]==="case"?i(t[1]):null,(t[0]==="case"?t[2]:t[1])?.[0]===";"?(t[0]==="case"?t[2]:t[1]).slice(1).map(i):(t[0]==="case"?t[2]:t[1])?[i(t[0]==="case"?t[2]:t[1])]:[]]),t=>{let o=r(t),n=!1,p;for(let[u,d]of e)if(n||u===null||u(t)===o)for(n=!0,m=0;m<d.length;m++)try{p=d[m](t)}catch(y){if(y===M)return p;throw y}var m;return p}):t=>r(t)));f("import",()=>()=>{});f("export",()=>()=>{});f("from",(r,e)=>()=>{});f("as",(r,e)=>()=>{});f("default",r=>i(r));var Se=new WeakMap,ao=(r,...e)=>typeof r=="string"?i(s(r)):Se.get(r)||Se.set(r,ho(r,e)).get(r),ke=57344,ho=(r,e)=>{let t=r.reduce((p,m,u)=>p+(u?String.fromCharCode(ke+u-1):"")+m,""),o=s(t),n=p=>{if(typeof p=="string"&&p.length===1){let m=p.charCodeAt(0)-ke,u;if(m>=0&&m<e.length)return u=e[m],Ao(u)?u:[,u]}return Array.isArray(p)?p.map(n):p};return i(n(o))},Ao=r=>typeof r=="string"||Array.isArray(r)&&(typeof r[0]=="string"||r[0]===void 0),yo=ao;export{sr as access,A as binary,i as compile,c as cur,yo as default,R as err,a as expr,z as group,Co as id,l as idx,C as keyword,$ as literal,Br as loc,N as lookup,vr as member,ir as nary,k as next,f as operator,nr as operators,L as parens,s as parse,W as peek,D as prec,pr as propName,I as seek,h as skip,S as token,_ as unary,T as word};