pxt-core 8.2.4 → 8.2.7
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/built/backendutils.js +19 -1
- package/built/cli.js +1 -0
- package/built/pxt-common.json +1 -1
- package/built/pxt.js +191 -33
- package/built/pxtblockly.js +17 -4
- package/built/pxtblocks.d.ts +1 -0
- package/built/pxtblocks.js +17 -4
- package/built/pxtcompiler.d.ts +1 -0
- package/built/pxtcompiler.js +34 -8
- package/built/pxteditor.d.ts +1 -0
- package/built/pxteditor.js +5 -0
- package/built/pxtlib.d.ts +14 -0
- package/built/pxtlib.js +117 -9
- package/built/pxtpy.d.ts +1 -0
- package/built/pxtpy.js +39 -16
- package/built/target.js +1 -1
- package/built/web/blockly.css +1 -1
- package/built/web/main.js +1 -1
- package/built/web/pxtapp.js +1 -1
- package/built/web/pxtasseteditor.js +1 -1
- package/built/web/pxtblockly.js +1 -1
- package/built/web/pxtblocks.js +1 -1
- package/built/web/pxtcompiler.js +1 -1
- package/built/web/pxteditor.js +1 -1
- package/built/web/pxtembed.js +2 -2
- package/built/web/pxtlib.js +1 -1
- package/built/web/pxtpy.js +1 -1
- package/built/web/pxtworker.js +1 -1
- package/built/web/react-common-authcode.css +98 -0
- package/built/web/react-common-skillmap.css +1 -1
- package/built/web/rtlblockly.css +1 -1
- package/built/web/rtlreact-common-skillmap.css +1 -1
- package/built/web/rtlsemantic.css +1 -1
- package/built/web/semantic.css +1 -1
- package/built/web/skillmap/css/main.3684f34d.chunk.css +1 -0
- package/built/web/skillmap/js/2.26325281.chunk.js +2 -0
- package/built/web/skillmap/js/main.b87a119c.chunk.js +1 -0
- package/localtypings/react.d.ts +5 -0
- package/package.json +1 -1
- package/react-common/components/controls/Checkbox.tsx +1 -1
- package/react-common/components/palette/ColorPickerField.tsx +65 -0
- package/react-common/components/palette/PaletteEditor.tsx +66 -0
- package/react-common/components/palette/PalettePicker.tsx +52 -0
- package/react-common/components/palette/PaletteSwatch.tsx +27 -0
- package/react-common/components/palette/Palettes.ts +289 -0
- package/react-common/components/profile/SignInModal.tsx +100 -0
- package/react-common/components/profile/UserPane.tsx +17 -9
- package/react-common/styles/palette/ColorPickerField.less +21 -0
- package/react-common/styles/palette/PalettePicker.less +10 -0
- package/react-common/styles/palette/PaletteSwatch.less +27 -0
- package/react-common/styles/palette/palette.less +3 -0
- package/react-common/styles/profile/profile.less +64 -1
- package/react-common/styles/react-common.less +1 -0
- package/theme/asset-editor.less +5 -0
- package/theme/blockly-core.less +1 -1
- package/theme/common.less +13 -2
- package/theme/greenscreen.less +4 -1
- package/theme/home.less +0 -5
- package/theme/image-editor/bottomBar.less +1 -1
- package/theme/tutorial-sidebar.less +43 -2
- package/webapp/public/skillmap.html +2 -2
- package/built/web/skillmap/css/main.c5811548.chunk.css +0 -1
- package/built/web/skillmap/js/2.26b9a6f6.chunk.js +0 -2
- package/built/web/skillmap/js/main.98eed582.chunk.js +0 -1
package/built/web/pxtpy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var pxt;!function(e){!function(e){let t;!function(e){e[e.NonLocal=0]="NonLocal",e[e.Global=1]="Global"}(t=e.VarModifier||(e.VarModifier={})),e.isIndex=function(e){return"Index"===e.kind},e.isSubscript=function(e){return"Subscript"===e.kind}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){var n=e.blocks;let r,i,s,o,a,l,u,c,p,f,m=0,d=0,y=0,k="???";function x(e){return null==e}function T(e){return null!=e}function g(t){return e.tickEvent("python.todo.statement",{kind:t.kind}),n.mkStmt(n.mkText("TODO: "+t.kind))}function h(t){return e.tickEvent("python.todo.expression",{kind:t.kind}),n.mkText(" {TODO: "+t.kind+"} ")}const v=L({primType:"string"}),S=L({primType:"number"}),b=L({primType:"boolean"}),N=L({primType:"void"}),E=L({primType:"any"});let C;const U={str:v,string:v,number:S,bool:b,void:N,any:E};function A(e){switch(e){case ts.SyntaxKind.StringKeyword:return v;case ts.SyntaxKind.NumberKeyword:return S;case ts.SyntaxKind.BooleanKeyword:return b;case ts.SyntaxKind.VoidKeyword:return N;case ts.SyntaxKind.AnyKeyword:return E;default:return C}}function P(t){let n=e.U.flatClone(t);return delete n.pyAST,delete n.pyInstanceType,delete n.pyRetType,delete n.pySymbolType,delete n.moduleTypeMarker,delete n.declared,n.parameters&&(n.parameters=n.parameters.map((t=>(delete(t=e.U.flatClone(t)).pyType,t)))),n}function w(t){if("("==t[0]&&e.U.endsWith(t,")"))return w(t.slice(1,-1));const n=t.indexOf(" => ");if(n>0){const e=t.slice(n+4);if(-1==e.indexOf(")[]")){const r=w(e),i=t.slice(1,n-1);return $(r,(i?i.split(/, /):[]).map((e=>w(e.replace(/\w+\??: /,"")))))}}if(e.U.endsWith(t,"[]"))return F(w(t.slice(0,-2)));if("_py.Array"===t)return F(E);const r=e.U.lookup(U,t);if(r)return r;if(!!t&&!isNaN(t))return S;if("T"==t||"U"==t)return L({primType:"'"+t});if(t.indexOf("|")>=0){return L({primType:"@union",typeArgs:t.split("|").map((e=>e.trim())).map(w)})}let i=_(t+"@type")||_(t);return i?7==i.kind?S:8==i.kind||9==i.kind?i.pyInstanceType||L({classType:i}):6==i.kind?S:(H(null,9502,e.U.lf("'{0}' is not a type near '{1}'",t,k||"???")),L({primType:t})):(H(null,9501,e.U.lf("unknown type '{0}' near '{1}'",t,k||"???")),L({primType:t}))}function I(t){var n;if(!t.pySymbolType){if(k=t.pyQName,t.parameters){pxtc.service.isTaggedTemplate(t)&&(t.parameters=[{name:"literal",description:"",type:"string",options:{}}]);for(let e of t.parameters)e.pyType||(e.pyType=w(e.type))}const r=t.pyRetType;if(xe(t))t.pyRetType=L({moduleType:t});else if(t.retType)if((null===(n=t.qName)||void 0===n?void 0:n.endsWith(".__constructor"))&&"void"===t.retType){const e=K(t.qName.substring(0,t.qName.lastIndexOf(".")));t.pyRetType=e?L({classType:e}):w(t.retType)}else t.pyRetType=w(t.retType);else t.pyRetType||(e.U.oops("no type for: "+t.pyQName),t.pyRetType=L({}));if(r&&ee(t.pyAST,r,t.pyRetType),3==t.kind||1==t.kind){let n=t.parameters.map((e=>e.pyType));if(n.some(x))return H(null,9526,e.U.lf("function symbol is missing parameter types near '{1}'",k||"???")),L({});t.pySymbolType=$(t.pyRetType,n.filter(T))}else t.pySymbolType=t.pyRetType;8!=t.kind&&9!=t.kind||(t.pyInstanceType=L({classType:t})),k=void 0}return t.pySymbolType}function _(t){return e.U.lookup(i,t)||e.U.lookup(r,t)}function K(e){var t;if(!e)return;let n=_(e);if(n)I(n);else if(e.indexOf(".")&&!e.endsWith(".__constructor")){const n=e.substring(0,e.lastIndexOf(".")),r=K(n);if(8===(null==r?void 0:r.kind)&&(null===(t=r.extendsTypes)||void 0===t?void 0:t.length))return K(r.extendsTypes[0]+e.substring(n.length))}return n}function L(t={}){let n=e.U.flatClone(t);return n.tid=++d,n}function F(e){return L({primType:"@array",typeArgs:[e]})}function $(e,t){return L({primType:"@fn"+t.length,typeArgs:[e].concat(t)})}function O(t){return!!e.U.startsWith(t.primType||"","@fn")}function R(t){return!!t.primType&&!e.U.startsWith(t.primType,"@")}function D(t){return!!e.U.startsWith(t.primType||"","@union")}function q(){return s.currFun||s.currClass||s.currModule}function M(){let e=q();for(;e&&e.parent;)e=e.parent;return e}function G(){return"main"==s.currModule.name&&!s.currFun&&!s.currClass}function B(t,n,r){const i=K(n);return i||H(t,9503,e.U.lf("No module named '{0}'",n)),i}function Q(e,n,r,i){i||(i=q());let s=i.vars[e],o=null==s?void 0:s.symbol;if(!o){let n=W(i);n&&(n+=".");let a=n+e;o="ClassDef"===i.kind?oe(2,a):!ae(i)||r!==t.VarModifier.Global&&r!==t.VarModifier.NonLocal?ae(i)?se(4,e):oe(4,a):oe(4,e),s={symbol:o,modifier:r},i.vars[e]=s}for(let e of Object.keys(n))o[e]=n[e];return s}function z(e){return e.unifyWith?(e.unifyWith=z(e.unifyWith),e.unifyWith):e}function W(e){let t=e,n="";t.parent&&"FunctionDef"!==t.parent.kind&&"AsyncFunctionDef"!==t.parent.kind&&(n=W(t.parent),n?n+=".":n="");let r=e;return"Module"==e.kind&&"main"==r.name?"":r.name?n+r.name:n+"?"+e.kind}function j(t){let n=e.U.lookup(Ue,t);if(n)return n;for(let n of e.U.values(s.currModule.vars)){let r=n.symbol;if(r.isImport){if(r.expandsTo==t)return r.pyName||H(null,9553,lf("missing pyName")),r.pyName;if(r.isImport&&e.U.startsWith(t,(r.expandsTo||"")+"."))return r.pyName+t.slice(r.expandsTo.length)}}return t}function V(e){return(e=z(e)).primType?e.typeArgs&&"@array"==e.primType?V(e.typeArgs[0])+"[]":O(e)&&e.typeArgs?"("+e.typeArgs.slice(1).map((e=>"_: "+V(e))).join(", ")+") => "+V(e.typeArgs[0]):D(e)&&e.typeArgs?e.typeArgs.map(V).join(" | "):e.primType+"":e.classType&&e.classType.pyQName?j(e.classType.pyQName)+"":e.moduleType&&e.moduleType.pyQName?j(e.moduleType.pyQName)+"":"any"}function H(e,t,n){l.push(function(e,t,n,r){return e||(e=o),e&&s&&s.currModule?{fileName:a,start:e.startPos,length:e.endPos-e.startPos,line:void 0,column:void 0,code:n,category:t,messageText:r}:{fileName:a,start:0,length:0,line:void 0,column:void 0,code:n,category:t,messageText:r}}(e,pxtc.DiagnosticCategory.Error,t,n))}function J(e){return e.primType?e.primType:e.classType?e.classType:e.moduleType?(e.moduleType.moduleTypeMarker||(e.moduleType.moduleTypeMarker={}),e.moduleType.moduleTypeMarker):null}function X(e){return!J(z(e))}function Y(t,n,r){var i;(n=z(n)).classType!=r&&(X(n)?n.classType=r:ee(t,n,(I(i=r),i.pyInstanceType||H(null,9527,e.U.lf("Instance type symbol '{0}' is missing pyInstanceType",i)),i.pyInstanceType)))}function Z(e,t){ee(e,ke(e),t)}function ee(t,n,r){if(n===r)return;if((n=z(n))===(r=z(r))||ie(n)||ie(r))return;if("any"===n.primType)return void(n.unifyWith=r);const i=J(n),s=J(r);if(i&&s)if(i===s){if(n.unifyWith=r,n.typeArgs&&r.typeArgs)for(let e=0;e<Math.min(n.typeArgs.length,r.typeArgs.length);++e)ee(t,n.typeArgs[e],r.typeArgs[e]);n.unifyWith=r}else!function(t,n,r){H(t,9500,e.U.lf("types not compatible: {0} and {1}",V(n),V(r)))}(t,n,r);else i&&!s?ee(t,r,n):(y++,n.unifyWith=r)}function te(e,t){const n=z(e),r=z(t);if(n===r)return!0;const i=J(n),s=J(r);if(i===s)return!0;if(i&&s){if(re(i)&&re(s)&&i.extendsTypes&&i.extendsTypes.length&&i.extendsTypes.some((e=>e===s.qName)))return!0;if(D(r)){for(let e of r.typeArgs||[])if(te(n,e))return!0;return!1}}return!1}function ne(e,t){const n=z(ke(e)),r=z(t);te(n,r)||(O(n)||O(r)||R(n)||R(r))&&ee(e,n,r)}function re(e){var t;return!!(null===(t=e)||void 0===t?void 0:t.name)}function ie(e){var t;return!!(null===(t=null==e?void 0:e.primType)||void 0===t?void 0:t.startsWith("'"))}function se(e,t){let n=/(.*)\.(.*)/.exec(t),r=n?n[2]:t;return{kind:e,name:r,pyName:r,qName:t,pyQName:t,namespace:n?n[1]:"",attributes:{},pyRetType:L()}}function oe(t,n){let r=i[n];return r?(r.kind=t,r):(r=se(t,n),r.pyQName||H(null,9527,e.U.lf("Symbol '{0}' is missing pyQName",n)),i[r.pyQName]=r,r)}function ae(e){let t=e;for(;t;){if("FunctionDef"==t.kind)return!0;t=t.parent}return!1}function le(t,n,r){if(!n.symInfo){let i=W(n);e.U.endsWith(i,".__init__")&&(i=i.slice(0,-9)+".__constructor"),ae(r=r||q())?n.symInfo=se(t,i):n.symInfo=oe(t,i);const s=n.symInfo;s.pyAST=n,s.pyName||H(null,9528,e.U.lf("Symbol '{0}' is missing pyName",s.qName||s.name)),r.vars[s.pyName]={symbol:s}}return n.symInfo}function ue(t){let n=t.symInfo.qName;return e.U.values(i).filter((e=>e.namespace==n&&2==e.kind))}function ce(t,n,r,i=!1,s=!1){let o;o="__init__"===n?t.pyQName+".__constructor":n.startsWith(t.pyQName+".")?n:t.pyQName+"."+n;let a=K(o);if(a)return a;if(!s)for(let i of t.extendsTypes||[]){let s=K(i);if(s){s==t&&e.U.userError("field lookup loop on: "+s.qName+" / "+n);let i=ce(s,n,r,!0);if(i)return i}}if(!i&&t.pyAST&&"ClassDef"==t.pyAST.kind){let e=oe(2,o);return e.isInstance=!r,e}return null}function pe(t,n,r=!1){const i=ke(t),o=function(e){let t=z(e);return[t.classType,...fe(t.primType),t.moduleType].filter(T)}(i);for(let l of o){let o=!!i.moduleType,u=ce(l,n,o,r);if(u)return o?u.isInstance&&H(null,9505,e.U.lf("the field '{0}' of '{1}' is not static",n,l.pyQName)):ze(t)?u.isProtected=!0:"Name"==(a=t).kind&&"self"==a.id&&(s.currClass||H(null,9529,e.U.lf("no class context found for {0}",u.pyQName)),u.namespace!=s.currClass.symInfo.qName&&(u.isProtected=!0)),u}var a;return null}function fe(e){let t=[];return"@array"==e?t=[_("_py.Array"),_("Array")]:"string"==e&&(t=[_("_py.String"),_("String")]),t.filter((e=>!!e))}function me(t){let n=q(),r=e.U.lookup(n.vars,t);if(r)return r;for(;n;){let r=e.U.lookup(n.vars,t);if(r)return r;do{n=n.parent}while(n&&"ClassDef"==n.kind)}return null}function de(e){if(!e)return null;const t=e.indexOf(".");if(t>0){const n=me(e.slice(0,t)),r=null==n?void 0:n.symbol;r&&r.pyQName!=r.pyName&&(e=r.pyQName+e.slice(t))}else{const t=me(e);if(t)return t}let n=K(e);return n?{symbol:n}:void 0}function ye(e){var t;return null===(t=de(e))||void 0===t?void 0:t.symbol}function ke(e){return e.tsType?z(e.tsType):(e.tsType=L(),e.tsType)}function xe(e){if(!e)return!1;switch(e.kind){case 5:case 9:case 8:case 6:return!0;default:return!1}}function Te(t){const n=e.U.flatClone(s);let r;try{r=t()}finally{s=n}return r}function ge(e,t){return 0==t.length?n.mkText(""):n.mkGroup([n.mkText("/* TODO: "+e+" "),n.mkGroup(t),n.mkText(" */"),n.mkNewLine()])}function he(e){let t=tt(e.value);return e.arg?n.mkInfix(n.mkText(e.arg),"=",t):n.mkGroup([n.mkText("**"),t])}function ve(n){if(!n)return L();let r=Re(n);if(r){let t=_(r+"@type")||_(r);if(t){if(I(t),6==t.kind)return S;if(t.pyInstanceType)return t.pyInstanceType}else if(U[r])return U[r];H(n,9506,e.U.lf("cannot find type '{0}'",r))}else if(t.isSubscript(n)){if("List"===Re(n.value)&&t.isIndex(n.slice)){return F(ve(n.slice.value))}}return H(n,9507,e.U.lf("invalid type syntax")),L({})}function Se(e){return e.pyName&&"_"==e.pyName[0]?e.isProtected?n.mkText("protected "):n.mkText("private "):n.mkText("")}const be={Sub:1,Div:1,Pow:1,LShift:1,RShift:1,BitOr:1,BitXor:1,BitAnd:1,FloorDiv:1,Mult:1},Ne={Eq:1,NotEq:1,Lt:1,LtE:1,Gt:1,GtE:1},Ee={Add:"+",Sub:"-",Mult:"*",MatMult:"Math.matrixMult",Div:"/",Mod:"%",Pow:"**",LShift:"<<",RShift:">>",BitOr:"|",BitXor:"^",BitAnd:"&",FloorDiv:"Math.idiv",And:"&&",Or:"||",Eq:"==",NotEq:"!=",Lt:"<",LtE:"<=",Gt:">",GtE:">=",Is:"===",IsNot:"!==",In:"py.In",NotIn:"py.NotIn"},Ce={Invert:"~",Not:"!",UAdd:"P+",USub:"P-"},Ue={"adafruit_bus_device.i2c_device.I2CDevice":"pins.I2CDevice"};function Ae(e){s.blockDepth++;const t=n.mkBlock(e.map(nt));return s.blockDepth--,t}function Pe(e){e.vars||(e.vars={},e.parent=q(),e.blockDepth=s.blockDepth)}function we(e,t=!1){return"any"===V(e)?t?n.mkText(": any"):n.mkText(""):n.mkText(": "+V(e))}function Ie(e,t){try{return Te(t)}catch(t){return console.log(t),n.mkStmt(ge(`conversion failed for ${e.name||e.kind}`,[]))}}function _e(e){if(!e||!e.pyAST)return!1;if("FunctionDef"!=e.pyAST.kind)return!1;const t=e.pyAST;return!(!t.callers||1!=t.callers.length)&&!t.callers[0].inCalledPosition}function Ke(t,r=!1){return Ie(t,(()=>{var i,o,a,l;const u=!!s.currClass&&!s.currFun,c=G(),p=!!s.currFun;Pe(t);const f=ye(W(t)),d=le(u?1:3,t);if(!r&&(f&&f.declared===m&&H(t,9520,lf("Duplicate function declaration")),d.declared=m,_e(d)))return n.mkText("");u&&(d.isInstance=!0),s.currFun=t;let y="",k=t.name;let x=[ge("decorators",t.decorator_list.filter((e=>"property"==Re(e)?(y="get",!1):"Attribute"!=e.kind||"setter"!=e.attr||"Name"!=e.value.kind||(k=e.value.id,y="set",!1))).map(tt))];if(t.body.length>=1&&"Raise"==t.body[0].kind&&(t.alwaysThrows=!0),u)if(s.currClass||H(t,9531,lf("method '{0}' is missing current class context",d.pyQName)),d.pyRetType||H(t,9532,lf("method '{0}' is missing a return type",d.pyQName)),"__init__"==t.name)x.push(n.mkText("constructor")),Y(t,d.pyRetType,s.currClass.symInfo);else{if("__get__"==k||"__set__"==k){let e=t.vars.value,n=null==e?void 0:e.symbol;if("__set__"==k&&n){let e=ce(s.currClass.symInfo,"__get__",!1);e&&e.pyAST&&"FunctionDef"==e.pyAST.kind&&ee(t,n.pyRetType,e.pyRetType)}k=k.replace(/_/g,"")}y||(y="_"==k[0]?d.isProtected?"protected":"private":"public",t.symInfo.isStatic&&(y+=" static")),x.push(n.mkText(y+" "),qe(k))}else e.U.assert(!y),"_"==t.name[0]||c||r||p?x.push(n.mkText("function "),qe(k)):x.push(n.mkText("export function "),qe(k));let T="__init__"==t.name?void 0:t.returns?ve(t.returns):d.pyRetType;x.push(function(t,r){var i;const s=t.args;s.kwonlyargs.length&&H(t,9517,e.U.lf("keyword-only arguments not supported yet"));let o=s.args.slice();if(r?"self"!==(null===(i=o[0])||void 0===i?void 0:i.arg)?t.symInfo.isStatic=!0:o.shift():o.some((e=>"self"==e.arg))&&H(t,9519,e.U.lf("non-methods cannot have an argument called 'self'")),!t.symInfo.parameters){let r=s.defaults.length-o.length;t.symInfo.parameters=o.map((i=>{i.annotation||H(t,9519,e.U.lf("Arg '{0}' missing annotation",i.arg));let o=ve(i.annotation),a="";return r>=0&&(a=n.flattenNode([tt(s.defaults[r])]).output,ee(i,o,ke(s.defaults[r]))),r++,{name:i.arg,description:"",type:"",initializer:a,default:a,pyType:o}}))}let a=t.symInfo.parameters.map((r=>{let i=Q(r.name,{isParam:!0}),s=null==i?void 0:i.symbol;r.pyType||H(t,9530,e.U.lf("parameter '{0}' missing pyType",r.name)),ee(t,I(s),r.pyType);let o=[qe(r.name),we(r.pyType,!0)];return r.default&&o.push(n.mkText(" = "+r.default)),n.mkGroup(o)}));return s.vararg&&a.push(n.mkText("TODO *"+s.vararg.arg)),s.kwarg&&a.push(n.mkText("TODO **"+s.kwarg.arg)),n.H.mkParenthesizedExpression(n.mkCommaSep(a))}(t,u),T&&z(T)!=N?we(T):n.mkText("")),I(d);let g=t.body.map(nt);if("__init__"==t.name){if(s.currClass||H(t,9533,lf("__init__ method '{0}' is missing current class context",d.pyQName)),null===(i=s.currClass)||void 0===i?void 0:i.baseClass){const e=t.body[0],n=s.currClass.baseClass.pyQName+".__constructor";(null===(l=null===(a=null===(o=e.value)||void 0===o?void 0:o.func)||void 0===a?void 0:a.symbolInfo)||void 0===l?void 0:l.pyQName)!==n&&H(t,9575,lf("Sub classes must call 'super().__init__' as the first statement inside an __init__ method"))}for(let e of ue(s.currClass)){let t=e.pyAST;t&&t.value&&g.push(n.mkStmt(n.mkText(`this.${Oe(e.pyName)} = `),tt(t.value)))}}const h=ot(t);x.push(n.mkBlock(h.concat(g)));let v=n.mkGroup(x);return r?x[x.length-1].noFinalNewline=!0:v=n.mkStmt(v),v}))}const Le={FunctionDef:e=>Ke(e),ClassDef:t=>Ie(t,(()=>{Pe(t);const r=le(8,t);e.U.assert(!s.currClass);let i=G();s.currClass=t,t.isNamespace=t.decorator_list.some((e=>"Name"==e.kind&&"namespace"==e.id));let o=t.isNamespace?[n.mkText("namespace "),qe(t.name)]:[ge("keywords",t.keywords.map(he)),ge("decorators",t.decorator_list.map(tt)),n.mkText(i?"class ":"export class "),qe(t.name)];if(!t.isNamespace&&t.bases.length>0)if("Enum"==Re(t.bases[0]))t.isEnum=!0;else{o.push(n.mkText(" extends ")),o.push(n.mkCommaSep(t.bases.map(tt)));let e=function(e){let t=ye(De(e));return t&&t.pyAST&&"ClassDef"==t.pyAST.kind?t.pyAST:null}(t.bases[0]);if(e)t.baseClass=e.symInfo,r.extendsTypes=[e.symInfo.pyQName];else{const e=Re(t.bases[0]);if(e){const n=ye(e),i=K(e);t.baseClass=n||i,t.baseClass&&(r.extendsTypes=[t.baseClass.pyQName])}}}const a=t.body.filter((e=>t.isNamespace||"FunctionDef"===e.kind)),l=t.isNamespace?[]:t.body.filter((e=>-1===a.indexOf(e)&&"Pass"!==e.kind));let u=Ae(a);o.push(u);let c=!1;if(l.length){c=!0;const e=Ae(l),r=n.mkStmt(n.mkGroup([n.mkText(`public static __init${t.name}() `),e]));u.children.unshift(r)}if(!t.isNamespace){const e=ue(t).map((e=>(e.pyName&&e.pyRetType||H(t,9535,lf("field definition missing py name or return type",e.qName)),e))),r=e.filter((e=>!e.isInstance)),i=e.filter((e=>e.isInstance)).map((e=>n.mkStmt(Se(e),qe(e.pyName),we(e.pyRetType)))),s=r.map((e=>n.mkGroup([n.mkStmt(Se(e),n.mkText("static "),qe(e.pyName),we(e.pyRetType)),mt(Oe(t.name),Oe(e.pyName),V(e.pyRetType))])));u.children=s.concat(i).concat(u.children)}return c&&(o=[n.mkStmt(n.mkGroup(o)),n.mkStmt(n.mkText(`${t.name}.__init${t.name}()`))]),n.mkStmt(n.mkGroup(o))})),Return:e=>{if(e.value){let t=s.currFun;return t&&(t.symInfo.pyRetType||H(e,9536,lf("function '{0}' missing return type",t.symInfo.pyQName)),Z(e.value,t.symInfo.pyRetType)),n.mkStmt(n.mkText("return "),tt(e.value))}return n.mkStmt(n.mkText("return"))},AugAssign:e=>{let t=Ee[e.op];return t.length>3?n.mkStmt(n.mkInfix(tt(e.target),"=",n.H.mkCall(t,[tt(e.target),tt(e.value)]))):n.mkStmt(tt(e.target),n.mkText(" "+t+"= "),tt(e.value))},Assign:e=>Fe(e),AnnAssign:e=>Fe(e),For:t=>{if(e.U.assert(0==t.orelse.length),t.target.forTargetEndPos=t.endPos,Me(t.iter,"range")){let e=t.iter,r=tt(t.target),i=qe(De(t.target));Z(t.target,S);let s=1==e.args.length?n.mkText("0"):tt(e.args[0]),o=tt(e.args[1==e.args.length?0:1]);if(e.args.length<=2)return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,"<",o),n.mkText("; "),n.mkPostfix([i],"++"),n.mkText(")"),Ae(t.body));let a="Num"===e.args[2].kind?e.args[2].n:void 0;if(null==a&&"UnaryOp"===e.args[2].kind){const t=e.args[2];"Num"===t.operand.kind&&("UAdd"===t.op?a=t.operand.n:"USub"===t.op&&(a=-t.operand.n))}if(void 0!==a){const l=a>0?"<":">";return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,l,o),n.mkText("; "),n.mkInfix(i,"+=",tt(e.args[2])),n.mkText(")"),Ae(t.body))}}if(m>1){const e=ke(t.target);Z(t.iter,ke(t.iter)==v?e:F(e))}return n.mkStmt(n.mkText("for ("),tt(t.target),n.mkText(" of "),tt(t.iter),n.mkText(")"),Ae(t.body))},While:t=>(e.U.assert(0==t.orelse.length),n.mkStmt(n.mkText("while ("),tt(t.test),n.mkText(")"),Ae(t.body))),If:t=>{let r=t=>{let i=[n.mkText("if ("),tt(t.test),n.mkText(")"),Ae(t.body)];return t.orelse.length&&(i[i.length-1].noFinalNewline=!0,1==t.orelse.length&&"If"==t.orelse[0].kind?(i.push(n.mkText(" else ")),e.U.pushRange(i,r(t.orelse[0]))):i.push(n.mkText(" else"),Ae(t.orelse))),i};return n.mkStmt(n.mkGroup(r(t)))},With:t=>{if(1==t.items.length&&function(e,t){let n=ke(e);return!(!n.classType||n.classType.pyQName!=t)||V(n)==t}(t.items[0].context_expr,"pins.I2CDevice")){let r=t.items[0],i=[],s=tt(r.context_expr);if(r.optional_vars){let e=Re(r.optional_vars);if(e){let o=Q(e,{isLocal:!0}),a=null==o?void 0:o.symbol;e=Oe(e),i.push(n.mkStmt(n.mkText("const "+e+" = "),s)),a.pyRetType||H(t,9537,lf("function '{0}' missing return type",a.pyQName)),Z(r.context_expr,a.pyRetType),s=n.mkText(e)}}return i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("begin()")))),e.U.pushRange(i,t.body.map(nt)),i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("end()")))),n.mkGroup(i)}let r=[],i=t.items.map(((e,t)=>{let i="with"+t;if(e.optional_vars){let t=De(e.optional_vars);Q(t,{isLocal:!0}),i=Oe(t)}return r.push(n.mkStmt(n.mkText(i+".end()"))),n.mkStmt(n.mkText("const "+i+" = "),n.mkInfix(tt(e.context_expr),".",n.mkText("begin()")))}));return e.U.pushRange(i,t.body.map(nt)),e.U.pushRange(i,r),n.mkBlock(i)},Raise:e=>{let t,r=e.exc||e.cause;if(!r)return n.mkStmt(n.mkText("throw"));if(r&&"Call"==r.kind){let e=r;1==e.args.length&&(t=tt(e.args[0]))}return t||(t=n.mkGroup([n.mkText("`"),tt(r),n.mkText("`")])),n.mkStmt(n.H.mkCall("control.fail",[t]))},Assert:e=>(e.msg||H(e,9537,lf("assert missing message")),n.mkStmt(n.H.mkCall("control.assert",[e.test,e.msg].filter((e=>!!e)).map(tt)))),Import:e=>{for(let t of e.names)t.asname&&Q(t.asname,{expandsTo:t.name}),B(e,t.name);return n.mkText("")},ImportFrom:e=>{let t=[];for(let r of e.names)if("*"==r.name)e.module||H(e,9538,lf("import missing module name")),Q(e.module,{isImportStar:!0});else{let i=e.module+"."+r.name,s=K(i),o=r.asname||r.name;xe(s)?(Q(o,{isImport:s,expandsTo:i}),t.push(n.mkStmt(n.mkText(`import ${Oe(o)} = ${i}`)))):Q(o,{expandsTo:i})}return n.mkGroup(t)},ExprStmt:e=>{return"Str"==e.value.kind?((t=e.value.s).trim().split(/\n/).length<=1?t=t.trim():t+="\n",n.mkStmt(n.mkText("/** "+t+" */"))):n.mkStmt(tt(e.value));var t},Pass:e=>n.mkStmt(n.mkText("")),Break:e=>n.mkStmt(n.mkText("break")),Continue:e=>n.mkStmt(n.mkText("continue")),Delete:t=>(H(t,9550,e.U.lf("delete statements are unsupported")),g(t)),Try:e=>{let t=[n.mkText("try"),Ae(e.body.concat(e.orelse))];for(let r of e.handlers)t.push(n.mkText("catch ("),r.name?qe(r.name):n.mkText("_")),r.type&&t.push(n.mkText("/* instanceof "),tt(r.type),n.mkText(" */")),t.push(n.mkText(")"),Ae(r.body));return e.finalbody.length&&t.push(n.mkText("finally"),Ae(e.finalbody)),n.mkStmt(n.mkGroup(t))},AsyncFunctionDef:t=>(H(t,9551,e.U.lf("async function definitions are unsupported")),g(t)),AsyncFor:t=>(H(t,9552,e.U.lf("async for statements are unsupported")),g(t)),AsyncWith:t=>(H(t,9553,e.U.lf("async with statements are unsupported")),g(t)),Global:r=>{const i=M();q();for(const n of r.names){e.U.lookup(i.vars,n)||H(r,9521,e.U.lf("No binding found for global variable"));Q(n,{},t.VarModifier.Global).firstRefPos<r.startPos&&H(r,9522,e.U.lf("Variable referenced before global declaration"))}return n.mkStmt(n.mkText(""))},Nonlocal:r=>{const i=M(),s=q();for(const n of r.names){const o=st(n,s);o&&o!==i&&o.vars[n].modifier!==t.VarModifier.Global||H(r,9523,e.U.lf("No binding found for nonlocal variable"));Q(n,{},t.VarModifier.NonLocal).firstRefPos<r.startPos&&H(r,9524,e.U.lf("Variable referenced before nonlocal declaration"))}return n.mkStmt(n.mkText(""))}};function Fe(t){let r,i,o,a;if("Assign"===t.kind){if(1!=t.targets.length)return H(t,9553,e.U.lf("multi-target assignment statements are unsupported")),g(t);a=t.targets[0],o=t.value,r=null,i=null}else{if("AnnAssign"!==t.kind)return t;a=t.target,o=t.value||null,r=t.annotation,i=ve(r),Z(a,i)}let l,u="",c=!!o&&Me(o,"const"),p=Re(a)||"";if(G()||s.currClass||s.currFun||"_"==p[0]||(u="export "),p&&s.currClass&&!s.currFun){c=!(!o||!s.currClass.isNamespace);let e=ce(s.currClass.symInfo,p,!0);if(e||H(t,9544,lf("cannot get class field")),0==m)return n.mkText("/* skip for now */");e.pyRetType||H(t,9539,lf("function '{0}' missing return type",e.pyQName)),Z(a,e.pyRetType),e.isInstance=!1,s.currClass.isNamespace&&(u=`export ${c?"const":"let"} `)}if(!o)return H(t,9555,e.U.lf("unable to determine value of assignment")),g(t);if(Z(a,ke(o)),c)return Q(De(a),{}),/^static /.test(u)||/const/.test(u)||(u+="const "),n.mkStmt(n.mkText(u),n.mkInfix(tt(a),"=",tt(o)));if(!u&&"Tuple"==a.kind){let r=a,i=[n.mkText("let "),n.mkText("[")];if(r.elts.filter((e=>"Name"!==e.kind)).length)return H(t,9556,e.U.lf("non-trivial tuple assignment unsupported")),g(t);let s=r.elts.map((e=>e)).map((function(e){Ve(e,"identifierCompletion"),ke(e);Xe(e);return $e(e,!0)}));return i.push(n.mkCommaSep(s)),i.push(n.mkText("]")),n.mkStmt(n.mkInfix(n.mkGroup(i),"=",tt(o)))}if("Name"===a.kind){const e=q().vars[p],t=null==e?void 0:e.symbol;t&&4===t.kind&&void 0===e.modifier&&(void 0===e.firstAssignPos||e.firstAssignPos>a.startPos)&&(e.firstAssignPos=a.startPos,e.firstAssignDepth=s.blockDepth)}if(r&&i&&("NameConstant"===o.kind&&null===o.value||"List"===o.kind&&0===o.elts.length)){const e=V(i);l=n.mkInfix(tt(a),":",n.mkText(e))}return l||(l=tt(a)),n.mkStmt(n.mkText(u),n.mkInfix(l,"=",tt(o)))}function $e(e,t=!1){var r,i;let o=e.id,a=de(o),l=null==a?void 0:a.symbol,u=q().vars[o],c=null==u?void 0:u.symbol;return void 0===e.isdef&&(!l||4===l.kind&&l!==c?(s.currClass&&!s.currFun?(e.isdef=!1,a=Q(o,{})):(e.isdef=!0,a=Q(o,{isLocal:!0})),l=a.symbol):e.isdef=!1,e.symbolInfo=l,e.tsType||H(e,9540,lf("definition missing ts type")),l.pyRetType||H(e,9568,lf("missing py return type")),ee(e,e.tsType,l.pyRetType)),e.isdef&&at(a,q())&&(e.isdef=!1),Ye(a,e),e.isdef&&!t?n.mkGroup([n.mkText("let "),qe(o)]):!(null==l?void 0:l.namespace)||!(null==l?void 0:l.qName)||(null===(r=s.currClass)||void 0===r?void 0:r.isNamespace)&&(null===(i=s.currClass)||void 0===i?void 0:i.name)===(null==l?void 0:l.namespace)?qe(o):qe(l.qName)}function Oe(e){return n.isReservedWord(e)?e+"_":e||e}function Re(e){var t;if("Name"==e.kind){let t=e.id,n=me(t),r=null==n?void 0:n.symbol;if(r){if(r.expandsTo)return r.expandsTo;if(s.currClass&&!s.currFun&&!(null==n?void 0:n.modifier)&&r.qName)return r.qName}return t}if("Attribute"==e.kind){let t=Re(e.value);if(t)return t+"."+e.attr}if(ze(e)&&(null===(t=s.currClass)||void 0===t?void 0:t.baseClass))return s.currClass.baseClass.qName}function De(e){let t=Re(e);return t||H(null,9542,lf("Cannot get name of unknown expression kind '{0}'",e.kind)),t}function qe(e){return"self"==e?n.mkText("this"):n.mkText(Oe(e))}function Me(e,t){if("Call"!=e.kind)return!1;return Re(e.func)===t}function Ge(t,r,i){let s=Ee[r];return e.U.assert(!!s),s.length>3?n.H.mkCall(s,[t,i]):n.mkInfix(t,s,i)}const Be={memoryview:{n:"",t:C},const:{n:"",t:S},"micropython.const":{n:"",t:S}};const Qe=function(){let e={};return Object.keys(pxtc.ts2PyFunNameMap).forEach((t=>{let n=pxtc.ts2PyFunNameMap[t];if(n&&n.n){let r={n:t,t:A(n.t),scale:n.scale};e[n.n]=r}})),Object.keys(Be).forEach((t=>{e[t]=Be[t]})),e}();function ze(e){return Me(e,"super")&&0==e.args.length}function We(e){return e.type==n.NT.Prefix&&'"'==e.op[0]?n.mkText(n.backtickLit(JSON.parse(e.op))):e}function je(e){return c&&e.startPos<=c.position&&c.position<=e.endPos}function Ve(e,t){m>100&&c&&null==p&&(c.type==t||"symbol"==c.type)&&je(e)&&(p=e,f=q())}function He(e,t){if(t&&t.pyAST&&"FunctionDef"==t.pyAST.kind){let n=t.pyAST;n.callers||(n.callers=[]),n.callers.indexOf(e)<0&&n.callers.push(e)}}const Je={BoolOp:e=>{let t=tt(e.values[0]);for(let n=1;n<e.values.length;++n)t=Ge(t,e.op,tt(e.values[n]));return t},BinOp:e=>{let t=function(e){if("Mod"==e.op&&"Str"==e.left.kind&&("Tuple"==e.right.kind||"List"==e.right.kind)){let t=e.left.s,r=e.right.elts;r=r.slice();let i=[n.mkText("`")];return t.replace(/([^%]+)|(%[\d\.]*([a-zA-Z%]))/g,((e,t,s,o)=>{if(t)i.push(n.mkText(t.replace(/[`\\$]/g,(e=>"\\"+e))));else{let e=r.shift(),t=e?tt(e):n.mkText("???");i.push(n.mkText("${"),t,n.mkText("}"))}return""})),i.push(n.mkText("`")),n.mkGroup(i)}return null}(e);if(t)return t;const r=tt(e.left),i=tt(e.right);return ct(e.left)&&ct(e.right)&&"Add"===e.op?n.H.extensionCall("concat",[r,i],!1):(t=Ge(r,e.op,i),be[e.op]&&(Z(e.left,S),Z(e.right,S),e.tsType||H(e,9570,lf("binary op missing ts type")),ee(e,e.tsType,S)),t)},UnaryOp:t=>{let r=Ce[t.op];return e.U.assert(!!r),n.mkInfix(null,r,tt(t.operand))},Lambda:t=>(H(t,9574,e.U.lf("lambda expressions are not supported yet")),h(t)),IfExp:e=>n.mkInfix(n.mkInfix(tt(e.test),"?",tt(e.body)),":",tt(e.orelse)),Dict:e=>{s.blockDepth++;const t=e.keys.map(((t,r)=>{const i=e.values[r];return void 0===t?h(e):n.mkStmt(n.mkInfix(tt(t),":",tt(i)),n.mkText(","))})),r=n.mkBlock(t);return s.blockDepth--,r},Set:e=>h(e),ListComp:e=>h(e),SetComp:e=>h(e),DictComp:e=>h(e),GeneratorExp:e=>{if(1==e.generators.length&&"Comprehension"==e.generators[0].kind){let t=e.generators[0];if(0==t.ifs.length)return Te((()=>{let r=De(t.target);return Q(r,{isParam:!0}),n.mkInfix(tt(t.iter),".",n.H.mkCall("map",[n.mkGroup([qe(r),n.mkText(" => "),tt(e.elt)])]))}))}return h(e)},Await:e=>h(e),Yield:e=>h(e),YieldFrom:e=>h(e),Compare:e=>{if(1==e.ops.length&&("In"==e.ops[0]||"NotIn"==e.ops[0])){z(ke(e.comparators[0]))==v&&Z(e.left,v);let t=n.mkInfix(tt(e.comparators[0]),".",n.H.mkCall("indexOf",[tt(e.left)]));return n.mkInfix(t,"In"==e.ops[0]?">=":"<",n.mkText("0"))}let t=tt(e.left),r=tt(e.comparators[0]);const i=(e,i,s)=>{Ne[e]&&pt(i)&&pt(s)&&n.flattenNode([t])!==n.flattenNode([r])&&(t=n.H.mkParenthesizedExpression(n.mkGroup([t,n.mkText(" as any")])),r=n.H.mkParenthesizedExpression(n.mkGroup([r,n.mkText(" as any")])))};i(e.ops[0],e.left,e.comparators[0]);let s=Ge(t,e.ops[0],r);for(let n=1;n<e.ops.length;++n)t=tt(e.comparators[n-1]),r=tt(e.comparators[n]),i(e.ops[n],e.comparators[n-1],e.comparators[n]),s=Ge(s,"And",Ge(t,e.ops[n],r));return s},Call:t=>{var r,i,o,a,l;t.func.inCalledPosition=!0;let u,m,d=Re(t.func),y=ye(d),k=y&&8==y.kind,x=y,T="";if(k)x=ye(y.pyQName+".__constructor"),x||(x=le(3,ft(null==y?void 0:y.pyAST)));else if("Attribute"==t.func.kind){let e=t.func;m=e.value,u=ke(m),(u.classType||u.primType)&&(T=e.attr,x=pe(m,T,!0),x&&(T=x.name))}let g=t.args.slice();if("super"==d&&0==g.length)return s.currClass&&s.currClass.baseClass&&(t.tsType||H(t,9543,lf("call expr missing ts type")),Y(t,t.tsType,s.currClass.baseClass)),n.mkText("super");if(Me(t,"int")&&1===g.length&&g[0]){const e=g[0],t=tt(e),r=ke(e);if("string"===r.primType)return n.mkGroup([n.mkText("parseInt"),n.mkText("("),t,n.mkText(")")]);if("number"===r.primType)return n.mkGroup([n.mkInfix(n.mkText("Math"),".",n.mkText("trunc")),n.mkText("("),t,n.mkText(")")])}if(!x){let t=e.U.lookup(Qe,d);if(t&&(T=""),T&&(d=V(u)+"."+T,t=e.U.lookup(Qe,d),t||"@array"!=J(z(u))||(d="Array."+T,t=e.U.lookup(Qe,d))),T="",t)if("."==t.n[0]&&g.length){if(m=g.shift(),u=ke(m),T=t.n.slice(1),x=pe(m,T),x&&2==x.kind)return n.mkInfix(tt(m),".",n.mkText(T))}else x=K(t.n)}if(Me(t,"str"))return ee(t,t.tsType,v),n.mkInfix(n.mkText('""'),"+",tt(t.args[0]));const h="Attribute"===t.func.kind&&ze(t.func.value);!x&&h&&(x=K(d));const S="__init__"===(null===(r=s.currFun)||void 0===r?void 0:r.name)&&"__constructor"===(null==x?void 0:x.name)&&(null===(o=null===(i=s.currClass)||void 0===i?void 0:i.baseClass)||void 0===o?void 0:o.pyQName)===(null==x?void 0:x.namespace)&&h;S&&(x=ye((null===(l=null===(a=s.currClass)||void 0===a?void 0:a.baseClass)||void 0===l?void 0:l.pyQName)+".__constructor")),x||H(t,9508,e.U.lf("can't find called function '{0}'",d));let b,N=x?x.parameters:null,C=[];if(N){for(g.length>N.length&&H(t,9510,e.U.lf("too many arguments in call to '{0}'",x.pyQName));g.length<N.length;)g.push(null);g=g.slice(0,N.length);for(let n of t.keywords){let t=N.findIndex((e=>e.name==n.arg));t<0?H(n,9511,e.U.lf("'{0}' doesn't have argument named '{1}'",x.pyQName,n.arg)):null!=g[t]?H(n,9512,e.U.lf("argument '{0} already specified in call to '{1}'",n.arg,x.pyQName)):g[t]=n.value}for(let e=g.length-1;e>=0&&(N[e].initializer&&null==g[e]);e--)g.pop();for(let r=0;r<g.length;++r){let i=g[r];if(null!=i||N[r].initializer)if(i){N[r].pyType||H(t,9545,lf("formal arg missing py type"));const e=N[r].pyType;"any"!==e.primType&&ne(i,e),"Name"==i.kind&&_e(i.symbolInfo)?C.push(Ke(i.symbolInfo.pyAST,!0)):C.push(tt(i))}else N[r].initializer||H(t,9547,lf("formal arg missing initializer")),C.push(n.mkText(N[r].initializer));else H(t,9513,e.U.lf("missing argument '{0}' in call to '{1}'",N[r].name,x.pyQName)),C.push(n.mkText("null"))}}else x&&H(t,9509,e.U.lf("calling non-function")),C=g.map(tt);if(!p&&c&&"signature"==c.type&&je(t)){p=t,f=q(),c.auxResult=0;for(let e=0;e<g.length;++e){c.auxResult=e;let t=g[e];if(!t)break;if(t.startPos<=c.position&&c.position<=t.endPos)break}}if(x)if(x.pyRetType||H(t,9549,lf("function missing pyRetType")),m&&ct(m)&&u?function(e,t,n){switch(t.qName){case"Array.pop":case"Array.removeAt":case"Array.shift":case"Array.find":case"Array.get":case"Array._pickRandom":Z(e,n.typeArgs[0]);break;case"Array.concat":case"Array.slice":case"Array.filter":case"Array.fill":Z(e,n);break;case"Array.reduce":if("Call"===e.kind&&e.args.length>1){const t=ke(e.args[1]);t&&Z(e,t)}break;case"Array.map":Z(e,F(E));break;default:Z(e,t.pyRetType)}}(t,x,u):Z(t,x.pyRetType),t.symbolInfo=x,x.attributes.py2tsOverride){const e=function(e){const t=new RegExp(/([^\$]*\()?([^\$\(]*)\$(\d)(?:(?:(?:=(\d+|'[a-zA-Z0-9_]*'|false|true|null|undefined))|(\?)|))/,"y"),n=[];let r,i=0;do{i=t.lastIndex,r=t.exec(e),r&&(r[1]&&n.push({kind:"text",text:r[1]}),n.push({kind:"arg",prefix:r[2],index:parseInt(r[3]),default:r[4],isOptional:!!r[5]}))}while(r);null!=i?n.push({kind:"text",text:e.substr(i)}):n.push({kind:"text",text:e});return{parts:n}}(x.attributes.py2tsOverride);if(e){T&&!m&&H(t,9550,lf("missing recv"));let r=function(e,t,r){const i=[];for(const r of e.parts)if("text"===r.kind)i.push(n.mkText(r.text));else if(t[r.index]||r.default)r.prefix&&i.push(n.mkText(r.prefix)),t[r.index]?i.push(t[r.index]):i.push(n.mkText(r.default));else if(!r.isOptional)return;if(r)return n.mkInfix(r,".",n.mkGroup(i));return n.mkGroup(i)}(e,C,T?tt(m):void 0);return r||H(t,9555,lf("buildOverride failed unexpectedly")),r}}else if(x.attributes.pyHelper)return n.mkGroup([n.mkInfix(n.mkText("_py"),".",n.mkText(x.attributes.pyHelper)),n.mkText("("),n.mkCommaSep(m?[tt(m)].concat(C):C),n.mkText(")")]);b=S?n.mkText("super"):T?n.mkInfix(tt(m),".",n.mkText(T)):tt(t.func);let U=[b,n.mkText("("),n.mkCommaSep(C),n.mkText(")")];return x&&1==C.length&&pxtc.service.isTaggedTemplate(x)&&(U=[b,We(C[0])]),k&&(y&&y.pyQName||H(t,9551,lf("missing namedSymbol or pyQName")),U[0]=n.mkText(j(y.pyQName)),U.unshift(n.mkText("new "))),n.mkGroup(U)},Num:e=>(e.tsType||H(e,9556,lf("tsType missing")),ee(e,e.tsType,S),n.mkText(e.ns)),Str:e=>(e.tsType||H(e,9557,lf("tsType missing")),ee(e,e.tsType,v),n.mkText(n.stringLit(e.s))),FormattedValue:e=>h(e),JoinedStr:e=>h(e),Bytes:t=>n.mkText(`hex\`${e.U.toHex(new Uint8Array(t.s))}\``),NameConstant:e=>(null!==e.value&&(e.tsType||H(e,9558,lf("tsType missing")),ee(e,e.tsType,b)),n.mkText(JSON.stringify(e.value))),Ellipsis:e=>h(e),Constant:e=>h(e),Attribute:t=>{let r=tt(t.value),i=ke(t.value),s=pe(t.value,t.attr),o=t.attr;if(Ve(t,"memberCompletion"),s)t.symbolInfo=s,He(t,s),t.tsType&&s.pyRetType||H(t,9559,lf("tsType or pyRetType missing")),ee(t,t.tsType,s.pyRetType),o=s.name;else if(i.moduleType){let n=K(i.moduleType.pyQName+"."+t.attr);n?(t.symbolInfo=n,He(t,n),Z(t,I(n)),o=n.name):H(t,9514,e.U.lf("module '{0}' has no attribute '{1}'",i.moduleType.pyQName,t.attr))}else m>2&&H(t,9515,e.U.lf("unknown object type; cannot lookup attribute '{0}'",t.attr));return n.mkInfix(r,".",n.mkText(Oe(o)))},Subscript:e=>{if("Index"==e.slice.kind){const t=z(ke(e.value));if(ct(e.value)){Z(e,t.typeArgs[0])}else"string"===t.primType?Z(e,t):m>2&&X(ke(e))&&Z(e,E);let r=e.slice.value;return m>2&&X(ke(r))&&Z(r,S),n.mkGroup([tt(e.value),n.mkText("["),tt(r),n.mkText("]")])}if("Slice"==e.slice.kind){const t=ke(e.value);Z(e,t);let r=e.slice;if(r.step){const i="string"===(null==t?void 0:t.primType);return n.H.mkCall(i?"_py.stringSlice":"_py.slice",[tt(e.value),r.lower?tt(r.lower):n.mkText("null"),r.upper?tt(r.upper):n.mkText("null"),tt(r.step)])}return n.mkInfix(tt(e.value),".",n.H.mkCall("slice",[r.lower?tt(r.lower):n.mkText("0"),r.upper?tt(r.upper):null].filter(T)))}return h(e)},Starred:e=>n.mkGroup([n.mkText("... "),tt(e.value)]),Name:e=>{if(Ve(e,"identifierCompletion"),"self"==e.id&&s.currClass)return e.tsType||H(e,9560,lf("missing tsType")),Y(e,e.tsType,s.currClass.symInfo),n.mkText("this");let t=Xe(e),r=null==t?void 0:t.symbol;if(r&&r.isImport)return qe(r.name);if(Ye(t,e),e.ctx.indexOf("Load")>=0){if(!r)return qe(De(e));if(!(null==r?void 0:r.qName))return H(e,9561,lf("missing qName")),qe("unknown");return qe(r.qName.replace("@type",""))}return $e(e)},List:Ze,Tuple:Ze};function Xe(t){let n=de(t.id),r=null==n?void 0:n.symbol;if(!n){let r=e.U.lookup(Qe,t.id);r&&(n=de(r.n))}if(n&&r){if(t.symbolInfo=r,t.tsType||H(t,9562,lf("missing tsType")),ee(t,t.tsType,I(r)),r.isImport)return n;He(t,r),t.forTargetEndPos&&n.forVariableEndPos!==t.forTargetEndPos&&(n.forVariableEndPos?n.lastRefPos=n.forVariableEndPos+1:n.forVariableEndPos=t.forTargetEndPos)}else m>0&&H(t,9516,e.U.lf("name '{0}' is not defined",t.id));return n}function Ye(e,n){if(e){if(e.modifier===t.VarModifier.Global){const t=M();t&&t.vars[e.symbol.name]&&(e=t.vars[e.symbol.name])}else if(e.modifier===t.VarModifier.NonLocal){const t=st(e.symbol.name,q());t&&(e=t.vars[e.symbol.name])}(void 0===e.firstRefPos||e.firstRefPos>n.startPos)&&(e.firstRefPos=n.startPos),(void 0===e.lastRefPos||e.lastRefPos<n.startPos)&&(e.lastRefPos=n.startPos)}}function Ze(e){return e.tsType||H(e,9563,lf("missing tsType")),ee(e,e.tsType,F(e.elts[0]?ke(e.elts[0]):L())),n.mkGroup([n.mkText("["),n.mkCommaSep(e.elts.map(tt)),n.mkText("]")])}function et(e){return`${e.startPos}:${e.endPos}`}function tt(t){o=t;let n=Je[t.kind];n||e.U.oops(t.kind+" - unknown expr"),ke(t);const r=n(t);return r.id=et(t),r}function nt(t){o=t;let r=Le[t.kind];r||e.U.oops(t.kind+" - unknown stmt");let i=(t._comments||[]).map((e=>e.value)),s=r(t);return i.length&&(s=n.mkGroup(i.map((e=>n.mkStmt(n.H.mkComment(e)))).concat(s))),s.id=et(t),s}function rt(e){return!e||(e.type==n.NT.Prefix&&""==e.op?e.children.every(rt):e.type==n.NT.NewLine)}function it(e){const t=qe(e.name),r=V(I(e));return n.mkStmt(n.mkGroup([n.mkText("let "),t,n.mkText(": "+r+";")]))}function st(e,n){if(!n)return;const r=n.vars&&n.vars[e];return r&&r.modifier!=t.VarModifier.NonLocal?n:st(e,n.parent)}function ot(e){const t=[];let n;for(const r of Object.keys(e.vars))n=e.vars[r],at(n,e)&&t.push(it(null==n?void 0:n.symbol));return t}function at(e,t){return!!(4===e.symbol.kind&&!e.symbol.isParam&&void 0===e.modifier&&(e.lastRefPos>e.forVariableEndPos||e.firstRefPos<e.firstAssignPos||e.firstAssignDepth>t.blockDepth)&&!(function(e){return"Module"===e.kind&&"main"===e.name}(t)&&0===e.firstAssignDepth))}function lt(t){if(e.U.assert("Module"==t.kind),t.tsBody)return;var r;s={currClass:void 0,currFun:void 0,currModule:r=t,blockDepth:0},a=r.tsFilename.replace(/\.ts$/,".py"),t.vars||(t.vars={});let i=ot(t).concat(t.body.map(nt));return i.every(rt)?void 0:"main"==t.name?i:[n.mkText("namespace "+t.name+" "),n.mkBlock(i)]}function ut(e){m=e,l=[],y=0,o=void 0}function ct(e){const t=z(ke(e));return t&&"@array"===t.primType}function pt(e){switch(e.kind){case"Num":case"Str":return!0;case"NameConstant":return null!==e.value}return!1}function ft(e,t=e.symInfo){var n;const r=_(t.pyQName+".__constructor");if(!r&&(null===(n=t.extendsTypes)||void 0===n?void 0:n.length)){const n=ye(t.extendsTypes[0])||K(t.extendsTypes[0]);if(n)return ft(e,n)}const i={kind:"FunctionDef",name:"__init__",startPos:e.startPos,endPos:e.endPos,parent:e,body:[],args:{kind:"Arguments",startPos:0,endPos:0,args:[{startPos:0,endPos:0,kind:"Arg",arg:"self"}],kw_defaults:[],kwonlyargs:[],defaults:[]},decorator_list:[],vars:{},symInfo:se(3,e.symInfo.qName+".__constructor")};return i.symInfo.parameters=[],i.symInfo.pyRetType=L({classType:e.symInfo}),r&&(i.args.args.push(...r.parameters.map((e=>({startPos:0,endPos:0,kind:"Arg",arg:e.name})))),i.symInfo.parameters.push(...r.parameters.map((e=>{if(e.pyType)return e;return Object.assign(Object.assign({},e),{pyType:w(e.type)})})))),i}function mt(e,t,r){const i=`___${t}_is_set`,s=`___${t}`;return n.mkStmt(n.mkStmt(n.mkText(`private ${i}: boolean`)),n.mkStmt(n.mkText(`private ${s}: ${r}`)),n.mkStmt(n.mkText(`get ${t}(): ${r}`),n.mkBlock([n.mkText(`return this.${i} ? this.${s} : ${e}.${t}`)])),n.mkStmt(n.mkText(`set ${t}(value: ${r})`),n.mkBlock([n.mkStmt(n.mkText(`this.${i} = true`)),n.mkStmt(n.mkText(`this.${s} = value`))])))}t.py2ts=function(s){let o=[];const m={};l=[],e.U.assert(!!s.sourceFiles,"missing sourceFiles! Cannot convert py to ts");let d=s.sourceFiles.filter((t=>e.U.endsWith(t,".py")));if(0==d.length)return{outfiles:m,diagnostics:l,success:0===l.length,sourceMap:[]};let k=(e,t)=>e.substr(0,e.length-t.length),x=e.U.toDictionary(d,(e=>k(e,".py"))),T=s.sourceFiles.filter((t=>e.U.endsWith(t,".ts"))).filter((e=>k(e,".ts")in x));e.U.assert(!!s.apisInfo,"missing apisInfo! Cannot convert py to ts"),a=d[0],function(t,n){i={},r={};let s=e.U.toDictionary(n,(e=>e));for(let n of e.U.values(t.byQName)){if(s.hasOwnProperty(n.fileName))continue;let t=n;t.extendsTypes&&(t.extendsTypes=t.extendsTypes.filter((e=>e!=t.qName))),t.pyQName&&t.qName||H(null,9526,e.U.lf("Symbol '{0}' is missing qName for '{1}'",t.name,t.pyQName?"ts":"py")),r[t.pyQName]=t,r[t.qName]=t}C=w("Buffer")}(s.apisInfo,T),u=s,c=void 0,s.generatedFiles||(s.generatedFiles=[]);for(const t of d){let n=t,r=t.replace(/\.py$/,"").replace(/.*\//,""),i=s.fileSystem[t];try{a=t;let s=e.py.lex(i),u=e.py.parse(i,n,s);e.U.pushRange(l,u.diagnostics),o.push({kind:"Module",body:u.stmts,blockDepth:0,name:r,source:i,tsFilename:n.replace(/\.py$/,".ts")})}catch(e){console.log("Parse error",e)}}const g=l;for(let e=0;e<5;++e){ut(e);for(let e of o)try{lt(e)}catch(e){console.log("Conv pass error",e)}if(0==y)break}ut(1e3),p=void 0,c=s.syntaxInfo||{position:0,type:"symbol"};let h=[];for(let e of o)try{let t=lt(e);if(!t)continue;let r=n.flattenNode(t);function v(e){let t=e.id.split(":");if(2!=t.length)return;let n=t.map((e=>parseInt(e)));return{py:{startPos:n[0],endPos:n[1]},ts:{startPos:e.startPos,endPos:e.endPos}}}s.sourceFiles.push(e.tsFilename),s.generatedFiles.push(e.tsFilename),s.fileSystem[e.tsFilename]=r.output,m[e.tsFilename]=r.output,h=r.sourceMap.map(v).filter((e=>!!e))}catch(e){console.log("Conv error",e)}l=g.concat(l);let S={};const b=e.U.values(r).concat(e.U.values(i));let N=[];const E=e=>{if((e=>{switch(e.kind){case 6:case 7:case 4:case 3:case 5:return!0;case 2:case 1:return!e.isInstance;default:return!1}})(e)&&N.indexOf(e)<0){let t=P(e);S[t.qName||t.name]=t}};for(let t=f;t;t=t.parent)t&&t.vars&&e.U.values(t.vars).map((e=>e.symbol)).forEach(E);if(b.forEach(E),c&&p){if(p=p,c.beginPos=p.startPos,c.endPos=p.endPos,c.symbols||(c.symbols=[]),N=c.symbols.slice(),"memberCompletion"==c.type&&"Attribute"==p.kind){const e=ke(p.value);if(e.moduleType)for(let t of b)t.isInstance||t.namespace!=e.moduleType.qName||c.symbols.push(t);else if(e.classType||e.primType){const t=e.classType||fe(e.primType).reduce(((e,t)=>e||t),null);if(t){t.extendsTypes&&t.qName||H(null,9567,lf("missing extendsTypes or qName"));let e=t.extendsTypes.concat(t.qName);for(let t of b)t.isInstance&&e.indexOf(t.namespace)>=0&&c.symbols.push(t)}}}else if("identifierCompletion"==c.type)c.symbols=e.U.values(S);else{let e=p.symbolInfo;e&&c.symbols.push(e)}c.symbols=c.symbols.map(P)}let U=function(){for(let e of l)t.patchPosition(e,s.fileSystem[e.fileName]);return l}();return{outfiles:m,success:0===U.length,diagnostics:U,syntaxInfo:c,globalNames:S,sourceMap:h}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n;!function(e){e[e.Id=0]="Id",e[e.Op=1]="Op",e[e.Keyword=2]="Keyword",e[e.Number=3]="Number",e[e.String=4]="String",e[e.NewLine=5]="NewLine",e[e.Comment=6]="Comment",e[e.Indent=7]="Indent",e[e.Dedent=8]="Dedent",e[e.EOF=9]="EOF",e[e.Error=10]="Error"}(n=t.TokenType||(t.TokenType={})),t.keywords={False:!0,None:!0,True:!0,and:!0,as:!0,assert:!0,async:!0,await:!0,break:!0,class:!0,continue:!0,def:!0,del:!0,elif:!0,else:!0,except:!0,finally:!0,for:!0,from:!0,global:!0,if:!0,import:!0,in:!0,is:!0,lambda:!0,nonlocal:!0,not:!0,or:!0,pass:!0,raise:!0,return:!0,try:!0,while:!0,with:!0,yield:!0};let r,i,s=[];const o={"%":"Mod","&":"BitAnd","*":"Mult","**":"Pow","+":"Add","-":"Sub","/":"Div","//":"FloorDiv","<<":"LShift",">>":"RShift","@":"MatMult","^":"BitXor","|":"BitOr"},a={"!":"Bang","!=":"NotEq","(":"LParen",")":"RParen",",":"Comma","->":"Arrow",".":"Dot",":":"Colon",";":"Semicolon","<":"Lt","<=":"LtE","=":"Assign","==":"Eq",">":"Gt",">=":"GtE","[":"LSquare","]":"RSquare","{":"LBracket","}":"RBracket","~":"Invert"},l={b:/^[_0-1]$/,B:/^[_0-1]$/,o:/^[_0-7]$/,O:/^[_0-7]$/,x:/^[_0-9a-fA-F]$/,X:/^[_0-9a-fA-F]$/},u={b:2,B:2,o:8,O:8,x:16,X:16};let c,p,f=0,m=0;function d(e,t){let n=0,r=0;for(let i=0;i<e;++i)10==t.charCodeAt(i)&&(n++,r=i);return{line:n,column:e-r-1}}function y(e){switch(e.type){case n.Id:return`id(${e.value})`;case n.Op:return"'"+i[e.value]+"'";case n.Keyword:return e.value;case n.Number:return`num(${e.value})`;case n.String:return e.stringPrefix+JSON.stringify(e.value);case n.NewLine:return"<nl>";case n.Comment:return`/* ${e.value} */`;case n.Indent:return"indent"+e.value;case n.Dedent:return"dedent";case n.Error:return`[ERR: ${e.value}]`;case n.EOF:return"End of file";default:return"???"}}t.position=d,t.patchPosition=function(e,t){if(!e.start&&!e.length)return e.start=0,e.length=0,e.line=0,void(e.column=0);let n=d(e.start,t);e.line=n.line,e.column=n.column,e.length>0&&(n=d(e.start+e.length-1,t),e.endLine=n.line,e.endColumn=n.column+2)},t.tokenToString=y,t.friendlyTokenToString=function(e,t){let n=e.endPos-e.startPos,r="";return r=0==n?y(e):n>20?"`"+t.slice(e.startPos,e.startPos+20)+"`...":"`"+t.slice(e.startPos,e.endPos)+"`",r=r.replace(/\r/g,"").replace(/\n/g,"\\n").replace(/\t/g,"\\t"),r},t.tokensToString=function(e){let t="",r=0;for(let i of e){let e=y(i);r+e.length>70&&(r=0,t+="\n"),0!=r&&(t+=" "),t+=e,r+=e.length,i.type!=n.NewLine&&i.type!=n.Comment||(r=0,t+="\n")}return t},t.lex=function(d){for(0==s.length&&function(){const n={'"':S,"'":S,"#":C,"\\":E,".":A};r=e.U.clone(a);for(let e of Object.keys(o))r[e]=o[e],r[e+"="]=o[e]+"Assign";i={};for(let e of Object.keys(r))i[r[e]]=e;for(let e=0;e<128;++e)if(t.rx.isIdentifierStart(e))s[e]=x;else{let i=String.fromCharCode(e);if(n.hasOwnProperty(i))s[e]=n[i];else if(r.hasOwnProperty(i)){let t=!1,n=r[i];for(let e of Object.keys(r))e!=i&&e.startsWith(i)&&(t=!0);s[e]=t?()=>g(n):()=>T(n)}else t.rx.isSpace(e)?s[e]=()=>{}:13==e?s[e]=()=>{10==p.charCodeAt(f)&&f++,b()}:t.rx.isNewline(e)?s[e]=b:P(e)?s[e]=U:s[e]=w}}(),p=d,c=[],f=0,m=0,N();f<p.length;){m=f;const e=p.charCodeAt(f++);e<128?s[e]():t.rx.isIdentifierStart(e)?x():t.rx.isSpace(e)||(t.rx.isNewline(e)?b():w())}return m=f,b(),y(n.EOF,""),c;function y(e,t,n){let r={type:e,value:t,startPos:m,endPos:f,auxValue:n};return c.push(r),r}function k(e){y(n.Error,e)}function x(){for(;t.rx.isIdentifierChar(p.charCodeAt(f));)f++;let e=p.slice(m,f),r=p.charCodeAt(f);t.keywords.hasOwnProperty(e)?y(n.Keyword,e):34==r||39==r?v(e):y(n.Id,e)}function T(e){y(n.Op,e)}function g(e){let t=p.slice(m,f+1);if(2==t.length&&r.hasOwnProperty(t)){let n=p.slice(m,f+2);3==n.length&&r.hasOwnProperty(n)?(f+=2,e=r[n]):(f++,e=r[t])}T(e)}function h(e){switch(e){case 97:return 7;case 98:return 8;case 102:return 12;case 110:return 10;case 114:return 13;case 116:return 9;case 118:return 11;default:return 0}}function v(r){const i=p.charCodeAt(f++);let s=!1;p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i&&(f+=2,s=!0);let o=(r=r.toLowerCase()).indexOf("r")>=0,a="",l="";for(;;){const n=p.charCodeAt(f++);if(n==i){if(!s)break;if(p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i){f+=2;break}l+="\\"+String.fromCharCode(i),a+=String.fromCharCode(i)}else if(92==n){let n=p.charCodeAt(f++);if(13==n&&10==p.charCodeAt(f)&&(n=10,f++),34==n||39==n||92==n)o&&(l+="\\",a+="\\"),l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(n);else if(!o&&h(n))l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(h(n));else if(t.rx.isNewline(n))o&&(a+="\\"+String.fromCharCode(n),l+="\\\\",l+=10==n?"\\n":"\\u"+("0000"+n.toString(16)).slice(-4));else if(o||48!=n)if(o||117!=n&&120!=n)l+="\\\\"+String.fromCharCode(n),a+="\\"+String.fromCharCode(n);else{let t=117==n?4:2,r=p.slice(f,f+t);f+=t;let i=parseInt(r,16);isNaN(i)&&k(e.U.lf("invalid unicode or hex escape")),l+="\\"+String.fromCharCode(n)+r,a+=String.fromCharCode(i)}else l+="\\\\x00",a+="\0"}else{if(isNaN(n)){k(e.U.lf("end of file in a string"));break}if(t.rx.isNewline(n)&&!s){k(e.U.lf("new line in a string"));break}a+=String.fromCharCode(n),l+=String.fromCharCode(n)}}let u=y(n.String,a);u.quoted=l,u.stringPrefix=r}function S(){f--,v("")}function b(){y(n.NewLine,""),N()}function N(){let e=0;for(;;){const t=p.charCodeAt(f);if(9!=t){if(32!=t)break;e++,f++}else e=e+8&-8,f++}y(n.Indent,""+e)}function E(){let n=p.charCodeAt(f);t.rx.isNewline(n)?(f++,13==n&&10==p.charCodeAt(f)&&f++):k(e.U.lf("unexpected character after line continuation character"))}function C(){for(y(n.NewLine,"");f<p.length&&!t.rx.isNewline(p.charCodeAt(f));)f++;y(n.Comment,p.slice(m+1,f)),13==p.charCodeAt(f)&&10==p.charCodeAt(f+1)&&f++,f++,N()}function U(){let t=p[m],r="";if("0"==t){let i=p[f];const s=l[i];if(s){for(f++;;){const e=p[f];if(!s.test(e))break;r+=e,f++}if(r){let s=parseInt(r,u[i]);isNaN(s)&&k(e.U.lf("invalid number")),y(n.Number,t+i+r,s)}else k(e.U.lf("expecting numbers to follow 0b, 0o, 0x"));return}}let i=!1,s=!1,o=!1;for(f=m;;){const e=p.charCodeAt(f);if(!o||43!=e&&45!=e)if(o=!1,95==e||P(e));else if(s||i||46!=e){if(s||69!=e&&101!=e)break;s=!0,o=!0}else i=!0;else;r+=String.fromCharCode(e),f++}!i&&!s&&"0"==t&&r.length>1&&!/^0+/.test(r)&&k(e.U.lf("unexpected leading zero"));let a=parseFloat(r);isNaN(a)&&k(e.U.lf("invalid number")),y(n.Number,r,a)}function A(){P(p.charCodeAt(f))?U():y(n.Op,"Dot")}function P(e){return 48<=e&&e<=57}function w(){k(e.U.lf("invalid token"))}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n,r,i,s,o,a,l,u,c;function p(){return r[o]}function f(){for(;r[o];o++){let i=r[o];if(i.type!=t.TokenType.Comment){if(n>=0&&i.type==t.TokenType.Op)switch(i.value){case"LParen":case"LSquare":case"LBracket":n++;break;case"RParen":case"RSquare":case"RBracket":n--}if(i.type!=t.TokenType.Error){if(n>0){if(i.type==t.TokenType.NewLine||i.type==t.TokenType.Indent)continue}else if(i.type==t.TokenType.Indent){if(r[o+1].type==t.TokenType.NewLine){o++;continue}let n=parseInt(i.value),s=l[l.length-1];if(n==s)continue;if(n>s)return void l.push(n);{i.type=t.TokenType.Dedent;let s=0;for(;l.length;){let t=l[l.length-1];if(!(t>n)){for(t!=n&&d(9552,e.U.lf("inconsitent indentation"));s>1;)r.splice(o,0,i),s--;return}l.pop(),s++}}}return}d(9551,i.value)}else a.push(i)}}function m(){u=p(),u.type!=t.TokenType.EOF&&(o++,f())}function d(n,r){r||(r=e.U.lf("invalid syntax")),n||(n=9550);const o=p(),a={code:n,category:pxtc.DiagnosticCategory.Error,messageText:e.U.lf("{0} near {1}",r,t.friendlyTokenToString(o,i)),fileName:s,start:o.startPos,length:o.endPos?o.endPos-o.startPos:0,line:0,column:0};t.patchPosition(a,i),c.push(a),9572!=n&&c.length>100&&e.U.userError(e.U.lf("too many parse errors"))}function y(n,r){const i=p();(i.type==n&&i.value==r||(d(9553,e.U.lf("expecting {0}",t.tokenToString(function(e,t){return{type:e,value:t,startPos:0,endPos:0}}(n,r)))),i.type!=t.TokenType.NewLine))&&m()}function k(){y(t.TokenType.NewLine,"")}function x(e){y(t.TokenType.Keyword,e)}function T(e){y(t.TokenType.Op,e)}function g(){let e=p();return e.type==t.TokenType.Keyword?e.value:""}function h(){let e=p();return e.type==t.TokenType.Op?e.value:""}const v={if:function e(){let t=N("If");m(),t.test=W(),t.body=b(),"elif"==g()?t.orelse=[e()]:t.orelse=C();return E(t)},while:function(){let e=N("While");return x("while"),e.test=W(),e.body=b(),e.orelse=C(),E(e)},for:function(){let e=N("For");return x("for"),e.target=D(),q(e.target),x("in"),e.iter=R(),e.body=b(),e.orelse=C(),E(e)},try:function(){let e=N("Try");x("try"),e.body=b(),e.handlers=[];let t=!1;for(;"except"==g();){let n=N("ExceptHandler");e.handlers.push(n),m(),"Colon"!=h()?(t&&d(),n.type=W(),"as"==g()?(m(),n.name=ge()):n.name=void 0):(t=!0,n.type=void 0,n.name=void 0),n.body=b()}e.orelse=C(),0==e.handlers.length&&e.orelse.length&&d();"finally"==g()?(m(),e.finalbody=b()):e.finalbody=[];return E(e)},with:function(){let t=N("With");return x("with"),t.items=ke(e.U.lf("with item"),U),t.body=b(),E(t)},def:function(){let e=N("FunctionDef");x("def"),e.name=ge(),T("LParen"),e.args=Q(!0),T("RParen"),e.returns=void 0,"Arrow"==h()&&(m(),e.returns=W());return e.body=b(),E(e)},class:function(){let e=N("ClassDef");if(x("class"),e.name=ge(),"LParen"==h()){let t=he();e.bases=t.args,e.keywords=t.keywords}else e.bases=[],e.keywords=[];return e.body=b(),E(e)}},S={del:function(){let t=N("Delete");return x("del"),t.targets=ye(e.U.lf("expression"),oe),E(t)},pass:function(){let e=N("Pass");return x("pass"),E(e)},break:function(){let e=N("Break");return m(),E(e)},continue:function(){let e=N("Continue");return m(),E(e)},return:function(){let e=N("Return");m(),P()?e.value=void 0:e.value=R();return E(e)},raise:function(){let e=N("Raise");x("raise"),e.exc=void 0,e.cause=void 0,P()||(e.exc=W(),"from"==g()&&(m(),e.cause=W()));return E(e)},global:w,nonlocal:function(){let e=w();return e.kind="Nonlocal",e},import:function(){let t=N("Import");return m(),t.names=ke(e.U.lf("import name"),_),E(t)},from:function(){let n=N("ImportFrom");m(),n.level=L(),p().type==t.TokenType.Id?n.module=I():n.module=void 0;n.level||n.module||d();if(x("import"),"Mult"==h()){m();let e=N("Alias");e.name="*",n.names=[e]}else"LParen"==h()?(m(),n.names=ye(e.U.lf("import name"),K),T("RParen")):n.names=ye(e.U.lf("import name"),K);return E(n)},assert:function(){let e=N("Assert");m(),e.test=W(),"Comma"==h()?(m(),e.msg=W()):e.msg=void 0;return E(e)},yield:function(){p();if(m(),"from"==g()){let e=N("YieldFrom");return e.value=W(),A(E(e))}let e=N("Yield");P()||(e.value=R());return A(E(e))}};function b(){return T("Colon"),function(){if(p().type==t.TokenType.NewLine){let n;if(m(),p().type!=t.TokenType.Indent)d(9554,e.U.lf("expected an indented block")),n=B();else{const r=parseInt(p().value);for(m(),n=B();;){if(p().type==t.TokenType.Dedent){const e=isNaN(r)||parseInt(p().value)<r;if(m(),e)break}if(e.U.pushRange(n,B()),p().type==t.TokenType.EOF)break}}return n}return G()}()}function N(e,t){let n=t||p();return{startPos:n.startPos,endPos:n.endPos,kind:e}}function E(e){return e.endPos=u.endPos,e}function C(){return"else"==g()?(m(),b()):[]}function U(){let e=N("WithItem");return e.context_expr=W(),e.optional_vars=void 0,"as"==g()&&(m(),e.optional_vars=oe()),E(e)}function A(e){let t=N("ExprStmt");return t.startPos=e.startPos,t.endPos=e.endPos,t.value=e,t}function P(){let e=p();return e.type==t.TokenType.NewLine||e.type==t.TokenType.Op&&"Semicolon"==e.value}function w(){let e=N("Global");for(m(),e.names=[];e.names.push(ge()),"Comma"==h();)m();return E(e)}function I(){let e="";for(;;){if(e+=ge(),"Dot"!=h())return e;e+=".",m()}}function _(){let e=N("Alias");return e.name=I(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,E(e)}function K(){let e=N("Alias");return e.name=ge(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,E(e)}function L(){let e=0;for(;;)if("Dot"==h())e+=1,m();else{if("Ellipsis"!=h())return e;e+=3,m()}}function F(e,t){let n=N("Tuple",e);return n.elts=t,E(n)}function $(t){let n=p(),r=ye(e.U.lf("expression"),t),i=r[0];return 1!=r.length?F(n,r):i}function O(){return $(le)}function R(){return $(W)}function D(){return $(oe)}function q(e){if("Tuple"==e.kind){e.elts.forEach(q)}else e.ctx="Store"}function M(){let n=e.U.lookup(S,g());return n?n():function(){let n=p(),r=O(),i=h();if("Assign"==i){let e=N("Assign");for(e.targets=[r];;){if(m(),r=O(),i=h(),"Assign"!=i){e.value=r;break}e.targets.push(r)}return e.targets.forEach(q),E(e)}if("Colon"==i){let e=N("AnnAssign");return e.target=r,m(),e.annotation=W(),"Assign"==h()&&(m(),e.value=W()),e.simple=n.type==t.TokenType.Id&&"Name"==r.kind?1:0,q(e.target),E(e)}if(e.U.endsWith(i,"Assign")){let e=N("AugAssign");return e.target=r,e.op=i.replace("Assign",""),m(),e.value=R(),q(e.target),E(e)}if("Semicolon"==i||p().type==t.TokenType.NewLine){let e=N("ExprStmt");return e.value=r,E(e)}return d(9555,e.U.lf("unexpected token")),m(),null}()}function G(){let e=[M()];for(;"Semicolon"==h()&&(m(),p().type!=t.TokenType.NewLine);)e.push(M());return k(),e.filter((e=>!!e))}function B(){const r=c.length,i=p().type==t.TokenType.Indent;i&&(m(),d(9573,e.U.lf("unexpected indent")));let s=[];for(;"MatMult"==h();)m(),s.push(Se()),k();let o=g(),l=e.U.lookup(v,g()),f=[],y=a;if(a=[],"class"==o||"def"==o){let e=l();e.decorator_list=s,f=[e]}else s.length?d(9556,e.U.lf("decorators not allowed here")):f=l?[l()]:G();y.length&&f.length&&(f[0]._comments=y);if(c.length>r){for(n=-1;u.type!=t.TokenType.Dedent&&u.type!=t.TokenType.NewLine&&(m(),p().type!=t.TokenType.EOF););i&&p().type===t.TokenType.Dedent&&m(),n=0}return f}function Q(n){let r=N("Arguments");for(r.args=[],r.defaults=[],r.kwonlyargs=[],r.kw_defaults=[],r.vararg=void 0;;){let n=h();if("Colon"==n||"RParen"==n)break;if("Mult"==n)r.vararg&&d(9557,e.U.lf("multiple *arg")),m(),p().type==t.TokenType.Id?r.vararg=i():r.vararg=void 0;else if("Pow"==n)r.kwarg&&d(9558,e.U.lf("multiple **arg")),m(),r.kwarg=i();else{r.kwarg&&d(9559,e.U.lf("arguments after **"));let t,n=i();"Assign"==h()&&(m(),t=W()),void 0!==r.vararg&&t?(r.kwonlyargs.push(n),r.kw_defaults.push(t)):(r.args.push(n),t?r.defaults.push(t):r.defaults.length&&d(9560,e.U.lf("non-default argument follows default argument")))}if("Comma"!=h())break;m()}return r.kwarg||(r.kwarg=void 0),r.vararg||(r.vararg=void 0),E(r);function i(){let e=N("Arg");return e.arg=ge(),e.annotation=void 0,n&&"Colon"==h()&&(m(),e.annotation=W()),e}}function z(e){let t=N("Lambda");return m(),t.args=Q(!1),T("Colon"),t.body=e?ue():W(),E(t)}function W(){if("lambda"==g())return z();let e=p(),t=H();if("if"==g()){let n=N("IfExp",e);return n.body=t,x("if"),n.test=H(),x("else"),n.orelse=W(),E(n)}return t}function j(e,t){let n=p(),r=t();if(g()==e){let i=N("BoolOp",n);for(i.op="or"==e?"Or":"And",i.values=[r];g()==e;)x(e),i.values.push(t());return E(i)}return r}function V(){return j("and",J)}function H(){return j("or",V)}function J(){if("not"==g()){let e=N("UnaryOp");return m(),e.op="Not",e.operand=J(),E(e)}return function(){let e=p(),t=oe();if(!Y())return t;let n=N("Compare",e);n.left=t,n.comparators=[],n.ops=[];for(;;){let e=Y();if(!e)break;m(),"NotIn"==e?x("in"):"Is"==e&&"not"==g()&&(m(),e="IsNot"),n.ops.push(e),n.comparators.push(oe())}return E(n)}()}const X={Lt:"Lt",Gt:"Gt",Eq:"Eq",GtE:"GtE",LtE:"LtE",NotEq:"NotEq",in:"In",not:"NotIn",is:"Is"};function Y(){return X[h()]||X[g()]||null}const Z={Invert:"Invert",Sub:"USub",Add:"UAdd"};function ee(e,t){let n=p(),r=e();for(;;){let i=h();if(!(i&&t.indexOf(","+i+",")>=0))return r;{let t=N("BinOp",n);t.left=r,t.op=i,m(),t.right=e(),r=t}}}function te(){return ee(be,",Mult,MatMult,Div,Mod,FloorDiv,")}function ne(){return ee(te,",Add,Sub,")}function re(){return ee(ne,",LShift,RShift,")}function ie(){return ee(re,",BitAnd,")}function se(){return ee(ie,",BitXor,")}function oe(){return ee(se,",BitOr,")}function ae(){let t,n=p();if("Colon"!=h()&&(t=W()),"Colon"==h()){let e=N("Slice",n);e.lower=t,m();let r=h();return e.upper="Colon"!=r&&"Comma"!=r&&"RSquare"!=r?W():void 0,e.step=void 0,"Colon"==h()&&(m(),r=h(),"Comma"!=r&&"RSquare"!=r&&(e.step=W())),E(e)}{t||d(9570,e.U.lf("unable to parse lower subscript"));let n=N("Index");return n.value=t,E(n)}}function le(){if("Mult"==h()){let e=N("Starred");return e.value=oe(),E(e)}return W()}function ue(){return"lambda"==g()?z(!0):H()}function ce(){let e=[];for(;;){let t=N("Comprehension");for(t.is_async=0,e.push(t),x("for"),t.target=D(),q(t.target),x("in"),t.iter=H(),t.ifs=[];"if"==g();)m(),t.ifs.push(ue());if("for"!=g())return e}}function pe(){let t=p();if("Mult"==h()){let e=N("Starred");return m(),e.value=W(),E(e)}if("Pow"==h()){let e=N("Keyword");return m(),e.arg=void 0,e.value=W(),E(e)}let n=W();if("Assign"==h()){"Name"!=n.kind&&d(9561,e.U.lf("invalid keyword argument; did you mean ==?")),m();let r=N("Keyword",t);return r.arg=n.id||"???",r.value=W(),E(r)}if("for"==g()){let e=N("GeneratorExp",t);return e.elt=n,e.generators=ce(),E(e)}return n}function fe(){let e=N("NameConstant");return e.value=null,m(),E(e)}function me(){let n=p();if(n.type==t.TokenType.Id){let e=N("Name");return m(),e.id=n.value,e.ctx="Load",E(e)}if(n.type==t.TokenType.Number){let e=N("Num");return m(),e.ns=n.value,e.n=n.auxValue,E(e)}if(n.type==t.TokenType.String){m();let r=n.value;for(;p().type==t.TokenType.String;)r+=p().value,m();if("b"==n.stringPrefix){let t=N("Bytes",n);return t.s=e.U.toArray(e.U.stringToUint8Array(r)),E(t)}{let e=N("Str",n);return e.s=r,E(e)}}if(n.type==t.TokenType.Keyword){if("None"==n.value||"True"==n.value||"False"==n.value){let e=N("NameConstant");return m(),e.value="True"==n.value||"False"!=n.value&&null,E(e)}return d(9564,e.U.lf("expecting atom")),fe()}if(n.type==t.TokenType.Op){let t=n.value;return"LParen"==t?Te("RParen","Tuple","GeneratorExp"):"LSquare"==t?Te("RSquare","List","ListComp"):"LBracket"==t?function(){let t=p();if(m(),"Pow"==h())return m(),r(void 0,oe());if("RBracket"==h()){let e=N("Dict",t);return m(),e.keys=[],e.values=[],E(e)}{let n=le();return"Starred"!=n.kind&&"Colon"==h()?(m(),r(n,W())):function(n){if("for"==g()){"Starred"==n.kind&&d(9562,e.U.lf("iterable unpacking cannot be used in comprehension"));let r=N("SetComp",t);return r.elt=n,r.generators=ce(),E(r)}let r=N("Set",t);if(r.elts=[n],"Comma"==h()){let t=xe("RBracket",e.U.lf("set element"),le);r.elts=[n].concat(t)}else T("RBracket");return E(r)}(n)}function n(){if("Pow"==h())return m(),[null,oe()];{let e=W();return T("Colon"),[e,W()]}}function r(r,i){if("for"==g()){r||d(9563,e.U.lf("dict unpacking cannot be used in dict comprehension"));let n=N("DictComp",t);return n.key=r,n.value=i,n.generators=ce(),E(n)}let s=N("Dict",t);if(s.keys=[r],s.values=[i],"Comma"==h()){let t=xe("RBracket",e.U.lf("dict element"),n);for(let e of t)e.length>=2&&e[0]&&e[1]&&(s.keys.push(e[0]),s.values.push(e[1]))}else T("RBracket");return E(s)}}():(d(9565,e.U.lf("unexpected operator")),fe())}return d(9566,e.U.lf("unexpected token")),fe()}function de(){let n=h();return"RParen"==n||"RSquare"==n||"RBracket"==n||"Colon"==n||"Semicolon"==n||(!!e.U.endsWith(n,"Assign")||("in"==g()||p().type==t.TokenType.NewLine))}function ye(t,n){let r=[];if(de())return r;for(;;){r.push(n());let i="Comma"==h();if(i&&m(),de())return r;if(!i)return d(9567,e.U.lf("expecting {0}",t)),r}}function ke(e,t){let n=[];for(;n.push(t()),"Comma"==h();)m();return n}function xe(t,n,r){m();let i=[];if(h()!=t)for(;;){i.push(r());let s="Comma"==h();if(s&&m(),h()==t)break;if(!s){d(9568,e.U.lf("expecting {0}",n));break}}return T(t),i}function Te(t,n,r){let i=p();if(m(),h()==t){m();let e=N(n,i);return e.elts=[],E(e)}let s=le();if("for"==g()){let e=N(r,i);return e.elt=s,e.generators=ce(),T(t),E(e)}if("Comma"==h()){let r=N(n,i);return m(),r.elts=ye(e.U.lf("expression"),le),r.elts.unshift(s),T(t),E(r)}if(T(t),"List"==n){let e=N(n,i);return e.elts=[s],E(e)}return s}function ge(){let n=p();return n.type!=t.TokenType.Id&&d(9569,e.U.lf("expecting identifier")),m(),n.value}function he(){let t=xe("RParen",e.U.lf("argument"),pe),n=[],r=[];for(let i of t)"Keyword"==i.kind?r.push(i):(r.length&&d(9570,e.U.lf("positional argument follows keyword argument")),n.push(i));return{args:n,keywords:r}}function ve(t,n){let r=h();if("LParen"==r){let e=N("Call",t);e.func=n;let r=he();return e.args=r.args,e.keywords=r.keywords,E(e)}if("LSquare"==r){let r=p(),i=N("Subscript",t);i.value=n;let s=xe("RSquare",e.U.lf("subscript"),ae);if(0==s.length)d(9571,e.U.lf("need non-empty index list"));else if(1==s.length)i.slice=s[0];else if(s.every((e=>"Index"==e.kind))){let e=s[0];e.value=F(r,s.map((e=>e.value))),i.slice=e}else{let e=N("ExtSlice",r);e.dims=s,i.slice=E(e)}return E(i)}if("Dot"==r){let e=N("Attribute",t);return e.value=n,m(),e.attr=ge(),E(e)}return n}function Se(){let e=p(),t=me();for(;;){let n=ve(e,t);if(n===t)return t;t=n}}function be(){if(Z[h()]){let e=N("UnaryOp");return e.op=Z[h()],m(),e.operand=be(),E(e)}return function(){p();let e=Se();if("Pow"==h()){let t=N("BinOp");return m(),t.left=e,t.op="Pow",t.right=be(),E(t)}return e}()}const Ne={kind:1,id:2,n:3,s:4,func:5,key:6,elt:7,elts:8,keys:9,left:10,ops:11,comparators:12,names:13,items:14,test:15,targets:16,dims:17,context_expr:18,name:19,bases:20,type:21,inClass:22,target:23,annotation:24,simple:25,op:26,operand:27,right:28,values:29,iter:30,ifs:31,is_async:32,value:33,slice:34,attr:35,generators:36,args:37,keywords:38,body:39,handlers:40,orelse:41,finalbody:42,decorator_list:43,kwonlyargs:44,kw_defaults:45,defaults:46,arg:47},Ee={lineno:1,col_offset:1,startPos:1,endPos:1,kind:1},Ce={body:1,orelse:1,finalbody:1},Ue={_comments:1,ctx:1,ns:1};t.dump=function(t,n=!1){const r=(t,i)=>{if(Array.isArray(i)){let e="";for(let n=0;n<i.length;++n)n>0&&(e+=", "),e+=r(t,i[n]);return"["+e+"]"}if(!i||!i.kind)return JSON.stringify(i);let s="",o=Object.keys(i);o.sort(((t,n)=>(Ne[t]||100)-(Ne[n]||100)||e.U.strcmp(t,n)));for(let a of o)if(!(e.U.lookup(Ee,a)||n&&e.U.lookup(Ue,a)))if(s&&(s+=", "),s+=a+"=",Array.isArray(i[a])&&i[a].length&&e.U.lookup(Ce,a)){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+r(e,t)+"\n";s+=t+"]"}else if("_comments"==a){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+JSON.stringify(t.value)+"\n";s+=t+"]"}else s+=r(t,i[a]);return i.kind+"("+s+")"};let i="";for(let e of t)i+=r("",e)+"\n";return i},t.parse=function(m,y,k){i=m,s=y,r=k,n=0,o=0,a=[],l=[0],c=[];let x=[];try{if(u=r[0],f(),p().type!=t.TokenType.EOF)for(x=B();p().type!=t.TokenType.EOF;)e.U.pushRange(x,B())}catch(t){d(9572,e.U.lf("exception: {0}",t.message))}return{stmts:x,diagnostics:c}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){function n(e,t,n){const r={fileName:e.getSourceFile().fileName,start:e.getStart(),length:e.getEnd()-e.getStart(),line:void 0,column:void 0,code:t,category:pxtc.DiagnosticCategory.Error,messageText:n},i=new Error(n);throw i.pyDiagnostic=r,i}t.decompileToPython=function(r,i){let s={blocksInfo:void 0,outfiles:{},diagnostics:[],success:!0,times:{}};try{let o=function(r,i){const s=r.getTypeChecker(),o=(new ts.pxtc.LSHost(r),r.getSourceFile(i)),a=pxtc.decompiler.buildCommentMap(o),l=e.U.toSet(d(),(e=>e)),[u,c]=ts.pxtc.decompiler.buildRenameMap(r,o,{takenNames:l,declarations:"all"}),p=pxtc.getApiInfo(r),f=e.U.mapMap(p.byQName,((e,t)=>t.fileName==i?void 0:t)),m=t.computeScopeVariableLookup(o);return b(o);function d(){return["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EnvironmentError","Exception","False","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","NameError","None","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","True","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError","_","__build_class__","__debug__","__doc__","__import__","__loader__","__name__","__package__","__spec__","abs","all","any","ascii","bin","bool","bytearray","bytes","callable","chr","classmethod","compile","complex","copyright","credits","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","license","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","quit","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip",...Object.keys(e.py.keywords)]}function y(e){if(!e.getSourceFile())return null;let t=e.getText();return f[t]||null}function k(e){if(!e.getSourceFile())return null;let t=e.getText();const n=s.getSymbolAtLocation(e);n&&(t=s.getFullyQualifiedName(n));let r=f[t];if(r&&r.attributes.alias)return r.attributes.alias;if(r&&r.pyQName){if(r.isInstance){if(ts.isPropertyAccessExpression(e))return null;const t=new RegExp(`(?:^|.)${r.namespace}.(.+)`).exec(r.pyQName);if(t)return t[1]}return r.pyQName}return t in pxtc.ts2PyFunNameMap?pxtc.ts2PyFunNameMap[t].n:null}function x(t){let r=k(t);if(r)return r;if(!ts.isIdentifier(t))return e.tickEvent("depython.todo.advancedname"),n(t,3001,"Unsupported advanced name format: "+t.getText());let i=t.text;if(t.getSourceFile()){const e=u.getRenameForPosition(t.getStart());e&&(i=e.name)}return i}function T(e){return"string"!=typeof e&&(e=x(e)),c[e]?pxtc.decompiler.getNewName(e,c):(c[e]=!0,e)}function g(e,t){return 0!=(e.flags&t)}function h(e,t){return g(s.getTypeAtLocation(e),t)}function v(e){return h(e,ts.TypeFlags.StringLike)}function S(e){return h(e,ts.TypeFlags.NumberLike)}function b(e){let t=e.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[]).reduce(((e,t)=>t||e[e.length-1]?[...e,t]:e),[]);return a.filter((e=>!e.owner)).forEach((e=>t.push(...E(e)))),t.join("\n")}function N(e){switch(e.kind){case ts.SyntaxKind.SyntaxList:return e._children.map(N).reduce(((e,t)=>e.concat(t)),[]);case ts.SyntaxKind.EndOfFileToken:case ts.SyntaxKind.OpenBraceToken:case ts.SyntaxKind.CloseBraceToken:return[];default:return C(e)}}function E(e){let t=[];if(e.kind===pxtc.decompiler.CommentKind.SingleLine)t.push("# "+e.text);else{t.push('"""');for(const n of e.lines)t.push(n);t.push('"""')}return t}function C(e){const t=U(e);return pxtc.decompiler.getCommentsForStatement(e,a).map(E).reduce(((e,t)=>e.concat(t)),[]).concat(t)}function U(t){return ts.isVariableStatement(t)?D(t):ts.isClassDeclaration(t)?q(t):ts.isEnumDeclaration(t)?M(t):ts.isExpressionStatement(t)?Q(t):ts.isFunctionDeclaration(t)?W(t):ts.isIfStatement(t)?O(t):ts.isForStatement(t)?$(t):ts.isForOfStatement(t)?F(t):ts.isWhileStatement(t)?I(t):ts.isReturnStatement(t)?w(t):ts.isBlock(t)?z(t):ts.isTypeAliasDeclaration(t)?P(t):ts.isEmptyStatement(t)?[]:ts.isModuleDeclaration(t)?A(t):ts.isBreakStatement(t)?["break"]:ts.isContinueStatement(t)?["continue"]:(e.tickEvent("depython.todo.statement",{statement:t.kind}),n(t,3002,`Not supported in MakeCode Python: ${ts.SyntaxKind[t.kind]} (${t.kind})`))}function A(e){let n=x(e.name),r=e.body&&e.body.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[]).map((e=>t.indent1(e)));return["@namespace",`class ${n}:`].concat(r||[])}function P(e){let t=pxtc.emitPyTypeFromTypeNode(e.type);return[`${x(e.name)} = ${t}`]}function w(e){if(!e.expression)return["return"];let[t,n]=ve(e.expression),r=X("return ",t);return n.concat(r)}function I(e){let[t,n]=ve(e.expression),r=L(e.statement),i=X("while ",t,":");return n.concat(i).concat(r)}function _(e){let t=Math.floor(Number(e));return t!==1/0&&String(t)===e}function K(e){if(!e.initializer)return null;if(e.initializer.kind!==ts.SyntaxKind.VariableDeclarationList)return null;let t=e.initializer;if(1!==t.declarations.length)return null;let n=t.declarations[0],r=x(n.name);if(!n.initializer||!ge(n.initializer)||!S(n.initializer))return null;let[i,s]=ve(n.initializer);if(s.length)return null;let o=J(i);if(!e.condition)return null;if(!ts.isBinaryExpression(e.condition))return null;if(!ts.isIdentifier(e.condition.left))return null;if(x(e.condition.left)!=r)return null;if(!S(e.condition.right))return null;let[a,l]=ve(e.condition.right);if(l.length)return null;let u=J(a),c=u;if(e.condition.operatorToken.kind===ts.SyntaxKind.LessThanEqualsToken&&_(u))c=""+(Number(u)+1);else if(e.condition.operatorToken.kind!==ts.SyntaxKind.LessThanToken)return null;return e.incrementor&&(ts.isPostfixUnaryExpression(e.incrementor)||ts.isPrefixUnaryExpression(e.incrementor))?e.incrementor.operator!==ts.SyntaxKind.PlusPlusToken?null:o<c?{name:r,fromIncl:o,toExcl:c}:null:null}function L(e){let n=U(e).map(t.indent1);return n.length<1&&(n=[t.indent1("pass")]),n}function F(t){if(!ts.isVariableDeclarationList(t.initializer))return e.tickEvent("depython.todo.forof.complexexp"),n(t,3003,"Unsupported expression in for..of initializer: "+t.initializer.getText());let r=t.initializer.declarations.map((e=>x(e.name)));if(1!==r.length)return e.tickEvent("depython.todo.forof.multidecl"),n(t,3004,"Unsupported multiple declerations in for..of: "+t.initializer.getText());let i=r[0],[s,o]=ve(t.expression),a=o;a=a.concat(X(`for ${i} in `,s,":"));let l=L(t.statement);return a=a.concat(l),a}function $(e){let n=K(e);if(n){let{name:t,fromIncl:r,toExcl:i}=n,s="0"===r?`for ${t} in range(${i}):`:`for ${t} in range(${r}, ${i}):`,o=L(e.statement);return[s].concat(o)}let r,i=[];if(e.initializer)if(ts.isVariableDeclarationList(e.initializer)){let t=e.initializer.declarations.map(V).reduce(((e,t)=>e.concat(t)),[]);i=i.concat(t)}else{let[t,n]=ve(e.initializer);i=i.concat(n).concat(t)}if(e.condition){let[t,n]=ve(e.condition);i=i.concat(n),r=J(t)}else r="True";let s=`while ${r}:`;i.push(s);let o=U(e.statement).map(t.indent1);if(0!==o.length||e.incrementor||(o=[t.indent1("pass")]),i=i.concat(o),e.incrementor){let n=B(e.incrementor);if(n)i=i.concat(n.map(t.indent1));else{let[n,r]=ve(e.incrementor);i=i.concat(r).concat(n.map(t.indent1))}}return i}function O(e){let{supportStmts:t,ifStmt:n,rest:r}=R(e);return t.concat([n]).concat(r)}function R(e){let t=[],[n,r]=ve(e.expression);t=t.concat(r);let i=`if ${J(n)}:`,s=[],o=L(e.thenStatement);if(s=s.concat(o),e.elseStatement)if(ts.isIfStatement(e.elseStatement)){let{supportStmts:n,ifStmt:r,rest:i}=R(e.elseStatement),o=`el${r}`;t=t.concat(n),s.push(o),s=s.concat(i)}else{s.push("else:");let t=L(e.elseStatement);s=s.concat(t)}return{supportStmts:t,ifStmt:i,rest:s}}function D(e){return e.declarationList.declarations.map(V).reduce(((e,t)=>e.concat(t)),[])}function q(t){return e.tickEvent("depython.todo.classes"),n(t,3016,"Unsupported: classes are not supported in Python right now.")}function M(r){let i=[];i.push(`class ${x(r.name)}(Enum):`);let s=r.members.every((e=>!!e.initializer)),o=!r.members.every((e=>!!e.initializer));if(!s&&!o)return e.tickEvent("depython.todo.enummix"),n(r,3005,"Unsupported enum decleration: has mixture of explicit and implicit initialization");if(s)return e.tickEvent("depython.todo.enuminit"),n(r,3006,"Unsupported: explicit enum initialization");let a=0;for(let e of r.members)i.push(t.indent1(`${x(e.name)} = ${a++}`));return i}function G(e){return!(!ts.isPrefixUnaryExpression(e)&&!ts.isPostfixUnaryExpression(e))&&(e.operator===ts.SyntaxKind.MinusMinusToken||e.operator===ts.SyntaxKind.PlusPlusToken)}function B(e){if(!G(e))return null;let[t,n]=ve(e.operand),r=e.operator===ts.SyntaxKind.MinusMinusToken?" -= 1":" += 1",i=n;return i.push(`${J(t)}${r}`),i}function Q(e){let t=B(e.expression);if(t)return t;const[n,r]=ve(e.expression);return r.length?["",...r,...n,""]:[...r,...n]}function z(e){return e.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[])}function W(r,i,s,o){let a=[];r.kind!==ts.SyntaxKind.MethodDeclaration&&r.kind!==ts.SyntaxKind.Constructor||a.push("self");let l=(s?oe(r.parameters,s):r.parameters).map((e=>j(e,!o)));a=a.concat(l);let u,c=a.join(", "),p=[];if(i)u=i;else{if(!r.name)return e.tickEvent("depython.todo.anonymousfunc"),n(r,3012,"Unsupported: anonymous function decleration");u=x(r.name)}if(p.push(`def ${u}(${c}):`),!r.body)return e.tickEvent("depython.todo.funcwithoutbody"),n(r,3013,"Unsupported: function decleration without body");let f=[];if(ts.isBlock(r.body))f=z(r.body);else{let[e,t]=ve(r.body);f=f.concat(t),f.concat(e)}if(f.length){let e=m.getExplicitGlobals(r).map((e=>x(e)));e&&e.length&&f.unshift(`global ${e.join(", ")}`);let n=m.getExplicitNonlocals(r).map((e=>x(e)));n&&n.length&&f.unshift(`nonlocal ${n.join(", ")}`),p=p.concat(f.map(t.indent1))}else p.push(t.indent1("pass"));return p}function j(t,r=!0){let i=t.altName||x(t.name),s="";if(t.type&&r){let e=pxtc.emitPyTypeFromTypeNode(t.type);e&&-1===e.indexOf("(TODO")&&(s=`: ${e}`)}let o="";if(t.initializer){let[r,i]=ve(t.initializer);if(i.length)return e.tickEvent("depython.todo.complexinit"),n(t,3007,`Unsupported: complex expression in parameter default value not supported. Expression: ${t.initializer.getText()}`);o=` = ${J(r)}`}return`${i}${s}${o}`}function V(e){let t=[],n=x(e.name);if(e.initializer){let r,[i,s]=ve(e.initializer);if(t=t.concat(s),e.type){r=`${n}: ${pxtc.emitPyTypeFromTypeNode(e.type)} = ${J(i)}`}else r=`${n} = ${J(i)}`;return t.push(r),t}return t}function H(e,t){return[[e],t||[]]}function J(e,t="\n"){return e.join(t)}function X(e="",t,n=""){return t[0]=e+t[0],t[t.length-1]=t[t.length-1]+n,t}function Y(t,r){switch(t){case ts.SyntaxKind.BarBarToken:return"or";case ts.SyntaxKind.AmpersandAmpersandToken:return"and";case ts.SyntaxKind.ExclamationToken:return"not";case ts.SyntaxKind.LessThanToken:return"<";case ts.SyntaxKind.LessThanEqualsToken:return"<=";case ts.SyntaxKind.GreaterThanToken:return">";case ts.SyntaxKind.GreaterThanEqualsToken:return">=";case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsToken:return"==";case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:return"!=";case ts.SyntaxKind.EqualsToken:return"=";case ts.SyntaxKind.PlusToken:return"+";case ts.SyntaxKind.MinusToken:return"-";case ts.SyntaxKind.AsteriskToken:return"*";case ts.SyntaxKind.PlusEqualsToken:return"+=";case ts.SyntaxKind.MinusEqualsToken:return"-=";case ts.SyntaxKind.PercentToken:return"%";case ts.SyntaxKind.SlashToken:return"/";case ts.SyntaxKind.PlusPlusToken:case ts.SyntaxKind.MinusMinusToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,"Unsupported ++ and -- in an expression (not a statement or for loop)");case ts.SyntaxKind.AmpersandToken:return"&";case ts.SyntaxKind.CaretToken:return"^";case ts.SyntaxKind.LessThanLessThanToken:return"<<";case ts.SyntaxKind.GreaterThanGreaterThanToken:return">>";case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3009,"Unsupported operator: >>>");case ts.SyntaxKind.AsteriskAsteriskToken:return"**";case ts.SyntaxKind.AsteriskAsteriskEqualsToken:return"**=";case ts.SyntaxKind.PercentEqualsToken:return"%=";case ts.SyntaxKind.AsteriskEqualsToken:return"*=";case ts.SyntaxKind.SlashEqualsToken:return"/=";default:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,`Unsupported Python operator (code: ${t})`)}}function Z(e){let t=v(e.left),n=v(e.right),r=e.operatorToken.kind===ts.SyntaxKind.PlusToken&&(t||n),[i,s]=ve(e.left);r&&!t&&(i=X("str(",i,")"));let o=Y(e.operatorToken.kind,e),[a,l]=ve(e.right);r&&!n&&(a=X("str(",a,")"));let u=s.concat(l);return[X(J(i)+" "+o+" ",a),u]}function ee(e){let t=k(e);if(t)return H(t);let[n,r]=ve(e.expression),i=x(e.name);return H("length"===i?`len(${J(n)})`:`${J(n)}.${i}`,r)}function te(e){if(ts.isPropertyAccessExpression(e)){let t=x(e.name),n=t.substr(t.lastIndexOf(".")+1);return ts.isIdentifier(e.expression)?[n]:te(e.expression).concat([n])}return ts.isIdentifier(e)?[x(e)]:[]}function ne(t,n,r,i){let o="";n&&(o=te(n).map(e.U.snakify).join("_"));let a=[];if(r&&r.length>1&&i&&i.length>1)for(let t=0;t<r.length&&t<i.length;t++){let n=i[t];if(g(s.getTypeAtLocation(n),ts.TypeFlags.EnumLike)){let t=te(n).map(e.U.snakify);a=a.concat(t)}}let l=a.join("_"),u="";o||l||!t||(u=x(t.name));let c=([o,l,u].filter((e=>e)).map(e.U.snakify).map((e=>e.toLowerCase())).join("_")||"my_callback").split("_");c.length>4&&(c=f(c));let p=e.U.toDictionary(["any","on","event"],(e=>e));for(;c.length>2;){let e=m(c,p);if(e.length==c.length)break;c=e}return c=["on",...c],c.join("_");function f(e){let t={},n=[];for(let r of e)r in t||(t[r]=!0,n.push(r));return n}function m(e,t){let n=[],r=!1;for(let i of e)!(i in t)||r?n.push(i):r=!0;return n}}function re(e){let n=e.join(", ");return n.length>60&&e.length>1?e.map(((n,r)=>{let i=","==n.charAt(n.length-1)?"":",";if(0==r){let e=n.split("\n");if(e.length>1){n=e.shift()+"\n"+t.indent1(e.join("\n"))}return n+i}return r==e.length-1?t.indent1(n):t.indent1(n+i)})):[n]}function ie(e,t,n,r,i){if((ts.isFunctionExpression(e)||ts.isArrowFunction(e))&&t&&t.type&&ts.isFunctionTypeNode(t.type)){let s;return ae(e,ne(t,n,r,i),s,!0)}return ve(e)}function se(t){let r=s.getTypeAtLocation(t.expression),i=s.typeToTypeNode(r),o=ts.createNodeArray([]);if(ts.isFunctionTypeNode(i)&&(o=i.parameters,t.arguments&&o.length<t.arguments.length))return e.tickEvent("depython.todo.argparammismatch",{kind:t.kind}),n(t,3010,"TODO: Unsupported call site where caller the arguments outnumber the callee parameters: "+t.getText());const a=y(t.expression);if(t.arguments&&a&&"TD_ID"==a.attributes.shim)return ve(t.arguments[0]);if(ts.isPropertyAccessExpression(t.expression)&&"toString"===t.expression.name.getText()){const[e,n]=ve(t.expression.expression);return[X("str(",e,")"),n]}let[l,u]=ve(t.expression),c=J(l),p=(t.arguments||ts.createNodeArray()).map(((e,n,r)=>ie(e,o[n],t.expression,o,r))),f=p.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),u);if(0===c.indexOf("_py.py_")){if(p.length<=0)return e.tickEvent("depython.todo._pynoargs"),n(t,3014,"Unsupported: call expression has no arguments for _py.py_ fn");c=c.substr(7).split("_").filter(((e,t)=>0!==t)).join("_");return[X(`${p.shift()[0]}.${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}return[X(`${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}function oe(e,t){let n=[],r={};for(let i=0;i<Math.max(e.length,t.length);i++){let s;if(e[i])s=e[i],r[x(s.name)]=!0;else{s=t[i];let e=x(s.name);r[e]&&(e=pxtc.decompiler.getNewName(e,r),s=Object.assign({altName:e},t[i]))}n.push(s)}return ts.createNodeArray(n,!1)}function ae(e,t,n,r){let i=e.name?x(e.name):T(t||"my_function");return H(i,W(e,i,n,r))}function le(e){switch(e){case ts.SyntaxKind.ExclamationToken:return" ";case ts.SyntaxKind.PlusToken:case ts.SyntaxKind.MinusToken:return"";default:return" "}}function ue(e){let t=Y(e.operator,e),[n,r]=ve(e.operand);return H(`${t}${le(e.operator)}${J(n)}`,r)}function ce(e){let t=Y(e.operator,e),[n,r]=ve(e.operand),i=le(e.operator);return H(`${J(n)}${i}${t}`,r)}function pe(e){let t=e.elements.map(ve),n=t.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),[]);return[X("[",re(t.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),"]"),n]}function fe(t){if(!t.argumentExpression)return e.tickEvent("depython.todo.accesswithoutexp"),n(t,3015,"Unsupported: element access expression without an argument expression");let[r,i]=ve(t.expression),[s,o]=ve(t.argumentExpression),a=i.concat(o);return H(`${J(r)}[${J(s)}]`,a)}function me(e){let[t,n]=ve(e.expression);return H(`(${J(t)})`,n)}function de(e){if(ts.isNoSubstitutionTemplateLiteral(e))return H(`"""\n${t.indent1(e.text.trim())}\n"""`);let[n,r]=ve(e.tag),[i,s]=ve(e.template),o=r.concat(s);return H(`${J(n)}(${J(i)})`,o)}function ye(e){if("undefined"==e.text)return H("None");return H(x(e))}function ke(e,t){let n=e=>ke(e,t);return ts.isBinaryExpression(e)?n(e.left)&&n(e.right):ts.isPropertyAccessExpression(e)?n(e.expression):ts.isPrefixUnaryExpression(e)||ts.isPostfixUnaryExpression(e)?e.operator!==ts.SyntaxKind.PlusPlusToken&&e.operator!==ts.SyntaxKind.MinusMinusToken&&n(e.operand):ts.isParenthesizedExpression(e)?n(e.expression):ts.isArrayLiteralExpression(e)?e.elements.map(n).reduce(((e,t)=>e&&t),!0):ts.isElementAccessExpression(e)?n(e.expression)&&(!e.argumentExpression||n(e.argumentExpression)):t(e)}function xe(e){return e.parent?e.parent.kind===ts.SyntaxKind.ParenthesizedExpression?xe(e.parent):e.parent:void 0}function Te(e){if("any"===e.type.getText().trim()&&(ts.isNumericLiteral(e.expression)||ts.isStringLiteral(e.expression)||e.expression.kind===ts.SyntaxKind.TrueKeyword||e.expression.kind===ts.SyntaxKind.FalseKeyword)){const t=xe(e);if((null==t?void 0:t.kind)===ts.SyntaxKind.BinaryExpression)switch(t.operatorToken.kind){case ts.SyntaxKind.EqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.LessThanToken:case ts.SyntaxKind.LessThanEqualsToken:case ts.SyntaxKind.GreaterThanToken:case ts.SyntaxKind.GreaterThanEqualsToken:return!0}}return!1}function ge(e){return ke(e,(e=>{switch(e.kind){case ts.SyntaxKind.PropertyAccessExpression:case ts.SyntaxKind.BinaryExpression:case ts.SyntaxKind.ParenthesizedExpression:case ts.SyntaxKind.ArrayLiteralExpression:case ts.SyntaxKind.ElementAccessExpression:case ts.SyntaxKind.TrueKeyword:case ts.SyntaxKind.FalseKeyword:case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:case ts.SyntaxKind.NumericLiteral:case ts.SyntaxKind.StringLiteral:case ts.SyntaxKind.NoSubstitutionTemplateLiteral:return!0;case ts.SyntaxKind.CallExpression:case ts.SyntaxKind.NewExpression:case ts.SyntaxKind.FunctionExpression:case ts.SyntaxKind.ArrowFunction:case ts.SyntaxKind.Identifier:case ts.SyntaxKind.ThisKeyword:return!1;case ts.SyntaxKind.PrefixUnaryExpression:case ts.SyntaxKind.PostfixUnaryExpression:let t=e;return t.operator!==ts.SyntaxKind.PlusPlusToken&&t.operator!==ts.SyntaxKind.MinusMinusToken}return!1}))}function he(e){let[t,n]=ve(e.condition),[r,i]=ve(e.whenTrue),[s,o]=ve(e.whenFalse),a=n.concat(i).concat(o);return H(`${r} if ${J(t)} else ${J(s)}`,a)}function ve(t){if(ts.isBinaryExpression(t))return Z(t);if(ts.isPropertyAccessExpression(t))return ee(t);if(ts.isCallExpression(t))return se(t);if(ts.isNewExpression(t))return se(t);if(ts.isFunctionExpression(t)||ts.isArrowFunction(t))return ae(t);if(ts.isPrefixUnaryExpression(t))return ue(t);if(ts.isPostfixUnaryExpression(t))return ce(t);if(ts.isParenthesizedExpression(t))return me(t);if(ts.isArrayLiteralExpression(t))return pe(t);if(ts.isElementAccessExpression(t))return fe(t);if(ts.isNoSubstitutionTemplateLiteral(t)||ts.isTaggedTemplateExpression(t))return de(t);switch(t.kind){case ts.SyntaxKind.TrueKeyword:return H("True");case ts.SyntaxKind.FalseKeyword:return H("False");case ts.SyntaxKind.ThisKeyword:return H("self");case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:return H("None")}return ts.isIdentifier(t)?ye(t):ts.isNumericLiteral(t)||ts.isStringLiteral(t)?H(t.getText()):ts.isConditionalExpression(t)?he(t):ts.isAsExpression(t)&&Te(t)?ve(t.expression):(e.tickEvent("depython.todo.expression",{kind:t.kind}),n(t,3017,"Unsupported expression kind: "+t.kind))}}(r,i),a=i.replace(/(\.py)?\.\w*$/i,"")+".py";s.outfiles[a]=o}catch(t){t.pyDiagnostic?s.diagnostics=[t.pyDiagnostic]:e.reportException(t),s.success=!1}return s};function r(e){return n=>(n||"").split("\n").map((n=>`${t.INDENT.repeat(e)}${n}`)).join("\n")}t.INDENT=" ",t.indent=r,t.indent1=r(1)}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){!function(e){const t=/[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;e.isIdentifierStart=function(e){return ts.pxtc.isIdentifierStart(e,ts.pxtc.ScriptTarget.ES5)},e.isIdentifierChar=function(e){return ts.pxtc.isIdentifierPart(e,ts.pxtc.ScriptTarget.ES5)},e.isSpace=function(e){return!!(32===e||9===e||11===e||12===e||160===e||e>=5760&&t.test(String.fromCharCode(e)))},e.isNewline=function(e){return 10===e||13===e||(8232===e||8233===e)}}(e.rx||(e.rx={}))}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){function t(e){const t={refs:[],children:[],owner:void 0};return function e(r){var i;if(!r)return t;if(ts.isPropertyAccessOrQualifiedName(r))return t;if(ts.isIdentifier(r))return{refs:[{kind:"read",node:r,varName:r.text}],children:[],owner:void 0};if(ts.isVariableDeclaration(r)||ts.isParameter(r)){const t=e(r.initializer);return{refs:[...t.refs,{kind:"decl",node:r,varName:r.name.getText()}],children:t.children,owner:void 0}}if(ts.isPrefixUnaryExpression(r)||ts.isPostfixUnaryExpression(r)){const t=e(r.operand),i=r.operand.getText();return n(t,{refs:[{kind:"assign",node:r,varName:i}],children:[],owner:void 0})}if(function(e){const t=[ts.SyntaxKind.EqualsToken,ts.SyntaxKind.PlusEqualsToken,ts.SyntaxKind.MinusEqualsToken,ts.SyntaxKind.AsteriskEqualsToken,ts.SyntaxKind.AsteriskAsteriskEqualsToken,ts.SyntaxKind.SlashEqualsToken,ts.SyntaxKind.PercentEqualsToken,ts.SyntaxKind.LessThanLessThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,ts.SyntaxKind.AmpersandEqualsToken,ts.SyntaxKind.BarEqualsToken,ts.SyntaxKind.CaretEqualsToken];return ts.isBinaryExpression(e)&&t.some((t=>e.operatorToken.kind===t))}(r)){const t=e(r.right);let i;r.operatorToken.kind!==ts.SyntaxKind.EqualsToken&&(i=e(r.left));const s=r.left.getText();return n(i,n(t,{refs:[{kind:"assign",node:r,varName:s}],children:[],owner:void 0}))}if(ts.isFunctionExpression(r)||ts.isArrowFunction(r)||ts.isFunctionDeclaration(r)||ts.isMethodDeclaration(r)){const s=null===(i=r.name)||void 0===i?void 0:i.getText();let o;s&&(o={kind:"decl",node:r,varName:s});const a=r.parameters.map((t=>e(t))).reduce(n,t),l=e(r.body),u=n(a,l);return u.owner=r,{refs:o?[o]:[],children:[u],owner:void 0}}return r.getChildren().map(e).reduce(n,t)}(e);function n(e,n){return e&&n?{refs:[...e.refs,...n.refs],children:[...e.children,...n.children],owner:e.owner||n.owner}:e||n||t}}function n(e,t,r=[]){const i=[],s=[],o=[],a=[],l={};for(const n of e.refs)"read"===n.kind||"assign"===n.kind?l[n.varName]?o.push(n):p(n)?s.push(n):t&&t[n.varName]?i.push(n):a.push(n):l[n.varName]=n;const u=t||l,c=t?[...r,l]:[];return{globalUsage:i,nonlocalUsage:s,localUsage:o,environmentUsage:a,children:e.children.map((e=>n(e,u,c))),owner:e.owner};function p(e){return r.map((t=>t[e.varName])).reduce(((e,t)=>t||e),void 0)}}function r(e){return`${e.kind}:${e.varName}`}e.computeScopeVariableLookup=function(e){const r=n(t(e)),i=new Map,s=new Map;return function e(t){const n=a((r=t,[...r.globalUsage,...r.environmentUsage].filter((e=>"assign"===e.kind)).map((e=>e))));var r;i.set(t.owner,n);const o=a(function(e){return e.nonlocalUsage.filter((e=>"assign"===e.kind)).map((e=>e))}(t));s.set(t.owner,o),t.children.forEach(e)}(r),{getExplicitGlobals:e=>i.get(e)||[],getExplicitNonlocals:e=>s.get(e)||[]};function o(e){let t=e.node.operand||e.node.left;return ts.isIdentifier(t)?t:void 0}function a(e){return e.map(o).filter((e=>!!e)).map((e=>e)).reduce(((e,t)=>e.find((e=>e.text===t.text))?e:[...e,t]),[])}},e.toStringVariableScopes=function(i){const s=t(i),o=n(s);return function t(n){return[n.refs.map(r).join(", "),...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])]}(s).join("\n")+"\n\n\n"+function(t){return function t(n){const i=n.globalUsage.map(r).join(", "),s=n.nonlocalUsage.map(r).join(", "),o=n.localUsage.map(r).join(", "),a=n.environmentUsage.map(r).join(", ");return[i?"global "+i:"",s?"nonlocal "+s:"",o?"local "+o:"",a?"env "+a:"",...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])].filter((e=>!!e))}(t).join("\n")}(o)}}(e.py||(e.py={}))}(pxt||(pxt={}));
|
|
1
|
+
var pxt;!function(e){!function(e){let t;!function(e){e[e.NonLocal=0]="NonLocal",e[e.Global=1]="Global"}(t=e.VarModifier||(e.VarModifier={})),e.isIndex=function(e){return"Index"===e.kind},e.isSubscript=function(e){return"Subscript"===e.kind}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){var n=e.blocks;let r,i,s,o,a,l,u,c,p,f,m=0,d=0,y=0,k="???";function x(e){return null==e}function T(e){return null!=e}function g(t){return e.tickEvent("python.todo.statement",{kind:t.kind}),n.mkStmt(n.mkText("TODO: "+t.kind))}function h(t){return e.tickEvent("python.todo.expression",{kind:t.kind}),n.mkText(" {TODO: "+t.kind+"} ")}const v=L({primType:"string"}),S=L({primType:"number"}),b=L({primType:"boolean"}),N=L({primType:"void"}),E=L({primType:"any"});let C;const U={str:v,string:v,number:S,bool:b,void:N,any:E};function I(e){switch(e){case ts.SyntaxKind.StringKeyword:return v;case ts.SyntaxKind.NumberKeyword:return S;case ts.SyntaxKind.BooleanKeyword:return b;case ts.SyntaxKind.VoidKeyword:return N;case ts.SyntaxKind.AnyKeyword:return E;default:return C}}function A(t){let n=e.U.flatClone(t);return delete n.pyAST,delete n.pyInstanceType,delete n.pyRetType,delete n.pySymbolType,delete n.moduleTypeMarker,delete n.declared,n.parameters&&(n.parameters=n.parameters.map((t=>(delete(t=e.U.flatClone(t)).pyType,t)))),n}function P(t){if("("==t[0]&&e.U.endsWith(t,")"))return P(t.slice(1,-1));const n=t.indexOf(" => ");if(n>0){const e=t.slice(n+4);if(-1==e.indexOf(")[]")){const r=P(e),i=t.slice(1,n-1);return $(r,(i?i.split(/, /):[]).map((e=>P(e.replace(/\w+\??: /,"")))))}}if(e.U.endsWith(t,"[]"))return F(P(t.slice(0,-2)));if("_py.Array"===t)return F(E);const r=e.U.lookup(U,t);if(r)return r;if(!!t&&!isNaN(t))return S;if("T"==t||"U"==t)return L({primType:"'"+t});if(t.indexOf("|")>=0){return L({primType:"@union",typeArgs:t.split("|").map((e=>e.trim())).map(P)})}let i=_(t+"@type")||_(t);return i?7==i.kind?S:8==i.kind||9==i.kind?i.pyInstanceType||L({classType:i}):6==i.kind?S:(H(null,9502,e.U.lf("'{0}' is not a type near '{1}'",t,k||"???")),L({primType:t})):(H(null,9501,e.U.lf("unknown type '{0}' near '{1}'",t,k||"???")),L({primType:t}))}function w(t){var n;if(!t.pySymbolType){if(k=t.pyQName,t.parameters){pxtc.service.isTaggedTemplate(t)&&(t.parameters=[{name:"literal",description:"",type:"string",options:{}}]);for(let e of t.parameters)e.pyType||(e.pyType=P(e.type))}const r=t.pyRetType;if(xe(t))t.pyRetType=L({moduleType:t});else if(t.retType)if((null===(n=t.qName)||void 0===n?void 0:n.endsWith(".__constructor"))&&"void"===t.retType){const e=K(t.qName.substring(0,t.qName.lastIndexOf(".")));t.pyRetType=e?L({classType:e}):P(t.retType)}else t.pyRetType=P(t.retType);else t.pyRetType||(e.U.oops("no type for: "+t.pyQName),t.pyRetType=L({}));if(r&&ee(t.pyAST,r,t.pyRetType),3==t.kind||1==t.kind){let n=t.parameters.map((e=>e.pyType));if(n.some(x))return H(null,9526,e.U.lf("function symbol is missing parameter types near '{1}'",k||"???")),L({});t.pySymbolType=$(t.pyRetType,n.filter(T))}else t.pySymbolType=t.pyRetType;8!=t.kind&&9!=t.kind||(t.pyInstanceType=L({classType:t})),k=void 0}return t.pySymbolType}function _(t){return e.U.lookup(i,t)||e.U.lookup(r,t)}function K(e){var t;if(!e)return;let n=_(e);if(n)w(n);else if(e.indexOf(".")&&!e.endsWith(".__constructor")){const n=e.substring(0,e.lastIndexOf(".")),r=K(n);if(8===(null==r?void 0:r.kind)&&(null===(t=r.extendsTypes)||void 0===t?void 0:t.length))return K(r.extendsTypes[0]+e.substring(n.length))}return n}function L(t={}){let n=e.U.flatClone(t);return n.tid=++d,n}function F(e){return L({primType:"@array",typeArgs:[e]})}function $(e,t){return L({primType:"@fn"+t.length,typeArgs:[e].concat(t)})}function O(t){return!!e.U.startsWith(t.primType||"","@fn")}function R(t){return!!t.primType&&!e.U.startsWith(t.primType,"@")}function D(t){return!!e.U.startsWith(t.primType||"","@union")}function q(){return s.currFun||s.currClass||s.currModule}function M(){let e=q();for(;e&&e.parent;)e=e.parent;return e}function G(){return"main"==s.currModule.name&&!s.currFun&&!s.currClass}function B(t,n,r){const i=K(n);return i||H(t,9503,e.U.lf("No module named '{0}'",n)),i}function Q(e,n,r,i){i||(i=q());let s=i.vars[e],o=null==s?void 0:s.symbol;if(!o){let n=W(i);n&&(n+=".");let a=n+e;o="ClassDef"===i.kind?oe(2,a):!ae(i)||r!==t.VarModifier.Global&&r!==t.VarModifier.NonLocal?ae(i)?se(4,e):oe(4,a):oe(4,e),s={symbol:o,modifier:r},i.vars[e]=s}for(let e of Object.keys(n))o[e]=n[e];return s}function z(e){return e.unifyWith?(e.unifyWith=z(e.unifyWith),e.unifyWith):e}function W(e){let t=e,n="";t.parent&&"FunctionDef"!==t.parent.kind&&"AsyncFunctionDef"!==t.parent.kind&&(n=W(t.parent),n?n+=".":n="");let r=e;return"Module"==e.kind&&"main"==r.name?"":r.name?n+r.name:n+"?"+e.kind}function j(t){let n=e.U.lookup(Ue,t);if(n)return n;for(let n of e.U.values(s.currModule.vars)){let r=n.symbol;if(r.isImport){if(r.expandsTo==t)return r.pyName||H(null,9553,lf("missing pyName")),r.pyName;if(r.isImport&&e.U.startsWith(t,(r.expandsTo||"")+"."))return r.pyName+t.slice(r.expandsTo.length)}}return t}function V(e){return(e=z(e)).primType?e.typeArgs&&"@array"==e.primType?V(e.typeArgs[0])+"[]":O(e)&&e.typeArgs?"("+e.typeArgs.slice(1).map((e=>"_: "+V(e))).join(", ")+") => "+V(e.typeArgs[0]):D(e)&&e.typeArgs?e.typeArgs.map(V).join(" | "):e.primType+"":e.classType&&e.classType.pyQName?j(e.classType.pyQName)+"":e.moduleType&&e.moduleType.pyQName?j(e.moduleType.pyQName)+"":"any"}function H(e,t,n){l.push(function(e,t,n,r){return e||(e=o),e&&s&&s.currModule?{fileName:a,start:e.startPos,length:e.endPos-e.startPos,line:void 0,column:void 0,code:n,category:t,messageText:r}:{fileName:a,start:0,length:0,line:void 0,column:void 0,code:n,category:t,messageText:r}}(e,pxtc.DiagnosticCategory.Error,t,n))}function J(e){return e.primType?e.primType:e.classType?e.classType:e.moduleType?(e.moduleType.moduleTypeMarker||(e.moduleType.moduleTypeMarker={}),e.moduleType.moduleTypeMarker):null}function X(e){return!J(z(e))}function Y(t,n,r){var i;(n=z(n)).classType!=r&&(X(n)?n.classType=r:ee(t,n,(w(i=r),i.pyInstanceType||H(null,9527,e.U.lf("Instance type symbol '{0}' is missing pyInstanceType",i)),i.pyInstanceType)))}function Z(e,t){ee(e,ke(e),t)}function ee(t,n,r){if(n===r)return;if((n=z(n))===(r=z(r))||ie(n)||ie(r))return;if("any"===n.primType)return void(n.unifyWith=r);const i=J(n),s=J(r);if(i&&s)if(i===s){if(n.unifyWith=r,n.typeArgs&&r.typeArgs)for(let e=0;e<Math.min(n.typeArgs.length,r.typeArgs.length);++e)ee(t,n.typeArgs[e],r.typeArgs[e]);n.unifyWith=r}else!function(t,n,r){H(t,9500,e.U.lf("types not compatible: {0} and {1}",V(n),V(r)))}(t,n,r);else i&&!s?ee(t,r,n):(y++,n.unifyWith=r)}function te(e,t){const n=z(e),r=z(t);if(n===r)return!0;const i=J(n),s=J(r);if(i===s)return!0;if(i&&s){if(re(i)&&re(s)&&i.extendsTypes&&i.extendsTypes.length&&i.extendsTypes.some((e=>e===s.qName)))return!0;if(D(r)){for(let e of r.typeArgs||[])if(te(n,e))return!0;return!1}}return!1}function ne(e,t){const n=z(ke(e)),r=z(t);te(n,r)||(O(n)||O(r)||R(n)||R(r))&&ee(e,n,r)}function re(e){var t;return!!(null===(t=e)||void 0===t?void 0:t.name)}function ie(e){var t;return!!(null===(t=null==e?void 0:e.primType)||void 0===t?void 0:t.startsWith("'"))}function se(e,t){let n=/(.*)\.(.*)/.exec(t),r=n?n[2]:t;return{kind:e,name:r,pyName:r,qName:t,pyQName:t,namespace:n?n[1]:"",attributes:{},pyRetType:L()}}function oe(t,n){let r=i[n];return r?(r.kind=t,r):(r=se(t,n),r.pyQName||H(null,9527,e.U.lf("Symbol '{0}' is missing pyQName",n)),i[r.pyQName]=r,r)}function ae(e){let t=e;for(;t;){if("FunctionDef"==t.kind)return!0;t=t.parent}return!1}function le(t,n,r){if(!n.symInfo){let i=W(n);e.U.endsWith(i,".__init__")&&(i=i.slice(0,-9)+".__constructor"),ae(r=r||q())?n.symInfo=se(t,i):n.symInfo=oe(t,i);const s=n.symInfo;s.pyAST=n,s.pyName||H(null,9528,e.U.lf("Symbol '{0}' is missing pyName",s.qName||s.name)),r.vars[s.pyName]={symbol:s}}return n.symInfo}function ue(t){let n=t.symInfo.qName;return e.U.values(i).filter((e=>e.namespace==n&&2==e.kind))}function ce(t,n,r,i=!1,s=!1){let o;o="__init__"===n?t.pyQName+".__constructor":n.startsWith(t.pyQName+".")?n:t.pyQName+"."+n;let a=K(o);if(a)return a;if(!s)for(let i of t.extendsTypes||[]){let s=K(i);if(s){s==t&&e.U.userError("field lookup loop on: "+s.qName+" / "+n);let i=ce(s,n,r,!0);if(i)return i}}if(!i&&t.pyAST&&"ClassDef"==t.pyAST.kind){let e=oe(2,o);return e.isInstance=!r,e}return null}function pe(t,n,r=!1){const i=ke(t),o=function(e){let t=z(e);return[t.classType,...fe(t.primType),t.moduleType].filter(T)}(i);for(let l of o){let o=!!i.moduleType,u=ce(l,n,o,r);if(u)return o?u.isInstance&&H(null,9505,e.U.lf("the field '{0}' of '{1}' is not static",n,l.pyQName)):ze(t)?u.isProtected=!0:"Name"==(a=t).kind&&"self"==a.id&&(s.currClass||H(null,9529,e.U.lf("no class context found for {0}",u.pyQName)),u.namespace!=s.currClass.symInfo.qName&&(u.isProtected=!0)),u}var a;return null}function fe(e){let t=[];return"@array"==e?t=[_("_py.Array"),_("Array")]:"string"==e&&(t=[_("_py.String"),_("String")]),t.filter((e=>!!e))}function me(t){let n=q(),r=e.U.lookup(n.vars,t);if(r)return r;for(;n;){let r=e.U.lookup(n.vars,t);if(r)return r;do{n=n.parent}while(n&&"ClassDef"==n.kind)}return null}function de(e){if(!e)return null;const t=e.indexOf(".");if(t>0){const n=me(e.slice(0,t)),r=null==n?void 0:n.symbol;r&&r.pyQName!=r.pyName&&(e=r.pyQName+e.slice(t))}else{const t=me(e);if(t)return t}let n=K(e);return n?{symbol:n}:void 0}function ye(e){var t;return null===(t=de(e))||void 0===t?void 0:t.symbol}function ke(e){return e.tsType?z(e.tsType):(e.tsType=L(),e.tsType)}function xe(e){if(!e)return!1;switch(e.kind){case 5:case 9:case 8:case 6:return!0;default:return!1}}function Te(t){const n=e.U.flatClone(s);let r;try{r=t()}finally{s=n}return r}function ge(e,t){return 0==t.length?n.mkText(""):n.mkGroup([n.mkText("/* TODO: "+e+" "),n.mkGroup(t),n.mkText(" */"),n.mkNewLine()])}function he(e){let t=tt(e.value);return e.arg?n.mkInfix(n.mkText(e.arg),"=",t):n.mkGroup([n.mkText("**"),t])}function ve(n){if(!n)return L();let r=Re(n);if(r){let t=_(r+"@type")||_(r);if(t){if(w(t),6==t.kind)return S;if(t.pyInstanceType)return t.pyInstanceType}else if(U[r])return U[r];H(n,9506,e.U.lf("cannot find type '{0}'",r))}else if(t.isSubscript(n)){if("List"===Re(n.value)&&t.isIndex(n.slice)){return F(ve(n.slice.value))}}return H(n,9507,e.U.lf("invalid type syntax")),L({})}function Se(e){return e.pyName&&"_"==e.pyName[0]?e.isProtected?n.mkText("protected "):n.mkText("private "):n.mkText("")}const be={Sub:1,Div:1,Pow:1,LShift:1,RShift:1,BitOr:1,BitXor:1,BitAnd:1,FloorDiv:1,Mult:1},Ne={Eq:1,NotEq:1,Lt:1,LtE:1,Gt:1,GtE:1},Ee={Add:"+",Sub:"-",Mult:"*",MatMult:"Math.matrixMult",Div:"/",Mod:"%",Pow:"**",LShift:"<<",RShift:">>",BitOr:"|",BitXor:"^",BitAnd:"&",FloorDiv:"Math.idiv",And:"&&",Or:"||",Eq:"==",NotEq:"!=",Lt:"<",LtE:"<=",Gt:">",GtE:">=",Is:"===",IsNot:"!==",In:"py.In",NotIn:"py.NotIn"},Ce={Invert:"~",Not:"!",UAdd:"P+",USub:"P-"},Ue={"adafruit_bus_device.i2c_device.I2CDevice":"pins.I2CDevice"};function Ie(e){s.blockDepth++;const t=n.mkBlock(e.map(nt));return s.blockDepth--,t}function Ae(e){e.vars||(e.vars={},e.parent=q(),e.blockDepth=s.blockDepth)}function Pe(e,t=!1){return"any"===V(e)?t?n.mkText(": any"):n.mkText(""):n.mkText(": "+V(e))}function we(e,t){try{return Te(t)}catch(t){return console.log(t),n.mkStmt(ge(`conversion failed for ${e.name||e.kind}`,[]))}}function _e(e){if(!e||!e.pyAST)return!1;if("FunctionDef"!=e.pyAST.kind)return!1;const t=e.pyAST;return!(!t.callers||1!=t.callers.length)&&!t.callers[0].inCalledPosition}function Ke(t,r=!1){return we(t,(()=>{var i,o,a,l;const u=!!s.currClass&&!s.currFun,c=G(),p=!!s.currFun;Ae(t);const f=ye(W(t)),d=le(u?1:3,t);if(!r&&(f&&f.declared===m&&H(t,9520,lf("Duplicate function declaration")),d.declared=m,_e(d)))return n.mkText("");u&&(d.isInstance=!0),s.currFun=t;let y="",k=t.name;let x=[ge("decorators",t.decorator_list.filter((e=>"property"==Re(e)?(y="get",!1):"Attribute"!=e.kind||"setter"!=e.attr||"Name"!=e.value.kind||(k=e.value.id,y="set",!1))).map(tt))];if(t.body.length>=1&&"Raise"==t.body[0].kind&&(t.alwaysThrows=!0),u)if(s.currClass||H(t,9531,lf("method '{0}' is missing current class context",d.pyQName)),d.pyRetType||H(t,9532,lf("method '{0}' is missing a return type",d.pyQName)),"__init__"==t.name)x.push(n.mkText("constructor")),Y(t,d.pyRetType,s.currClass.symInfo);else{if("__get__"==k||"__set__"==k){let e=t.vars.value,n=null==e?void 0:e.symbol;if("__set__"==k&&n){let e=ce(s.currClass.symInfo,"__get__",!1);e&&e.pyAST&&"FunctionDef"==e.pyAST.kind&&ee(t,n.pyRetType,e.pyRetType)}k=k.replace(/_/g,"")}y||(y="_"==k[0]?d.isProtected?"protected":"private":"public",t.symInfo.isStatic&&(y+=" static")),x.push(n.mkText(y+" "),qe(k))}else e.U.assert(!y),"_"==t.name[0]||c||r||p?x.push(n.mkText("function "),qe(k)):x.push(n.mkText("export function "),qe(k));let T="__init__"==t.name?void 0:t.returns?ve(t.returns):d.pyRetType;x.push(function(t,r){var i;const s=t.args;s.kwonlyargs.length&&H(t,9517,e.U.lf("keyword-only arguments not supported yet"));let o=s.args.slice();if(r?"self"!==(null===(i=o[0])||void 0===i?void 0:i.arg)?t.symInfo.isStatic=!0:o.shift():o.some((e=>"self"==e.arg))&&H(t,9519,e.U.lf("non-methods cannot have an argument called 'self'")),!t.symInfo.parameters){let r=s.defaults.length-o.length;t.symInfo.parameters=o.map((i=>{i.annotation||H(t,9519,e.U.lf("Arg '{0}' missing annotation",i.arg));let o=ve(i.annotation),a="";return r>=0&&(a=n.flattenNode([tt(s.defaults[r])]).output,ee(i,o,ke(s.defaults[r]))),r++,{name:i.arg,description:"",type:"",initializer:a,default:a,pyType:o}}))}let a=t.symInfo.parameters.map((r=>{let i=Q(r.name,{isParam:!0}),s=null==i?void 0:i.symbol;r.pyType||H(t,9530,e.U.lf("parameter '{0}' missing pyType",r.name)),ee(t,w(s),r.pyType);let o=[qe(r.name),Pe(r.pyType,!0)];return r.default&&o.push(n.mkText(" = "+r.default)),n.mkGroup(o)}));return s.vararg&&a.push(n.mkText("TODO *"+s.vararg.arg)),s.kwarg&&a.push(n.mkText("TODO **"+s.kwarg.arg)),n.H.mkParenthesizedExpression(n.mkCommaSep(a))}(t,u),T&&z(T)!=N?Pe(T):n.mkText("")),w(d);let g=t.body.map(nt);if("__init__"==t.name){if(s.currClass||H(t,9533,lf("__init__ method '{0}' is missing current class context",d.pyQName)),null===(i=s.currClass)||void 0===i?void 0:i.baseClass){const e=t.body[0],n=s.currClass.baseClass.pyQName+".__constructor";(null===(l=null===(a=null===(o=e.value)||void 0===o?void 0:o.func)||void 0===a?void 0:a.symbolInfo)||void 0===l?void 0:l.pyQName)!==n&&H(t,9575,lf("Sub classes must call 'super().__init__' as the first statement inside an __init__ method"))}for(let e of ue(s.currClass)){let t=e.pyAST;t&&t.value&&g.push(n.mkStmt(n.mkText(`this.${Oe(e.pyName)} = `),tt(t.value)))}}const h=ot(t);x.push(n.mkBlock(h.concat(g)));let v=n.mkGroup(x);return r?x[x.length-1].noFinalNewline=!0:v=n.mkStmt(v),v}))}const Le={FunctionDef:e=>Ke(e),ClassDef:t=>we(t,(()=>{Ae(t);const r=le(8,t);e.U.assert(!s.currClass);let i=G();s.currClass=t,t.isNamespace=t.decorator_list.some((e=>"Name"==e.kind&&"namespace"==e.id));let o=t.isNamespace?[n.mkText("namespace "),qe(t.name)]:[ge("keywords",t.keywords.map(he)),ge("decorators",t.decorator_list.map(tt)),n.mkText(i?"class ":"export class "),qe(t.name)];if(!t.isNamespace&&t.bases.length>0)if("Enum"==Re(t.bases[0]))t.isEnum=!0;else{o.push(n.mkText(" extends ")),o.push(n.mkCommaSep(t.bases.map(tt)));let e=function(e){let t=ye(De(e));return t&&t.pyAST&&"ClassDef"==t.pyAST.kind?t.pyAST:null}(t.bases[0]);if(e)t.baseClass=e.symInfo,r.extendsTypes=[e.symInfo.pyQName];else{const e=Re(t.bases[0]);if(e){const n=ye(e),i=K(e);t.baseClass=n||i,t.baseClass&&(r.extendsTypes=[t.baseClass.pyQName])}}}const a=t.body.filter((e=>t.isNamespace||"FunctionDef"===e.kind)),l=t.isNamespace?[]:t.body.filter((e=>-1===a.indexOf(e)&&"Pass"!==e.kind));let u=Ie(a);o.push(u);let c=!1;if(l.length){c=!0;const e=Ie(l),r=n.mkStmt(n.mkGroup([n.mkText(`public static __init${t.name}() `),e]));u.children.unshift(r)}if(!t.isNamespace){const e=ue(t).map((e=>(e.pyName&&e.pyRetType||H(t,9535,lf("field definition missing py name or return type",e.qName)),e))),r=e.filter((e=>!e.isInstance)),i=e.filter((e=>e.isInstance)).map((e=>n.mkStmt(Se(e),qe(e.pyName),Pe(e.pyRetType)))),s=r.map((e=>n.mkGroup([n.mkStmt(Se(e),n.mkText("static "),qe(e.pyName),Pe(e.pyRetType)),mt(Oe(t.name),Oe(e.pyName),V(e.pyRetType))])));u.children=s.concat(i).concat(u.children)}return c&&(o=[n.mkStmt(n.mkGroup(o)),n.mkStmt(n.mkText(`${t.name}.__init${t.name}()`))]),n.mkStmt(n.mkGroup(o))})),Return:e=>{if(e.value){let t=s.currFun;return t&&(t.symInfo.pyRetType||H(e,9536,lf("function '{0}' missing return type",t.symInfo.pyQName)),Z(e.value,t.symInfo.pyRetType)),n.mkStmt(n.mkText("return "),tt(e.value))}return n.mkStmt(n.mkText("return"))},AugAssign:e=>{let t=Ee[e.op];return t.length>3?n.mkStmt(n.mkInfix(tt(e.target),"=",n.H.mkCall(t,[tt(e.target),tt(e.value)]))):n.mkStmt(tt(e.target),n.mkText(" "+t+"= "),tt(e.value))},Assign:e=>Fe(e),AnnAssign:e=>Fe(e),For:t=>{if(e.U.assert(0==t.orelse.length),t.target.forTargetEndPos=t.endPos,Me(t.iter,"range")){let e=t.iter,r=tt(t.target),i=qe(De(t.target));Z(t.target,S);let s=1==e.args.length?n.mkText("0"):tt(e.args[0]),o=tt(e.args[1==e.args.length?0:1]);if(e.args.length<=2)return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,"<",o),n.mkText("; "),n.mkPostfix([i],"++"),n.mkText(")"),Ie(t.body));let a="Num"===e.args[2].kind?e.args[2].n:void 0;if(null==a&&"UnaryOp"===e.args[2].kind){const t=e.args[2];"Num"===t.operand.kind&&("UAdd"===t.op?a=t.operand.n:"USub"===t.op&&(a=-t.operand.n))}if(void 0!==a){const l=a>0?"<":">";return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,l,o),n.mkText("; "),n.mkInfix(i,"+=",tt(e.args[2])),n.mkText(")"),Ie(t.body))}}if(m>1){const e=ke(t.target);Z(t.iter,ke(t.iter)==v?e:F(e))}return n.mkStmt(n.mkText("for ("),tt(t.target),n.mkText(" of "),tt(t.iter),n.mkText(")"),Ie(t.body))},While:t=>(e.U.assert(0==t.orelse.length),n.mkStmt(n.mkText("while ("),tt(t.test),n.mkText(")"),Ie(t.body))),If:t=>{let r=t=>{let i=[n.mkText("if ("),tt(t.test),n.mkText(")"),Ie(t.body)];return t.orelse.length&&(i[i.length-1].noFinalNewline=!0,1==t.orelse.length&&"If"==t.orelse[0].kind?(i.push(n.mkText(" else ")),e.U.pushRange(i,r(t.orelse[0]))):i.push(n.mkText(" else"),Ie(t.orelse))),i};return n.mkStmt(n.mkGroup(r(t)))},With:t=>{if(1==t.items.length&&function(e,t){let n=ke(e);return!(!n.classType||n.classType.pyQName!=t)||V(n)==t}(t.items[0].context_expr,"pins.I2CDevice")){let r=t.items[0],i=[],s=tt(r.context_expr);if(r.optional_vars){let e=Re(r.optional_vars);if(e){let o=Q(e,{isLocal:!0}),a=null==o?void 0:o.symbol;e=Oe(e),i.push(n.mkStmt(n.mkText("const "+e+" = "),s)),a.pyRetType||H(t,9537,lf("function '{0}' missing return type",a.pyQName)),Z(r.context_expr,a.pyRetType),s=n.mkText(e)}}return i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("begin()")))),e.U.pushRange(i,t.body.map(nt)),i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("end()")))),n.mkGroup(i)}let r=[],i=t.items.map(((e,t)=>{let i="with"+t;if(e.optional_vars){let t=De(e.optional_vars);Q(t,{isLocal:!0}),i=Oe(t)}return r.push(n.mkStmt(n.mkText(i+".end()"))),n.mkStmt(n.mkText("const "+i+" = "),n.mkInfix(tt(e.context_expr),".",n.mkText("begin()")))}));return e.U.pushRange(i,t.body.map(nt)),e.U.pushRange(i,r),n.mkBlock(i)},Raise:e=>{let t,r=e.exc||e.cause;if(!r)return n.mkStmt(n.mkText("throw"));if(r&&"Call"==r.kind){let e=r;1==e.args.length&&(t=tt(e.args[0]))}return t||(t=n.mkGroup([n.mkText("`"),tt(r),n.mkText("`")])),n.mkStmt(n.H.mkCall("control.fail",[t]))},Assert:e=>(e.msg||H(e,9537,lf("assert missing message")),n.mkStmt(n.H.mkCall("control.assert",[e.test,e.msg].filter((e=>!!e)).map(tt)))),Import:e=>{for(let t of e.names)t.asname&&Q(t.asname,{expandsTo:t.name}),B(e,t.name);return n.mkText("")},ImportFrom:e=>{let t=[];for(let r of e.names)if("*"==r.name)e.module||H(e,9538,lf("import missing module name")),Q(e.module,{isImportStar:!0});else{let i=e.module+"."+r.name,s=K(i),o=r.asname||r.name;xe(s)?(Q(o,{isImport:s,expandsTo:i}),t.push(n.mkStmt(n.mkText(`import ${Oe(o)} = ${i}`)))):Q(o,{expandsTo:i})}return n.mkGroup(t)},ExprStmt:e=>{return"Str"==e.value.kind?((t=e.value.s).trim().split(/\n/).length<=1?t=t.trim():t+="\n",n.mkStmt(n.mkText("/** "+t+" */"))):n.mkStmt(tt(e.value));var t},Pass:e=>n.mkStmt(n.mkText("")),Break:e=>n.mkStmt(n.mkText("break")),Continue:e=>n.mkStmt(n.mkText("continue")),Delete:t=>(H(t,9550,e.U.lf("delete statements are unsupported")),g(t)),Try:e=>{let t=[n.mkText("try"),Ie(e.body.concat(e.orelse))];for(let r of e.handlers)t.push(n.mkText("catch ("),r.name?qe(r.name):n.mkText("_")),r.type&&t.push(n.mkText("/* instanceof "),tt(r.type),n.mkText(" */")),t.push(n.mkText(")"),Ie(r.body));return e.finalbody.length&&t.push(n.mkText("finally"),Ie(e.finalbody)),n.mkStmt(n.mkGroup(t))},AsyncFunctionDef:t=>(H(t,9551,e.U.lf("async function definitions are unsupported")),g(t)),AsyncFor:t=>(H(t,9552,e.U.lf("async for statements are unsupported")),g(t)),AsyncWith:t=>(H(t,9553,e.U.lf("async with statements are unsupported")),g(t)),Global:r=>{const i=M();q();for(const n of r.names){e.U.lookup(i.vars,n)||H(r,9521,e.U.lf("No binding found for global variable"));Q(n,{},t.VarModifier.Global).firstRefPos<r.startPos&&H(r,9522,e.U.lf("Variable referenced before global declaration"))}return n.mkStmt(n.mkText(""))},Nonlocal:r=>{const i=M(),s=q();for(const n of r.names){const o=st(n,s);o&&o!==i&&o.vars[n].modifier!==t.VarModifier.Global||H(r,9523,e.U.lf("No binding found for nonlocal variable"));Q(n,{},t.VarModifier.NonLocal).firstRefPos<r.startPos&&H(r,9524,e.U.lf("Variable referenced before nonlocal declaration"))}return n.mkStmt(n.mkText(""))}};function Fe(t){let r,i,o,a;if("Assign"===t.kind){if(1!=t.targets.length)return H(t,9553,e.U.lf("multi-target assignment statements are unsupported")),g(t);a=t.targets[0],o=t.value,r=null,i=null}else{if("AnnAssign"!==t.kind)return t;a=t.target,o=t.value||null,r=t.annotation,i=ve(r),Z(a,i)}let l,u="",c=!!o&&Me(o,"const"),p=Re(a)||"";if(G()||s.currClass||s.currFun||"_"==p[0]||(u="export "),p&&s.currClass&&!s.currFun){c=!(!o||!s.currClass.isNamespace);let e=ce(s.currClass.symInfo,p,!0);if(e||H(t,9544,lf("cannot get class field")),0==m)return n.mkText("/* skip for now */");e.pyRetType||H(t,9539,lf("function '{0}' missing return type",e.pyQName)),Z(a,e.pyRetType),e.isInstance=!1,s.currClass.isNamespace&&(u=`export ${c?"const":"let"} `)}if(!o)return H(t,9555,e.U.lf("unable to determine value of assignment")),g(t);if(Z(a,ke(o)),c)return Q(De(a),{}),/^static /.test(u)||/const/.test(u)||(u+="const "),n.mkStmt(n.mkText(u),n.mkInfix(tt(a),"=",tt(o)));if(!u&&"Tuple"==a.kind)return function(t,r,i){if(r.elts.filter((e=>"Name"!==e.kind)).length)return H(t,9556,e.U.lf("non-trivial tuple assignment unsupported")),g(t);const s=r.elts.map(Re).map((e=>e?q().vars[e]:void 0));if(s.some((e=>void 0!==(null==e?void 0:e.modifier)))){const e=function(){const e=q();return void 0===e.nextHelperVariableId&&(e.nextHelperVariableId=0),"___tempvar"+e.nextHelperVariableId++}(),t=[n.mkStmt(n.mkInfix(n.mkGroup([n.mkText("let "),n.mkText(e)]),"=",tt(i)))];for(let i=0;i<s.length;i++){const s=o(r.elts[i]);t.push(n.mkStmt(n.mkInfix(s,"=",n.mkGroup([n.mkText(e),n.mkText(`[${i}]`)]))))}return n.mkGroup(t)}{let e=[n.mkText("let "),n.mkText("[")],t=r.elts.map((e=>e)).map((e=>o(e,!0)));return e.push(n.mkCommaSep(t)),e.push(n.mkText("]")),n.mkStmt(n.mkInfix(n.mkGroup(e),"=",tt(i)))}function o(e,t=!1){Ve(e,"identifierCompletion"),ke(e);Xe(e);return $e(e,t)}}(t,a,o);if("Name"===a.kind){const e=q().vars[p],t=null==e?void 0:e.symbol;t&&4===t.kind&&void 0===e.modifier&&(void 0===e.firstAssignPos||e.firstAssignPos>a.startPos)&&(e.firstAssignPos=a.startPos,e.firstAssignDepth=s.blockDepth)}if(r&&i&&("NameConstant"===o.kind&&null===o.value||"List"===o.kind&&0===o.elts.length)){const e=V(i);l=n.mkInfix(tt(a),":",n.mkText(e))}return l||(l=tt(a)),n.mkStmt(n.mkText(u),n.mkInfix(l,"=",tt(o)))}function $e(e,t=!1){var r,i;let o=e.id,a=de(o),l=null==a?void 0:a.symbol,u=q().vars[o],c=null==u?void 0:u.symbol;return void 0===e.isdef&&(!l||4===l.kind&&l!==c?(s.currClass&&!s.currFun?(e.isdef=!1,a=Q(o,{})):(e.isdef=!0,a=Q(o,{isLocal:!0})),l=a.symbol):e.isdef=!1,e.symbolInfo=l,e.tsType||H(e,9540,lf("definition missing ts type")),l.pyRetType||H(e,9568,lf("missing py return type")),ee(e,e.tsType,l.pyRetType)),e.isdef&&at(a,q())&&(e.isdef=!1),Ye(a,e),e.isdef&&!t?n.mkGroup([n.mkText("let "),qe(o)]):!(null==l?void 0:l.namespace)||!(null==l?void 0:l.qName)||(null===(r=s.currClass)||void 0===r?void 0:r.isNamespace)&&(null===(i=s.currClass)||void 0===i?void 0:i.name)===(null==l?void 0:l.namespace)?qe(o):qe(l.qName)}function Oe(e){return n.isReservedWord(e)?e+"_":e||e}function Re(e){var t;if("Name"==e.kind){let t=e.id,n=me(t),r=null==n?void 0:n.symbol;if(r){if(r.expandsTo)return r.expandsTo;if(s.currClass&&!s.currFun&&!(null==n?void 0:n.modifier)&&r.qName)return r.qName}return t}if("Attribute"==e.kind){let t=Re(e.value);if(t)return t+"."+e.attr}if(ze(e)&&(null===(t=s.currClass)||void 0===t?void 0:t.baseClass))return s.currClass.baseClass.qName}function De(e){let t=Re(e);return t||H(null,9542,lf("Cannot get name of unknown expression kind '{0}'",e.kind)),t}function qe(e){return"self"==e?n.mkText("this"):n.mkText(Oe(e))}function Me(e,t){if("Call"!=e.kind)return!1;return Re(e.func)===t}function Ge(t,r,i){let s=Ee[r];return e.U.assert(!!s),s.length>3?n.H.mkCall(s,[t,i]):n.mkInfix(t,s,i)}const Be={memoryview:{n:"",t:C},const:{n:"",t:S},"micropython.const":{n:"",t:S}};const Qe=function(){let e={};return Object.keys(pxtc.ts2PyFunNameMap).forEach((t=>{let n=pxtc.ts2PyFunNameMap[t];if(n&&n.n){let r={n:t,t:I(n.t),scale:n.scale};e[n.n]=r}})),Object.keys(Be).forEach((t=>{e[t]=Be[t]})),e}();function ze(e){return Me(e,"super")&&0==e.args.length}function We(e){return e.type==n.NT.Prefix&&'"'==e.op[0]?n.mkText(n.backtickLit(JSON.parse(e.op))):e}function je(e){return c&&e.startPos<=c.position&&c.position<=e.endPos}function Ve(e,t){m>100&&c&&null==p&&(c.type==t||"symbol"==c.type)&&je(e)&&(p=e,f=q())}function He(e,t){if(t&&t.pyAST&&"FunctionDef"==t.pyAST.kind){let n=t.pyAST;n.callers||(n.callers=[]),n.callers.indexOf(e)<0&&n.callers.push(e)}}const Je={BoolOp:e=>{let t=tt(e.values[0]);for(let n=1;n<e.values.length;++n)t=Ge(t,e.op,tt(e.values[n]));return t},BinOp:e=>{let t=function(e){if("Mod"==e.op&&"Str"==e.left.kind&&("Tuple"==e.right.kind||"List"==e.right.kind)){let t=e.left.s,r=e.right.elts;r=r.slice();let i=[n.mkText("`")];return t.replace(/([^%]+)|(%[\d\.]*([a-zA-Z%]))/g,((e,t,s,o)=>{if(t)i.push(n.mkText(t.replace(/[`\\$]/g,(e=>"\\"+e))));else{let e=r.shift(),t=e?tt(e):n.mkText("???");i.push(n.mkText("${"),t,n.mkText("}"))}return""})),i.push(n.mkText("`")),n.mkGroup(i)}return null}(e);if(t)return t;const r=tt(e.left),i=tt(e.right);return ct(e.left)&&ct(e.right)&&"Add"===e.op?n.H.extensionCall("concat",[r,i],!1):(t=Ge(r,e.op,i),be[e.op]&&(Z(e.left,S),Z(e.right,S),e.tsType||H(e,9570,lf("binary op missing ts type")),ee(e,e.tsType,S)),t)},UnaryOp:t=>{let r=Ce[t.op];return e.U.assert(!!r),n.mkInfix(null,r,tt(t.operand))},Lambda:t=>(H(t,9574,e.U.lf("lambda expressions are not supported yet")),h(t)),IfExp:e=>n.mkInfix(n.mkInfix(tt(e.test),"?",tt(e.body)),":",tt(e.orelse)),Dict:e=>{s.blockDepth++;const t=e.keys.map(((t,r)=>{const i=e.values[r];return void 0===t?h(e):n.mkStmt(n.mkInfix(tt(t),":",tt(i)),n.mkText(","))})),r=n.mkBlock(t);return s.blockDepth--,r},Set:e=>h(e),ListComp:e=>h(e),SetComp:e=>h(e),DictComp:e=>h(e),GeneratorExp:e=>{if(1==e.generators.length&&"Comprehension"==e.generators[0].kind){let t=e.generators[0];if(0==t.ifs.length)return Te((()=>{let r=De(t.target);return Q(r,{isParam:!0}),n.mkInfix(tt(t.iter),".",n.H.mkCall("map",[n.mkGroup([qe(r),n.mkText(" => "),tt(e.elt)])]))}))}return h(e)},Await:e=>h(e),Yield:e=>h(e),YieldFrom:e=>h(e),Compare:e=>{if(1==e.ops.length&&("In"==e.ops[0]||"NotIn"==e.ops[0])){z(ke(e.comparators[0]))==v&&Z(e.left,v);let t=n.mkInfix(tt(e.comparators[0]),".",n.H.mkCall("indexOf",[tt(e.left)]));return n.mkInfix(t,"In"==e.ops[0]?">=":"<",n.mkText("0"))}let t=tt(e.left),r=tt(e.comparators[0]);const i=(e,i,s)=>{Ne[e]&&pt(i)&&pt(s)&&n.flattenNode([t])!==n.flattenNode([r])&&(t=n.H.mkParenthesizedExpression(n.mkGroup([t,n.mkText(" as any")])),r=n.H.mkParenthesizedExpression(n.mkGroup([r,n.mkText(" as any")])))};i(e.ops[0],e.left,e.comparators[0]);let s=Ge(t,e.ops[0],r);for(let n=1;n<e.ops.length;++n)t=tt(e.comparators[n-1]),r=tt(e.comparators[n]),i(e.ops[n],e.comparators[n-1],e.comparators[n]),s=Ge(s,"And",Ge(t,e.ops[n],r));return s},Call:t=>{var r,i,o,a,l;t.func.inCalledPosition=!0;let u,m,d=Re(t.func),y=ye(d),k=y&&8==y.kind,x=y,T="";if(k)x=ye(y.pyQName+".__constructor"),x||(x=le(3,ft(null==y?void 0:y.pyAST)));else if("Attribute"==t.func.kind){let e=t.func;m=e.value,u=ke(m),(u.classType||u.primType)&&(T=e.attr,x=pe(m,T,!0),x&&(T=x.name))}let g=t.args.slice();if("super"==d&&0==g.length)return s.currClass&&s.currClass.baseClass&&(t.tsType||H(t,9543,lf("call expr missing ts type")),Y(t,t.tsType,s.currClass.baseClass)),n.mkText("super");if(Me(t,"int")&&1===g.length&&g[0]){const e=g[0],t=tt(e),r=ke(e);if("string"===r.primType)return n.mkGroup([n.mkText("parseInt"),n.mkText("("),t,n.mkText(")")]);if("number"===r.primType)return n.mkGroup([n.mkInfix(n.mkText("Math"),".",n.mkText("trunc")),n.mkText("("),t,n.mkText(")")])}if(!x){let t=e.U.lookup(Qe,d);if(t&&(T=""),T&&(d=V(u)+"."+T,t=e.U.lookup(Qe,d),t||"@array"!=J(z(u))||(d="Array."+T,t=e.U.lookup(Qe,d))),T="",t)if("."==t.n[0]&&g.length){if(m=g.shift(),u=ke(m),T=t.n.slice(1),x=pe(m,T),x&&2==x.kind)return n.mkInfix(tt(m),".",n.mkText(T))}else x=K(t.n)}if(Me(t,"str"))return ee(t,t.tsType,v),n.mkInfix(n.mkText('""'),"+",tt(t.args[0]));const h="Attribute"===t.func.kind&&ze(t.func.value);!x&&h&&(x=K(d));const S="__init__"===(null===(r=s.currFun)||void 0===r?void 0:r.name)&&"__constructor"===(null==x?void 0:x.name)&&(null===(o=null===(i=s.currClass)||void 0===i?void 0:i.baseClass)||void 0===o?void 0:o.pyQName)===(null==x?void 0:x.namespace)&&h;S&&(x=ye((null===(l=null===(a=s.currClass)||void 0===a?void 0:a.baseClass)||void 0===l?void 0:l.pyQName)+".__constructor")),x||H(t,9508,e.U.lf("can't find called function '{0}'",d));let b,N=x?x.parameters:null,C=[];if(N){for(g.length>N.length&&H(t,9510,e.U.lf("too many arguments in call to '{0}'",x.pyQName));g.length<N.length;)g.push(null);g=g.slice(0,N.length);for(let n of t.keywords){let t=N.findIndex((e=>e.name==n.arg));t<0?H(n,9511,e.U.lf("'{0}' doesn't have argument named '{1}'",x.pyQName,n.arg)):null!=g[t]?H(n,9512,e.U.lf("argument '{0} already specified in call to '{1}'",n.arg,x.pyQName)):g[t]=n.value}for(let e=g.length-1;e>=0&&(N[e].initializer&&null==g[e]);e--)g.pop();for(let r=0;r<g.length;++r){let i=g[r];if(null!=i||N[r].initializer)if(i){N[r].pyType||H(t,9545,lf("formal arg missing py type"));const e=N[r].pyType;"any"!==e.primType&&ne(i,e),"Name"==i.kind&&_e(i.symbolInfo)?C.push(Ke(i.symbolInfo.pyAST,!0)):C.push(tt(i))}else N[r].initializer||H(t,9547,lf("formal arg missing initializer")),C.push(n.mkText(N[r].initializer));else H(t,9513,e.U.lf("missing argument '{0}' in call to '{1}'",N[r].name,x.pyQName)),C.push(n.mkText("null"))}}else x&&H(t,9509,e.U.lf("calling non-function")),C=g.map(tt);if(!p&&c&&"signature"==c.type&&je(t)){p=t,f=q(),c.auxResult=0;for(let e=0;e<g.length;++e){c.auxResult=e;let t=g[e];if(!t)break;if(t.startPos<=c.position&&c.position<=t.endPos)break}}if(x)if(x.pyRetType||H(t,9549,lf("function missing pyRetType")),m&&ct(m)&&u?function(e,t,n){switch(t.qName){case"Array.pop":case"Array.removeAt":case"Array.shift":case"Array.find":case"Array.get":case"Array._pickRandom":Z(e,n.typeArgs[0]);break;case"Array.concat":case"Array.slice":case"Array.filter":case"Array.fill":Z(e,n);break;case"Array.reduce":if("Call"===e.kind&&e.args.length>1){const t=ke(e.args[1]);t&&Z(e,t)}break;case"Array.map":Z(e,F(E));break;default:Z(e,t.pyRetType)}}(t,x,u):Z(t,x.pyRetType),t.symbolInfo=x,x.attributes.py2tsOverride){const e=function(e){const t=new RegExp(/([^\$]*\()?([^\$\(]*)\$(\d)(?:(?:(?:=(\d+|'[a-zA-Z0-9_]*'|false|true|null|undefined))|(\?)|))/,"y"),n=[];let r,i=0;do{i=t.lastIndex,r=t.exec(e),r&&(r[1]&&n.push({kind:"text",text:r[1]}),n.push({kind:"arg",prefix:r[2],index:parseInt(r[3]),default:r[4],isOptional:!!r[5]}))}while(r);null!=i?n.push({kind:"text",text:e.substr(i)}):n.push({kind:"text",text:e});return{parts:n}}(x.attributes.py2tsOverride);if(e){T&&!m&&H(t,9550,lf("missing recv"));let r=function(e,t,r){const i=[];for(const r of e.parts)if("text"===r.kind)i.push(n.mkText(r.text));else if(t[r.index]||r.default)r.prefix&&i.push(n.mkText(r.prefix)),t[r.index]?i.push(t[r.index]):i.push(n.mkText(r.default));else if(!r.isOptional)return;if(r)return n.mkInfix(r,".",n.mkGroup(i));return n.mkGroup(i)}(e,C,T?tt(m):void 0);return r||H(t,9555,lf("buildOverride failed unexpectedly")),r}}else if(x.attributes.pyHelper)return n.mkGroup([n.mkInfix(n.mkText("_py"),".",n.mkText(x.attributes.pyHelper)),n.mkText("("),n.mkCommaSep(m?[tt(m)].concat(C):C),n.mkText(")")]);b=S?n.mkText("super"):T?n.mkInfix(tt(m),".",n.mkText(T)):tt(t.func);let U=[b,n.mkText("("),n.mkCommaSep(C),n.mkText(")")];return x&&1==C.length&&pxtc.service.isTaggedTemplate(x)&&(U=[b,We(C[0])]),k&&(y&&y.pyQName||H(t,9551,lf("missing namedSymbol or pyQName")),U[0]=n.mkText(j(y.pyQName)),U.unshift(n.mkText("new "))),n.mkGroup(U)},Num:e=>(e.tsType||H(e,9556,lf("tsType missing")),ee(e,e.tsType,S),n.mkText(e.ns)),Str:e=>(e.tsType||H(e,9557,lf("tsType missing")),ee(e,e.tsType,v),n.mkText(n.stringLit(e.s))),FormattedValue:e=>h(e),JoinedStr:e=>h(e),Bytes:t=>n.mkText(`hex\`${e.U.toHex(new Uint8Array(t.s))}\``),NameConstant:e=>(null!==e.value&&(e.tsType||H(e,9558,lf("tsType missing")),ee(e,e.tsType,b)),n.mkText(JSON.stringify(e.value))),Ellipsis:e=>h(e),Constant:e=>h(e),Attribute:t=>{let r=tt(t.value),i=ke(t.value),s=pe(t.value,t.attr),o=t.attr;if(Ve(t,"memberCompletion"),s)t.symbolInfo=s,He(t,s),t.tsType&&s.pyRetType||H(t,9559,lf("tsType or pyRetType missing")),ee(t,t.tsType,s.pyRetType),o=s.name;else if(i.moduleType){let n=K(i.moduleType.pyQName+"."+t.attr);n?(t.symbolInfo=n,He(t,n),Z(t,w(n)),o=n.name):H(t,9514,e.U.lf("module '{0}' has no attribute '{1}'",i.moduleType.pyQName,t.attr))}else m>2&&H(t,9515,e.U.lf("unknown object type; cannot lookup attribute '{0}'",t.attr));return n.mkInfix(r,".",n.mkText(Oe(o)))},Subscript:e=>{if("Index"==e.slice.kind){const t=z(ke(e.value));if(ct(e.value)){Z(e,t.typeArgs[0])}else"string"===t.primType?Z(e,t):m>2&&X(ke(e))&&Z(e,E);let r=e.slice.value;return m>2&&X(ke(r))&&Z(r,S),n.mkGroup([tt(e.value),n.mkText("["),tt(r),n.mkText("]")])}if("Slice"==e.slice.kind){const t=ke(e.value);Z(e,t);let r=e.slice;if(r.step){const i="string"===(null==t?void 0:t.primType);return n.H.mkCall(i?"_py.stringSlice":"_py.slice",[tt(e.value),r.lower?tt(r.lower):n.mkText("null"),r.upper?tt(r.upper):n.mkText("null"),tt(r.step)])}return n.mkInfix(tt(e.value),".",n.H.mkCall("slice",[r.lower?tt(r.lower):n.mkText("0"),r.upper?tt(r.upper):null].filter(T)))}return h(e)},Starred:e=>n.mkGroup([n.mkText("... "),tt(e.value)]),Name:e=>{if(Ve(e,"identifierCompletion"),"self"==e.id&&s.currClass)return e.tsType||H(e,9560,lf("missing tsType")),Y(e,e.tsType,s.currClass.symInfo),n.mkText("this");let t=Xe(e),r=null==t?void 0:t.symbol;if(r&&r.isImport)return qe(r.name);if(Ye(t,e),e.ctx.indexOf("Load")>=0){if(!r)return qe(De(e));if(!(null==r?void 0:r.qName))return H(e,9561,lf("missing qName")),qe("unknown");return qe(r.qName.replace("@type",""))}return $e(e)},List:Ze,Tuple:Ze};function Xe(t){let n=de(t.id),r=null==n?void 0:n.symbol;if(!n){let r=e.U.lookup(Qe,t.id);r&&(n=de(r.n))}if(n&&r){if(t.symbolInfo=r,t.tsType||H(t,9562,lf("missing tsType")),ee(t,t.tsType,w(r)),r.isImport)return n;He(t,r),t.forTargetEndPos&&n.forVariableEndPos!==t.forTargetEndPos&&(n.forVariableEndPos?n.lastRefPos=n.forVariableEndPos+1:n.forVariableEndPos=t.forTargetEndPos)}else m>0&&H(t,9516,e.U.lf("name '{0}' is not defined",t.id));return n}function Ye(e,n){if(e){if(e.modifier===t.VarModifier.Global){const t=M();t&&t.vars[e.symbol.name]&&(e=t.vars[e.symbol.name])}else if(e.modifier===t.VarModifier.NonLocal){const t=st(e.symbol.name,q());t&&(e=t.vars[e.symbol.name])}(void 0===e.firstRefPos||e.firstRefPos>n.startPos)&&(e.firstRefPos=n.startPos),(void 0===e.lastRefPos||e.lastRefPos<n.startPos)&&(e.lastRefPos=n.startPos)}}function Ze(e){return e.tsType||H(e,9563,lf("missing tsType")),ee(e,e.tsType,F(e.elts[0]?ke(e.elts[0]):L())),n.mkGroup([n.mkText("["),n.mkCommaSep(e.elts.map(tt)),n.mkText("]")])}function et(e){return`${e.startPos}:${e.endPos}`}function tt(t){o=t;let n=Je[t.kind];n||e.U.oops(t.kind+" - unknown expr"),ke(t);const r=n(t);return r.id=et(t),r}function nt(t){o=t;let r=Le[t.kind];r||e.U.oops(t.kind+" - unknown stmt");let i=(t._comments||[]).map((e=>e.value)),s=r(t);return i.length&&(s=n.mkGroup(i.map((e=>n.mkStmt(n.H.mkComment(e)))).concat(s))),s.id=et(t),s}function rt(e){return!e||(e.type==n.NT.Prefix&&""==e.op?e.children.every(rt):e.type==n.NT.NewLine)}function it(e){const t=qe(e.name),r=V(w(e));return n.mkStmt(n.mkGroup([n.mkText("let "),t,n.mkText(": "+r+";")]))}function st(e,n){if(!n)return;const r=n.vars&&n.vars[e];return r&&r.modifier!=t.VarModifier.NonLocal?n:st(e,n.parent)}function ot(e){const t=[];let n;for(const r of Object.keys(e.vars))n=e.vars[r],at(n,e)&&t.push(it(null==n?void 0:n.symbol));return t}function at(e,t){return!!(4===e.symbol.kind&&!e.symbol.isParam&&void 0===e.modifier&&(e.lastRefPos>e.forVariableEndPos||e.firstRefPos<e.firstAssignPos||e.firstAssignDepth>t.blockDepth)&&!(function(e){return"Module"===e.kind&&"main"===e.name}(t)&&0===e.firstAssignDepth))}function lt(t){if(e.U.assert("Module"==t.kind),t.tsBody)return;var r;s={currClass:void 0,currFun:void 0,currModule:r=t,blockDepth:0},a=r.tsFilename.replace(/\.ts$/,".py"),t.vars||(t.vars={});let i=ot(t).concat(t.body.map(nt));return i.every(rt)?void 0:"main"==t.name?i:[n.mkText("namespace "+t.name+" "),n.mkBlock(i)]}function ut(e){m=e,l=[],y=0,o=void 0}function ct(e){const t=z(ke(e));return t&&"@array"===t.primType}function pt(e){switch(e.kind){case"Num":case"Str":return!0;case"NameConstant":return null!==e.value}return!1}function ft(e,t=e.symInfo){var n;const r=_(t.pyQName+".__constructor");if(!r&&(null===(n=t.extendsTypes)||void 0===n?void 0:n.length)){const n=ye(t.extendsTypes[0])||K(t.extendsTypes[0]);if(n)return ft(e,n)}const i={kind:"FunctionDef",name:"__init__",startPos:e.startPos,endPos:e.endPos,parent:e,body:[],args:{kind:"Arguments",startPos:0,endPos:0,args:[{startPos:0,endPos:0,kind:"Arg",arg:"self"}],kw_defaults:[],kwonlyargs:[],defaults:[]},decorator_list:[],vars:{},symInfo:se(3,e.symInfo.qName+".__constructor")};return i.symInfo.parameters=[],i.symInfo.pyRetType=L({classType:e.symInfo}),r&&(i.args.args.push(...r.parameters.map((e=>({startPos:0,endPos:0,kind:"Arg",arg:e.name})))),i.symInfo.parameters.push(...r.parameters.map((e=>{if(e.pyType)return e;return Object.assign(Object.assign({},e),{pyType:P(e.type)})})))),i}function mt(e,t,r){const i=`___${t}_is_set`,s=`___${t}`;return n.mkStmt(n.mkStmt(n.mkText(`private ${i}: boolean`)),n.mkStmt(n.mkText(`private ${s}: ${r}`)),n.mkStmt(n.mkText(`get ${t}(): ${r}`),n.mkBlock([n.mkText(`return this.${i} ? this.${s} : ${e}.${t}`)])),n.mkStmt(n.mkText(`set ${t}(value: ${r})`),n.mkBlock([n.mkStmt(n.mkText(`this.${i} = true`)),n.mkStmt(n.mkText(`this.${s} = value`))])))}t.py2ts=function(s){let o=[];const m={};l=[],e.U.assert(!!s.sourceFiles,"missing sourceFiles! Cannot convert py to ts");let d=s.sourceFiles.filter((t=>e.U.endsWith(t,".py")));if(0==d.length)return{outfiles:m,diagnostics:l,success:0===l.length,sourceMap:[]};let k=(e,t)=>e.substr(0,e.length-t.length),x=e.U.toDictionary(d,(e=>k(e,".py"))),T=s.sourceFiles.filter((t=>e.U.endsWith(t,".ts"))).filter((e=>k(e,".ts")in x));e.U.assert(!!s.apisInfo,"missing apisInfo! Cannot convert py to ts"),a=d[0],function(t,n){i={},r={};let s=e.U.toDictionary(n,(e=>e));for(let n of e.U.values(t.byQName)){if(s.hasOwnProperty(n.fileName))continue;let t=n;t.extendsTypes&&(t.extendsTypes=t.extendsTypes.filter((e=>e!=t.qName))),t.pyQName&&t.qName||H(null,9526,e.U.lf("Symbol '{0}' is missing qName for '{1}'",t.name,t.pyQName?"ts":"py")),r[t.pyQName]=t,r[t.qName]=t}C=P("Buffer")}(s.apisInfo,T),u=s,c=void 0,s.generatedFiles||(s.generatedFiles=[]);for(const t of d){let n=t,r=t.replace(/\.py$/,"").replace(/.*\//,""),i=s.fileSystem[t];try{a=t;let s=e.py.lex(i),u=e.py.parse(i,n,s);e.U.pushRange(l,u.diagnostics),o.push({kind:"Module",body:u.stmts,blockDepth:0,name:r,source:i,tsFilename:n.replace(/\.py$/,".ts")})}catch(e){console.log("Parse error",e)}}const g=l;for(let e=0;e<5;++e){ut(e);for(let e of o)try{lt(e)}catch(e){console.log("Conv pass error",e)}if(0==y)break}ut(1e3),p=void 0,c=s.syntaxInfo||{position:0,type:"symbol"};let h=[];for(let e of o)try{let t=lt(e);if(!t)continue;let r=n.flattenNode(t);function v(e){let t=e.id.split(":");if(2!=t.length)return;let n=t.map((e=>parseInt(e)));return{py:{startPos:n[0],endPos:n[1]},ts:{startPos:e.startPos,endPos:e.endPos}}}s.sourceFiles.push(e.tsFilename),s.generatedFiles.push(e.tsFilename),s.fileSystem[e.tsFilename]=r.output,m[e.tsFilename]=r.output,h=r.sourceMap.map(v).filter((e=>!!e))}catch(e){console.log("Conv error",e)}l=g.concat(l);let S={};const b=e.U.values(r).concat(e.U.values(i));let N=[];const E=e=>{if((e=>{switch(e.kind){case 6:case 7:case 4:case 3:case 5:return!0;case 2:case 1:return!e.isInstance;default:return!1}})(e)&&N.indexOf(e)<0){let t=A(e);S[t.qName||t.name]=t}};for(let t=f;t;t=t.parent)t&&t.vars&&e.U.values(t.vars).map((e=>e.symbol)).forEach(E);if(b.forEach(E),c&&p){if(p=p,c.beginPos=p.startPos,c.endPos=p.endPos,c.symbols||(c.symbols=[]),N=c.symbols.slice(),"memberCompletion"==c.type&&"Attribute"==p.kind){const e=ke(p.value);if(e.moduleType)for(let t of b)t.isInstance||t.namespace!=e.moduleType.qName||c.symbols.push(t);else if(e.classType||e.primType){const t=e.classType||fe(e.primType).reduce(((e,t)=>e||t),null);if(t){t.extendsTypes&&t.qName||H(null,9567,lf("missing extendsTypes or qName"));let e=t.extendsTypes.concat(t.qName);for(let t of b)t.isInstance&&e.indexOf(t.namespace)>=0&&c.symbols.push(t)}}}else if("identifierCompletion"==c.type)c.symbols=e.U.values(S);else{let e=p.symbolInfo;e&&c.symbols.push(e)}c.symbols=c.symbols.map(A)}let U=function(){for(let e of l)t.patchPosition(e,s.fileSystem[e.fileName]);return l}();return{outfiles:m,success:0===U.length,diagnostics:U,syntaxInfo:c,globalNames:S,sourceMap:h}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n;!function(e){e[e.Id=0]="Id",e[e.Op=1]="Op",e[e.Keyword=2]="Keyword",e[e.Number=3]="Number",e[e.String=4]="String",e[e.NewLine=5]="NewLine",e[e.Comment=6]="Comment",e[e.Indent=7]="Indent",e[e.Dedent=8]="Dedent",e[e.EOF=9]="EOF",e[e.Error=10]="Error"}(n=t.TokenType||(t.TokenType={})),t.keywords={False:!0,None:!0,True:!0,and:!0,as:!0,assert:!0,async:!0,await:!0,break:!0,class:!0,continue:!0,def:!0,del:!0,elif:!0,else:!0,except:!0,finally:!0,for:!0,from:!0,global:!0,if:!0,import:!0,in:!0,is:!0,lambda:!0,nonlocal:!0,not:!0,or:!0,pass:!0,raise:!0,return:!0,try:!0,while:!0,with:!0,yield:!0};let r,i,s=[];const o={"%":"Mod","&":"BitAnd","*":"Mult","**":"Pow","+":"Add","-":"Sub","/":"Div","//":"FloorDiv","<<":"LShift",">>":"RShift","@":"MatMult","^":"BitXor","|":"BitOr"},a={"!":"Bang","!=":"NotEq","(":"LParen",")":"RParen",",":"Comma","->":"Arrow",".":"Dot",":":"Colon",";":"Semicolon","<":"Lt","<=":"LtE","=":"Assign","==":"Eq",">":"Gt",">=":"GtE","[":"LSquare","]":"RSquare","{":"LBracket","}":"RBracket","~":"Invert"},l={b:/^[_0-1]$/,B:/^[_0-1]$/,o:/^[_0-7]$/,O:/^[_0-7]$/,x:/^[_0-9a-fA-F]$/,X:/^[_0-9a-fA-F]$/},u={b:2,B:2,o:8,O:8,x:16,X:16};let c,p,f=0,m=0;function d(e,t){let n=0,r=0;for(let i=0;i<e;++i)10==t.charCodeAt(i)&&(n++,r=i);return{line:n,column:e-r-1}}function y(e){switch(e.type){case n.Id:return`id(${e.value})`;case n.Op:return"'"+i[e.value]+"'";case n.Keyword:return e.value;case n.Number:return`num(${e.value})`;case n.String:return e.stringPrefix+JSON.stringify(e.value);case n.NewLine:return"<nl>";case n.Comment:return`/* ${e.value} */`;case n.Indent:return"indent"+e.value;case n.Dedent:return"dedent";case n.Error:return`[ERR: ${e.value}]`;case n.EOF:return"End of file";default:return"???"}}t.position=d,t.patchPosition=function(e,t){if(!e.start&&!e.length)return e.start=0,e.length=0,e.line=0,void(e.column=0);let n=d(e.start,t);e.line=n.line,e.column=n.column,e.length>0&&(n=d(e.start+e.length-1,t),e.endLine=n.line,e.endColumn=n.column+2)},t.tokenToString=y,t.friendlyTokenToString=function(e,t){let n=e.endPos-e.startPos,r="";return r=0==n?y(e):n>20?"`"+t.slice(e.startPos,e.startPos+20)+"`...":"`"+t.slice(e.startPos,e.endPos)+"`",r=r.replace(/\r/g,"").replace(/\n/g,"\\n").replace(/\t/g,"\\t"),r},t.tokensToString=function(e){let t="",r=0;for(let i of e){let e=y(i);r+e.length>70&&(r=0,t+="\n"),0!=r&&(t+=" "),t+=e,r+=e.length,i.type!=n.NewLine&&i.type!=n.Comment||(r=0,t+="\n")}return t},t.lex=function(d){for(0==s.length&&function(){const n={'"':S,"'":S,"#":C,"\\":E,".":I};r=e.U.clone(a);for(let e of Object.keys(o))r[e]=o[e],r[e+"="]=o[e]+"Assign";i={};for(let e of Object.keys(r))i[r[e]]=e;for(let e=0;e<128;++e)if(t.rx.isIdentifierStart(e))s[e]=x;else{let i=String.fromCharCode(e);if(n.hasOwnProperty(i))s[e]=n[i];else if(r.hasOwnProperty(i)){let t=!1,n=r[i];for(let e of Object.keys(r))e!=i&&e.startsWith(i)&&(t=!0);s[e]=t?()=>g(n):()=>T(n)}else t.rx.isSpace(e)?s[e]=()=>{}:13==e?s[e]=()=>{10==p.charCodeAt(f)&&f++,b()}:t.rx.isNewline(e)?s[e]=b:A(e)?s[e]=U:s[e]=P}}(),p=d,c=[],f=0,m=0,N();f<p.length;){m=f;const e=p.charCodeAt(f++);e<128?s[e]():t.rx.isIdentifierStart(e)?x():t.rx.isSpace(e)||(t.rx.isNewline(e)?b():P())}return m=f,b(),y(n.EOF,""),c;function y(e,t,n){let r={type:e,value:t,startPos:m,endPos:f,auxValue:n};return c.push(r),r}function k(e){y(n.Error,e)}function x(){for(;t.rx.isIdentifierChar(p.charCodeAt(f));)f++;let e=p.slice(m,f),r=p.charCodeAt(f);t.keywords.hasOwnProperty(e)?y(n.Keyword,e):34==r||39==r?v(e):y(n.Id,e)}function T(e){y(n.Op,e)}function g(e){let t=p.slice(m,f+1);if(2==t.length&&r.hasOwnProperty(t)){let n=p.slice(m,f+2);3==n.length&&r.hasOwnProperty(n)?(f+=2,e=r[n]):(f++,e=r[t])}T(e)}function h(e){switch(e){case 97:return 7;case 98:return 8;case 102:return 12;case 110:return 10;case 114:return 13;case 116:return 9;case 118:return 11;default:return 0}}function v(r){const i=p.charCodeAt(f++);let s=!1;p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i&&(f+=2,s=!0);let o=(r=r.toLowerCase()).indexOf("r")>=0,a="",l="";for(;;){const n=p.charCodeAt(f++);if(n==i){if(!s)break;if(p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i){f+=2;break}l+="\\"+String.fromCharCode(i),a+=String.fromCharCode(i)}else if(92==n){let n=p.charCodeAt(f++);if(13==n&&10==p.charCodeAt(f)&&(n=10,f++),34==n||39==n||92==n)o&&(l+="\\",a+="\\"),l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(n);else if(!o&&h(n))l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(h(n));else if(t.rx.isNewline(n))o&&(a+="\\"+String.fromCharCode(n),l+="\\\\",l+=10==n?"\\n":"\\u"+("0000"+n.toString(16)).slice(-4));else if(o||48!=n)if(o||117!=n&&120!=n)l+="\\\\"+String.fromCharCode(n),a+="\\"+String.fromCharCode(n);else{let t=117==n?4:2,r=p.slice(f,f+t);f+=t;let i=parseInt(r,16);isNaN(i)&&k(e.U.lf("invalid unicode or hex escape")),l+="\\"+String.fromCharCode(n)+r,a+=String.fromCharCode(i)}else l+="\\\\x00",a+="\0"}else{if(isNaN(n)){k(e.U.lf("end of file in a string"));break}if(t.rx.isNewline(n)&&!s){k(e.U.lf("new line in a string"));break}a+=String.fromCharCode(n),l+=String.fromCharCode(n)}}let u=y(n.String,a);u.quoted=l,u.stringPrefix=r}function S(){f--,v("")}function b(){y(n.NewLine,""),N()}function N(){let e=0;for(;;){const t=p.charCodeAt(f);if(9!=t){if(32!=t)break;e++,f++}else e=e+8&-8,f++}y(n.Indent,""+e)}function E(){let n=p.charCodeAt(f);t.rx.isNewline(n)?(f++,13==n&&10==p.charCodeAt(f)&&f++):k(e.U.lf("unexpected character after line continuation character"))}function C(){for(y(n.NewLine,"");f<p.length&&!t.rx.isNewline(p.charCodeAt(f));)f++;y(n.Comment,p.slice(m+1,f)),13==p.charCodeAt(f)&&10==p.charCodeAt(f+1)&&f++,f++,N()}function U(){let t=p[m],r="";if("0"==t){let i=p[f];const s=l[i];if(s){for(f++;;){const e=p[f];if(!s.test(e))break;r+=e,f++}if(r){let s=parseInt(r,u[i]);isNaN(s)&&k(e.U.lf("invalid number")),y(n.Number,t+i+r,s)}else k(e.U.lf("expecting numbers to follow 0b, 0o, 0x"));return}}let i=!1,s=!1,o=!1;for(f=m;;){const e=p.charCodeAt(f);if(!o||43!=e&&45!=e)if(o=!1,95==e||A(e));else if(s||i||46!=e){if(s||69!=e&&101!=e)break;s=!0,o=!0}else i=!0;else;r+=String.fromCharCode(e),f++}!i&&!s&&"0"==t&&r.length>1&&!/^0+/.test(r)&&k(e.U.lf("unexpected leading zero"));let a=parseFloat(r);isNaN(a)&&k(e.U.lf("invalid number")),y(n.Number,r,a)}function I(){A(p.charCodeAt(f))?U():y(n.Op,"Dot")}function A(e){return 48<=e&&e<=57}function P(){k(e.U.lf("invalid token"))}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n,r,i,s,o,a,l,u,c;function p(){return r[o]}function f(){for(;r[o];o++){let i=r[o];if(i.type!=t.TokenType.Comment){if(n>=0&&i.type==t.TokenType.Op)switch(i.value){case"LParen":case"LSquare":case"LBracket":n++;break;case"RParen":case"RSquare":case"RBracket":n--}if(i.type!=t.TokenType.Error){if(n>0){if(i.type==t.TokenType.NewLine||i.type==t.TokenType.Indent)continue}else if(i.type==t.TokenType.Indent){if(r[o+1].type==t.TokenType.NewLine){o++;continue}let n=parseInt(i.value),s=l[l.length-1];if(n==s)continue;if(n>s)return void l.push(n);{i.type=t.TokenType.Dedent;let s=0;for(;l.length;){let t=l[l.length-1];if(!(t>n)){for(t!=n&&d(9552,e.U.lf("inconsitent indentation"));s>1;)r.splice(o,0,i),s--;return}l.pop(),s++}}}return}d(9551,i.value)}else a.push(i)}}function m(){u=p(),u.type!=t.TokenType.EOF&&(o++,f())}function d(n,r){r||(r=e.U.lf("invalid syntax")),n||(n=9550);const o=p(),a={code:n,category:pxtc.DiagnosticCategory.Error,messageText:e.U.lf("{0} near {1}",r,t.friendlyTokenToString(o,i)),fileName:s,start:o.startPos,length:o.endPos?o.endPos-o.startPos:0,line:0,column:0};t.patchPosition(a,i),c.push(a),9572!=n&&c.length>100&&e.U.userError(e.U.lf("too many parse errors"))}function y(n,r){const i=p();(i.type==n&&i.value==r||(d(9553,e.U.lf("expecting {0}",t.tokenToString(function(e,t){return{type:e,value:t,startPos:0,endPos:0}}(n,r)))),i.type!=t.TokenType.NewLine))&&m()}function k(){y(t.TokenType.NewLine,"")}function x(e){y(t.TokenType.Keyword,e)}function T(e){y(t.TokenType.Op,e)}function g(){let e=p();return e.type==t.TokenType.Keyword?e.value:""}function h(){let e=p();return e.type==t.TokenType.Op?e.value:""}const v={if:function e(){let t=N("If");m(),t.test=W(),t.body=b(),"elif"==g()?t.orelse=[e()]:t.orelse=C();return E(t)},while:function(){let e=N("While");return x("while"),e.test=W(),e.body=b(),e.orelse=C(),E(e)},for:function(){let e=N("For");return x("for"),e.target=D(),q(e.target),x("in"),e.iter=R(),e.body=b(),e.orelse=C(),E(e)},try:function(){let e=N("Try");x("try"),e.body=b(),e.handlers=[];let t=!1;for(;"except"==g();){let n=N("ExceptHandler");e.handlers.push(n),m(),"Colon"!=h()?(t&&d(),n.type=W(),"as"==g()?(m(),n.name=ge()):n.name=void 0):(t=!0,n.type=void 0,n.name=void 0),n.body=b()}e.orelse=C(),0==e.handlers.length&&e.orelse.length&&d();"finally"==g()?(m(),e.finalbody=b()):e.finalbody=[];return E(e)},with:function(){let t=N("With");return x("with"),t.items=ke(e.U.lf("with item"),U),t.body=b(),E(t)},def:function(){let e=N("FunctionDef");x("def"),e.name=ge(),T("LParen"),e.args=Q(!0),T("RParen"),e.returns=void 0,"Arrow"==h()&&(m(),e.returns=W());return e.body=b(),E(e)},class:function(){let e=N("ClassDef");if(x("class"),e.name=ge(),"LParen"==h()){let t=he();e.bases=t.args,e.keywords=t.keywords}else e.bases=[],e.keywords=[];return e.body=b(),E(e)}},S={del:function(){let t=N("Delete");return x("del"),t.targets=ye(e.U.lf("expression"),oe),E(t)},pass:function(){let e=N("Pass");return x("pass"),E(e)},break:function(){let e=N("Break");return m(),E(e)},continue:function(){let e=N("Continue");return m(),E(e)},return:function(){let e=N("Return");m(),A()?e.value=void 0:e.value=R();return E(e)},raise:function(){let e=N("Raise");x("raise"),e.exc=void 0,e.cause=void 0,A()||(e.exc=W(),"from"==g()&&(m(),e.cause=W()));return E(e)},global:P,nonlocal:function(){let e=P();return e.kind="Nonlocal",e},import:function(){let t=N("Import");return m(),t.names=ke(e.U.lf("import name"),_),E(t)},from:function(){let n=N("ImportFrom");m(),n.level=L(),p().type==t.TokenType.Id?n.module=w():n.module=void 0;n.level||n.module||d();if(x("import"),"Mult"==h()){m();let e=N("Alias");e.name="*",n.names=[e]}else"LParen"==h()?(m(),n.names=ye(e.U.lf("import name"),K),T("RParen")):n.names=ye(e.U.lf("import name"),K);return E(n)},assert:function(){let e=N("Assert");m(),e.test=W(),"Comma"==h()?(m(),e.msg=W()):e.msg=void 0;return E(e)},yield:function(){p();if(m(),"from"==g()){let e=N("YieldFrom");return e.value=W(),I(E(e))}let e=N("Yield");A()||(e.value=R());return I(E(e))}};function b(){return T("Colon"),function(){if(p().type==t.TokenType.NewLine){let n;if(m(),p().type!=t.TokenType.Indent)d(9554,e.U.lf("expected an indented block")),n=B();else{const r=parseInt(p().value);for(m(),n=B();;){if(p().type==t.TokenType.Dedent){const e=isNaN(r)||parseInt(p().value)<r;if(m(),e)break}if(e.U.pushRange(n,B()),p().type==t.TokenType.EOF)break}}return n}return G()}()}function N(e,t){let n=t||p();return{startPos:n.startPos,endPos:n.endPos,kind:e}}function E(e){return e.endPos=u.endPos,e}function C(){return"else"==g()?(m(),b()):[]}function U(){let e=N("WithItem");return e.context_expr=W(),e.optional_vars=void 0,"as"==g()&&(m(),e.optional_vars=oe()),E(e)}function I(e){let t=N("ExprStmt");return t.startPos=e.startPos,t.endPos=e.endPos,t.value=e,t}function A(){let e=p();return e.type==t.TokenType.NewLine||e.type==t.TokenType.Op&&"Semicolon"==e.value}function P(){let e=N("Global");for(m(),e.names=[];e.names.push(ge()),"Comma"==h();)m();return E(e)}function w(){let e="";for(;;){if(e+=ge(),"Dot"!=h())return e;e+=".",m()}}function _(){let e=N("Alias");return e.name=w(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,E(e)}function K(){let e=N("Alias");return e.name=ge(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,E(e)}function L(){let e=0;for(;;)if("Dot"==h())e+=1,m();else{if("Ellipsis"!=h())return e;e+=3,m()}}function F(e,t){let n=N("Tuple",e);return n.elts=t,E(n)}function $(t){let n=p(),r=ye(e.U.lf("expression"),t),i=r[0];return 1!=r.length?F(n,r):i}function O(){return $(le)}function R(){return $(W)}function D(){return $(oe)}function q(e){if("Tuple"==e.kind){e.elts.forEach(q)}else e.ctx="Store"}function M(){let n=e.U.lookup(S,g());return n?n():function(){let n=p(),r=O(),i=h();if("Assign"==i){let e=N("Assign");for(e.targets=[r];;){if(m(),r=O(),i=h(),"Assign"!=i){e.value=r;break}e.targets.push(r)}return e.targets.forEach(q),E(e)}if("Colon"==i){let e=N("AnnAssign");return e.target=r,m(),e.annotation=W(),"Assign"==h()&&(m(),e.value=W()),e.simple=n.type==t.TokenType.Id&&"Name"==r.kind?1:0,q(e.target),E(e)}if(e.U.endsWith(i,"Assign")){let e=N("AugAssign");return e.target=r,e.op=i.replace("Assign",""),m(),e.value=R(),q(e.target),E(e)}if("Semicolon"==i||p().type==t.TokenType.NewLine){let e=N("ExprStmt");return e.value=r,E(e)}return d(9555,e.U.lf("unexpected token")),m(),null}()}function G(){let e=[M()];for(;"Semicolon"==h()&&(m(),p().type!=t.TokenType.NewLine);)e.push(M());return k(),e.filter((e=>!!e))}function B(){const r=c.length,i=p().type==t.TokenType.Indent;i&&(m(),d(9573,e.U.lf("unexpected indent")));let s=[];for(;"MatMult"==h();)m(),s.push(Se()),k();let o=g(),l=e.U.lookup(v,g()),f=[],y=a;if(a=[],"class"==o||"def"==o){let e=l();e.decorator_list=s,f=[e]}else s.length?d(9556,e.U.lf("decorators not allowed here")):f=l?[l()]:G();y.length&&f.length&&(f[0]._comments=y);if(c.length>r){for(n=-1;u.type!=t.TokenType.Dedent&&u.type!=t.TokenType.NewLine&&(m(),p().type!=t.TokenType.EOF););i&&p().type===t.TokenType.Dedent&&m(),n=0}return f}function Q(n){let r=N("Arguments");for(r.args=[],r.defaults=[],r.kwonlyargs=[],r.kw_defaults=[],r.vararg=void 0;;){let n=h();if("Colon"==n||"RParen"==n)break;if("Mult"==n)r.vararg&&d(9557,e.U.lf("multiple *arg")),m(),p().type==t.TokenType.Id?r.vararg=i():r.vararg=void 0;else if("Pow"==n)r.kwarg&&d(9558,e.U.lf("multiple **arg")),m(),r.kwarg=i();else{r.kwarg&&d(9559,e.U.lf("arguments after **"));let t,n=i();"Assign"==h()&&(m(),t=W()),void 0!==r.vararg&&t?(r.kwonlyargs.push(n),r.kw_defaults.push(t)):(r.args.push(n),t?r.defaults.push(t):r.defaults.length&&d(9560,e.U.lf("non-default argument follows default argument")))}if("Comma"!=h())break;m()}return r.kwarg||(r.kwarg=void 0),r.vararg||(r.vararg=void 0),E(r);function i(){let e=N("Arg");return e.arg=ge(),e.annotation=void 0,n&&"Colon"==h()&&(m(),e.annotation=W()),e}}function z(e){let t=N("Lambda");return m(),t.args=Q(!1),T("Colon"),t.body=e?ue():W(),E(t)}function W(){if("lambda"==g())return z();let e=p(),t=H();if("if"==g()){let n=N("IfExp",e);return n.body=t,x("if"),n.test=H(),x("else"),n.orelse=W(),E(n)}return t}function j(e,t){let n=p(),r=t();if(g()==e){let i=N("BoolOp",n);for(i.op="or"==e?"Or":"And",i.values=[r];g()==e;)x(e),i.values.push(t());return E(i)}return r}function V(){return j("and",J)}function H(){return j("or",V)}function J(){if("not"==g()){let e=N("UnaryOp");return m(),e.op="Not",e.operand=J(),E(e)}return function(){let e=p(),t=oe();if(!Y())return t;let n=N("Compare",e);n.left=t,n.comparators=[],n.ops=[];for(;;){let e=Y();if(!e)break;m(),"NotIn"==e?x("in"):"Is"==e&&"not"==g()&&(m(),e="IsNot"),n.ops.push(e),n.comparators.push(oe())}return E(n)}()}const X={Lt:"Lt",Gt:"Gt",Eq:"Eq",GtE:"GtE",LtE:"LtE",NotEq:"NotEq",in:"In",not:"NotIn",is:"Is"};function Y(){return X[h()]||X[g()]||null}const Z={Invert:"Invert",Sub:"USub",Add:"UAdd"};function ee(e,t){let n=p(),r=e();for(;;){let i=h();if(!(i&&t.indexOf(","+i+",")>=0))return r;{let t=N("BinOp",n);t.left=r,t.op=i,m(),t.right=e(),r=t}}}function te(){return ee(be,",Mult,MatMult,Div,Mod,FloorDiv,")}function ne(){return ee(te,",Add,Sub,")}function re(){return ee(ne,",LShift,RShift,")}function ie(){return ee(re,",BitAnd,")}function se(){return ee(ie,",BitXor,")}function oe(){return ee(se,",BitOr,")}function ae(){let t,n=p();if("Colon"!=h()&&(t=W()),"Colon"==h()){let e=N("Slice",n);e.lower=t,m();let r=h();return e.upper="Colon"!=r&&"Comma"!=r&&"RSquare"!=r?W():void 0,e.step=void 0,"Colon"==h()&&(m(),r=h(),"Comma"!=r&&"RSquare"!=r&&(e.step=W())),E(e)}{t||d(9570,e.U.lf("unable to parse lower subscript"));let n=N("Index");return n.value=t,E(n)}}function le(){if("Mult"==h()){let e=N("Starred");return e.value=oe(),E(e)}return W()}function ue(){return"lambda"==g()?z(!0):H()}function ce(){let e=[];for(;;){let t=N("Comprehension");for(t.is_async=0,e.push(t),x("for"),t.target=D(),q(t.target),x("in"),t.iter=H(),t.ifs=[];"if"==g();)m(),t.ifs.push(ue());if("for"!=g())return e}}function pe(){let t=p();if("Mult"==h()){let e=N("Starred");return m(),e.value=W(),E(e)}if("Pow"==h()){let e=N("Keyword");return m(),e.arg=void 0,e.value=W(),E(e)}let n=W();if("Assign"==h()){"Name"!=n.kind&&d(9561,e.U.lf("invalid keyword argument; did you mean ==?")),m();let r=N("Keyword",t);return r.arg=n.id||"???",r.value=W(),E(r)}if("for"==g()){let e=N("GeneratorExp",t);return e.elt=n,e.generators=ce(),E(e)}return n}function fe(){let e=N("NameConstant");return e.value=null,m(),E(e)}function me(){let n=p();if(n.type==t.TokenType.Id){let e=N("Name");return m(),e.id=n.value,e.ctx="Load",E(e)}if(n.type==t.TokenType.Number){let e=N("Num");return m(),e.ns=n.value,e.n=n.auxValue,E(e)}if(n.type==t.TokenType.String){m();let r=n.value;for(;p().type==t.TokenType.String;)r+=p().value,m();if("b"==n.stringPrefix){let t=N("Bytes",n);return t.s=e.U.toArray(e.U.stringToUint8Array(r)),E(t)}{let e=N("Str",n);return e.s=r,E(e)}}if(n.type==t.TokenType.Keyword){if("None"==n.value||"True"==n.value||"False"==n.value){let e=N("NameConstant");return m(),e.value="True"==n.value||"False"!=n.value&&null,E(e)}return d(9564,e.U.lf("expecting atom")),fe()}if(n.type==t.TokenType.Op){let t=n.value;return"LParen"==t?Te("RParen","Tuple","GeneratorExp"):"LSquare"==t?Te("RSquare","List","ListComp"):"LBracket"==t?function(){let t=p();if(m(),"Pow"==h())return m(),r(void 0,oe());if("RBracket"==h()){let e=N("Dict",t);return m(),e.keys=[],e.values=[],E(e)}{let n=le();return"Starred"!=n.kind&&"Colon"==h()?(m(),r(n,W())):function(n){if("for"==g()){"Starred"==n.kind&&d(9562,e.U.lf("iterable unpacking cannot be used in comprehension"));let r=N("SetComp",t);return r.elt=n,r.generators=ce(),E(r)}let r=N("Set",t);if(r.elts=[n],"Comma"==h()){let t=xe("RBracket",e.U.lf("set element"),le);r.elts=[n].concat(t)}else T("RBracket");return E(r)}(n)}function n(){if("Pow"==h())return m(),[null,oe()];{let e=W();return T("Colon"),[e,W()]}}function r(r,i){if("for"==g()){r||d(9563,e.U.lf("dict unpacking cannot be used in dict comprehension"));let n=N("DictComp",t);return n.key=r,n.value=i,n.generators=ce(),E(n)}let s=N("Dict",t);if(s.keys=[r],s.values=[i],"Comma"==h()){let t=xe("RBracket",e.U.lf("dict element"),n);for(let e of t)e.length>=2&&e[0]&&e[1]&&(s.keys.push(e[0]),s.values.push(e[1]))}else T("RBracket");return E(s)}}():(d(9565,e.U.lf("unexpected operator")),fe())}return d(9566,e.U.lf("unexpected token")),fe()}function de(){let n=h();return"RParen"==n||"RSquare"==n||"RBracket"==n||"Colon"==n||"Semicolon"==n||(!!e.U.endsWith(n,"Assign")||("in"==g()||p().type==t.TokenType.NewLine))}function ye(t,n){let r=[];if(de())return r;for(;;){r.push(n());let i="Comma"==h();if(i&&m(),de())return r;if(!i)return d(9567,e.U.lf("expecting {0}",t)),r}}function ke(e,t){let n=[];for(;n.push(t()),"Comma"==h();)m();return n}function xe(t,n,r){m();let i=[];if(h()!=t)for(;;){i.push(r());let s="Comma"==h();if(s&&m(),h()==t)break;if(!s){d(9568,e.U.lf("expecting {0}",n));break}}return T(t),i}function Te(t,n,r){let i=p();if(m(),h()==t){m();let e=N(n,i);return e.elts=[],E(e)}let s=le();if("for"==g()){let e=N(r,i);return e.elt=s,e.generators=ce(),T(t),E(e)}if("Comma"==h()){let r=N(n,i);return m(),r.elts=ye(e.U.lf("expression"),le),r.elts.unshift(s),T(t),E(r)}if(T(t),"List"==n){let e=N(n,i);return e.elts=[s],E(e)}return s}function ge(){let n=p();return n.type!=t.TokenType.Id&&d(9569,e.U.lf("expecting identifier")),m(),n.value}function he(){let t=xe("RParen",e.U.lf("argument"),pe),n=[],r=[];for(let i of t)"Keyword"==i.kind?r.push(i):(r.length&&d(9570,e.U.lf("positional argument follows keyword argument")),n.push(i));return{args:n,keywords:r}}function ve(t,n){let r=h();if("LParen"==r){let e=N("Call",t);e.func=n;let r=he();return e.args=r.args,e.keywords=r.keywords,E(e)}if("LSquare"==r){let r=p(),i=N("Subscript",t);i.value=n;let s=xe("RSquare",e.U.lf("subscript"),ae);if(0==s.length)d(9571,e.U.lf("need non-empty index list"));else if(1==s.length)i.slice=s[0];else if(s.every((e=>"Index"==e.kind))){let e=s[0];e.value=F(r,s.map((e=>e.value))),i.slice=e}else{let e=N("ExtSlice",r);e.dims=s,i.slice=E(e)}return E(i)}if("Dot"==r){let e=N("Attribute",t);return e.value=n,m(),e.attr=ge(),E(e)}return n}function Se(){let e=p(),t=me();for(;;){let n=ve(e,t);if(n===t)return t;t=n}}function be(){if(Z[h()]){let e=N("UnaryOp");return e.op=Z[h()],m(),e.operand=be(),E(e)}return function(){p();let e=Se();if("Pow"==h()){let t=N("BinOp");return m(),t.left=e,t.op="Pow",t.right=be(),E(t)}return e}()}const Ne={kind:1,id:2,n:3,s:4,func:5,key:6,elt:7,elts:8,keys:9,left:10,ops:11,comparators:12,names:13,items:14,test:15,targets:16,dims:17,context_expr:18,name:19,bases:20,type:21,inClass:22,target:23,annotation:24,simple:25,op:26,operand:27,right:28,values:29,iter:30,ifs:31,is_async:32,value:33,slice:34,attr:35,generators:36,args:37,keywords:38,body:39,handlers:40,orelse:41,finalbody:42,decorator_list:43,kwonlyargs:44,kw_defaults:45,defaults:46,arg:47},Ee={lineno:1,col_offset:1,startPos:1,endPos:1,kind:1},Ce={body:1,orelse:1,finalbody:1},Ue={_comments:1,ctx:1,ns:1};t.dump=function(t,n=!1){const r=(t,i)=>{if(Array.isArray(i)){let e="";for(let n=0;n<i.length;++n)n>0&&(e+=", "),e+=r(t,i[n]);return"["+e+"]"}if(!i||!i.kind)return JSON.stringify(i);let s="",o=Object.keys(i);o.sort(((t,n)=>(Ne[t]||100)-(Ne[n]||100)||e.U.strcmp(t,n)));for(let a of o)if(!(e.U.lookup(Ee,a)||n&&e.U.lookup(Ue,a)))if(s&&(s+=", "),s+=a+"=",Array.isArray(i[a])&&i[a].length&&e.U.lookup(Ce,a)){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+r(e,t)+"\n";s+=t+"]"}else if("_comments"==a){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+JSON.stringify(t.value)+"\n";s+=t+"]"}else s+=r(t,i[a]);return i.kind+"("+s+")"};let i="";for(let e of t)i+=r("",e)+"\n";return i},t.parse=function(m,y,k){i=m,s=y,r=k,n=0,o=0,a=[],l=[0],c=[];let x=[];try{if(u=r[0],f(),p().type!=t.TokenType.EOF)for(x=B();p().type!=t.TokenType.EOF;)e.U.pushRange(x,B())}catch(t){d(9572,e.U.lf("exception: {0}",t.message))}return{stmts:x,diagnostics:c}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){function n(e,t,n){const r={fileName:e.getSourceFile().fileName,start:e.getStart(),length:e.getEnd()-e.getStart(),line:void 0,column:void 0,code:t,category:pxtc.DiagnosticCategory.Error,messageText:n},i=new Error(n);throw i.pyDiagnostic=r,i}t.decompileToPython=function(r,i){let s={blocksInfo:void 0,outfiles:{},diagnostics:[],success:!0,times:{}};try{let o=function(r,i){const s=r.getTypeChecker(),o=(new ts.pxtc.LSHost(r),r.getSourceFile(i)),a=pxtc.decompiler.buildCommentMap(o),l=e.U.toSet(d(),(e=>e)),[u,c]=ts.pxtc.decompiler.buildRenameMap(r,o,{takenNames:l,declarations:"all"}),p=pxtc.getApiInfo(r),f=e.U.mapMap(p.byQName,((e,t)=>t.fileName==i?void 0:t)),m=t.computeScopeVariableLookup(o);return b(o);function d(){return["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EnvironmentError","Exception","False","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","NameError","None","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","True","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError","_","__build_class__","__debug__","__doc__","__import__","__loader__","__name__","__package__","__spec__","abs","all","any","ascii","bin","bool","bytearray","bytes","callable","chr","classmethod","compile","complex","copyright","credits","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","license","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","quit","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip",...Object.keys(e.py.keywords)]}function y(e){if(!e.getSourceFile())return null;let t=e.getText();return f[t]||null}function k(e){if(!e.getSourceFile())return null;let t=e.getText();const n=s.getSymbolAtLocation(e);n&&(t=s.getFullyQualifiedName(n));let r=f[t];if(r&&r.attributes.alias)return r.attributes.alias;if(r&&r.pyQName){if(r.isInstance){if(ts.isPropertyAccessExpression(e))return null;const t=new RegExp(`(?:^|.)${r.namespace}.(.+)`).exec(r.pyQName);if(t)return t[1]}return r.pyQName}return t in pxtc.ts2PyFunNameMap?pxtc.ts2PyFunNameMap[t].n:null}function x(t){let r=k(t);if(r)return r;if(!ts.isIdentifier(t))return e.tickEvent("depython.todo.advancedname"),n(t,3001,"Unsupported advanced name format: "+t.getText());let i=t.text;if(t.getSourceFile()){const e=u.getRenameForPosition(t.getStart());e&&(i=e.name)}return i}function T(e){return"string"!=typeof e&&(e=x(e)),c[e]?pxtc.decompiler.getNewName(e,c):(c[e]=!0,e)}function g(e,t){return 0!=(e.flags&t)}function h(e,t){return g(s.getTypeAtLocation(e),t)}function v(e){return h(e,ts.TypeFlags.StringLike)}function S(e){return h(e,ts.TypeFlags.NumberLike)}function b(e){let t=e.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[]).reduce(((e,t)=>t||e[e.length-1]?[...e,t]:e),[]);return a.filter((e=>!e.owner)).forEach((e=>t.push(...E(e)))),t.join("\n")}function N(e){switch(e.kind){case ts.SyntaxKind.SyntaxList:return e._children.map(N).reduce(((e,t)=>e.concat(t)),[]);case ts.SyntaxKind.EndOfFileToken:case ts.SyntaxKind.OpenBraceToken:case ts.SyntaxKind.CloseBraceToken:return[];default:return C(e)}}function E(e){let t=[];if(e.kind===pxtc.decompiler.CommentKind.SingleLine)t.push("# "+e.text);else{t.push('"""');for(const n of e.lines)t.push(n);t.push('"""')}return t}function C(e){const t=U(e);return pxtc.decompiler.getCommentsForStatement(e,a).map(E).reduce(((e,t)=>e.concat(t)),[]).concat(t)}function U(t){return ts.isVariableStatement(t)?D(t):ts.isClassDeclaration(t)?q(t):ts.isEnumDeclaration(t)?M(t):ts.isExpressionStatement(t)?Q(t):ts.isFunctionDeclaration(t)?W(t):ts.isIfStatement(t)?O(t):ts.isForStatement(t)?$(t):ts.isForOfStatement(t)?F(t):ts.isWhileStatement(t)?w(t):ts.isReturnStatement(t)?P(t):ts.isBlock(t)?z(t):ts.isTypeAliasDeclaration(t)?A(t):ts.isEmptyStatement(t)?[]:ts.isModuleDeclaration(t)?I(t):ts.isBreakStatement(t)?["break"]:ts.isContinueStatement(t)?["continue"]:(e.tickEvent("depython.todo.statement",{statement:t.kind}),n(t,3002,`Not supported in MakeCode Python: ${ts.SyntaxKind[t.kind]} (${t.kind})`))}function I(e){let n=x(e.name),r=e.body&&e.body.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[]).map((e=>t.indent1(e)));return["@namespace",`class ${n}:`].concat(r||[])}function A(e){let t=pxtc.emitPyTypeFromTypeNode(e.type);return[`${x(e.name)} = ${t}`]}function P(e){if(!e.expression)return["return"];let[t,n]=ve(e.expression),r=X("return ",t);return n.concat(r)}function w(e){let[t,n]=ve(e.expression),r=L(e.statement),i=X("while ",t,":");return n.concat(i).concat(r)}function _(e){let t=Math.floor(Number(e));return t!==1/0&&String(t)===e}function K(e){if(!e.initializer)return null;if(e.initializer.kind!==ts.SyntaxKind.VariableDeclarationList)return null;let t=e.initializer;if(1!==t.declarations.length)return null;let n=t.declarations[0],r=x(n.name);if(!n.initializer||!ge(n.initializer)||!S(n.initializer))return null;let[i,s]=ve(n.initializer);if(s.length)return null;let o=J(i);if(!e.condition)return null;if(!ts.isBinaryExpression(e.condition))return null;if(!ts.isIdentifier(e.condition.left))return null;if(x(e.condition.left)!=r)return null;if(!S(e.condition.right))return null;let[a,l]=ve(e.condition.right);if(l.length)return null;let u=J(a),c=u;if(e.condition.operatorToken.kind===ts.SyntaxKind.LessThanEqualsToken&&_(u))c=""+(Number(u)+1);else if(e.condition.operatorToken.kind!==ts.SyntaxKind.LessThanToken)return null;return e.incrementor&&(ts.isPostfixUnaryExpression(e.incrementor)||ts.isPrefixUnaryExpression(e.incrementor))?e.incrementor.operator!==ts.SyntaxKind.PlusPlusToken?null:o<c?{name:r,fromIncl:o,toExcl:c}:null:null}function L(e){let n=U(e).map(t.indent1);return n.length<1&&(n=[t.indent1("pass")]),n}function F(t){if(!ts.isVariableDeclarationList(t.initializer))return e.tickEvent("depython.todo.forof.complexexp"),n(t,3003,"Unsupported expression in for..of initializer: "+t.initializer.getText());let r=t.initializer.declarations.map((e=>x(e.name)));if(1!==r.length)return e.tickEvent("depython.todo.forof.multidecl"),n(t,3004,"Unsupported multiple declerations in for..of: "+t.initializer.getText());let i=r[0],[s,o]=ve(t.expression),a=o;a=a.concat(X(`for ${i} in `,s,":"));let l=L(t.statement);return a=a.concat(l),a}function $(e){let n=K(e);if(n){let{name:t,fromIncl:r,toExcl:i}=n,s="0"===r?`for ${t} in range(${i}):`:`for ${t} in range(${r}, ${i}):`,o=L(e.statement);return[s].concat(o)}let r,i=[];if(e.initializer)if(ts.isVariableDeclarationList(e.initializer)){let t=e.initializer.declarations.map(V).reduce(((e,t)=>e.concat(t)),[]);i=i.concat(t)}else{let[t,n]=ve(e.initializer);i=i.concat(n).concat(t)}if(e.condition){let[t,n]=ve(e.condition);i=i.concat(n),r=J(t)}else r="True";let s=`while ${r}:`;i.push(s);let o=U(e.statement).map(t.indent1);if(0!==o.length||e.incrementor||(o=[t.indent1("pass")]),i=i.concat(o),e.incrementor){let n=B(e.incrementor);if(n)i=i.concat(n.map(t.indent1));else{let[n,r]=ve(e.incrementor);i=i.concat(r).concat(n.map(t.indent1))}}return i}function O(e){let{supportStmts:t,ifStmt:n,rest:r}=R(e);return t.concat([n]).concat(r)}function R(e){let t=[],[n,r]=ve(e.expression);t=t.concat(r);let i=`if ${J(n)}:`,s=[],o=L(e.thenStatement);if(s=s.concat(o),e.elseStatement)if(ts.isIfStatement(e.elseStatement)){let{supportStmts:n,ifStmt:r,rest:i}=R(e.elseStatement),o=`el${r}`;t=t.concat(n),s.push(o),s=s.concat(i)}else{s.push("else:");let t=L(e.elseStatement);s=s.concat(t)}return{supportStmts:t,ifStmt:i,rest:s}}function D(e){return e.declarationList.declarations.map(V).reduce(((e,t)=>e.concat(t)),[])}function q(t){return e.tickEvent("depython.todo.classes"),n(t,3016,"Unsupported: classes are not supported in Python right now.")}function M(r){let i=[];i.push(`class ${x(r.name)}(Enum):`);let s=r.members.every((e=>!!e.initializer)),o=!r.members.every((e=>!!e.initializer));if(!s&&!o)return e.tickEvent("depython.todo.enummix"),n(r,3005,"Unsupported enum decleration: has mixture of explicit and implicit initialization");if(s)return e.tickEvent("depython.todo.enuminit"),n(r,3006,"Unsupported: explicit enum initialization");let a=0;for(let e of r.members)i.push(t.indent1(`${x(e.name)} = ${a++}`));return i}function G(e){return!(!ts.isPrefixUnaryExpression(e)&&!ts.isPostfixUnaryExpression(e))&&(e.operator===ts.SyntaxKind.MinusMinusToken||e.operator===ts.SyntaxKind.PlusPlusToken)}function B(e){if(!G(e))return null;let[t,n]=ve(e.operand),r=e.operator===ts.SyntaxKind.MinusMinusToken?" -= 1":" += 1",i=n;return i.push(`${J(t)}${r}`),i}function Q(e){let t=B(e.expression);if(t)return t;const[n,r]=ve(e.expression);return r.length?["",...r,...n,""]:[...r,...n]}function z(e){return e.getChildren().map(N).reduce(((e,t)=>e.concat(t)),[])}function W(r,i,s,o){let a=[];r.kind!==ts.SyntaxKind.MethodDeclaration&&r.kind!==ts.SyntaxKind.Constructor||a.push("self");let l=(s?oe(r.parameters,s):r.parameters).map((e=>j(e,!o)));a=a.concat(l);let u,c=a.join(", "),p=[];if(i)u=i;else{if(!r.name)return e.tickEvent("depython.todo.anonymousfunc"),n(r,3012,"Unsupported: anonymous function decleration");u=x(r.name)}if(p.push(`def ${u}(${c}):`),!r.body)return e.tickEvent("depython.todo.funcwithoutbody"),n(r,3013,"Unsupported: function decleration without body");let f=[];if(ts.isBlock(r.body))f=z(r.body);else{let[e,t]=ve(r.body);f=f.concat(t),f.concat(e)}if(f.length){let e=m.getExplicitGlobals(r).map((e=>x(e)));e&&e.length&&f.unshift(`global ${e.join(", ")}`);let n=m.getExplicitNonlocals(r).map((e=>x(e)));n&&n.length&&f.unshift(`nonlocal ${n.join(", ")}`),p=p.concat(f.map(t.indent1))}else p.push(t.indent1("pass"));return p}function j(t,r=!0){let i=t.altName||x(t.name),s="";if(t.type&&r){let e=pxtc.emitPyTypeFromTypeNode(t.type);e&&-1===e.indexOf("(TODO")&&(s=`: ${e}`)}let o="";if(t.initializer){let[r,i]=ve(t.initializer);if(i.length)return e.tickEvent("depython.todo.complexinit"),n(t,3007,`Unsupported: complex expression in parameter default value not supported. Expression: ${t.initializer.getText()}`);o=` = ${J(r)}`}return`${i}${s}${o}`}function V(e){let t=[],n=x(e.name);if(e.initializer){let r,[i,s]=ve(e.initializer);if(t=t.concat(s),e.type){r=`${n}: ${pxtc.emitPyTypeFromTypeNode(e.type)} = ${J(i)}`}else r=`${n} = ${J(i)}`;return t.push(r),t}return t}function H(e,t){return[[e],t||[]]}function J(e,t="\n"){return e.join(t)}function X(e="",t,n=""){return t[0]=e+t[0],t[t.length-1]=t[t.length-1]+n,t}function Y(t,r){switch(t){case ts.SyntaxKind.BarBarToken:return"or";case ts.SyntaxKind.AmpersandAmpersandToken:return"and";case ts.SyntaxKind.ExclamationToken:return"not";case ts.SyntaxKind.LessThanToken:return"<";case ts.SyntaxKind.LessThanEqualsToken:return"<=";case ts.SyntaxKind.GreaterThanToken:return">";case ts.SyntaxKind.GreaterThanEqualsToken:return">=";case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsToken:return"==";case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:return"!=";case ts.SyntaxKind.EqualsToken:return"=";case ts.SyntaxKind.PlusToken:return"+";case ts.SyntaxKind.MinusToken:return"-";case ts.SyntaxKind.AsteriskToken:return"*";case ts.SyntaxKind.PlusEqualsToken:return"+=";case ts.SyntaxKind.MinusEqualsToken:return"-=";case ts.SyntaxKind.PercentToken:return"%";case ts.SyntaxKind.SlashToken:return"/";case ts.SyntaxKind.PlusPlusToken:case ts.SyntaxKind.MinusMinusToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,"Unsupported ++ and -- in an expression (not a statement or for loop)");case ts.SyntaxKind.AmpersandToken:return"&";case ts.SyntaxKind.CaretToken:return"^";case ts.SyntaxKind.LessThanLessThanToken:return"<<";case ts.SyntaxKind.GreaterThanGreaterThanToken:return">>";case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3009,"Unsupported operator: >>>");case ts.SyntaxKind.AsteriskAsteriskToken:return"**";case ts.SyntaxKind.AsteriskAsteriskEqualsToken:return"**=";case ts.SyntaxKind.PercentEqualsToken:return"%=";case ts.SyntaxKind.AsteriskEqualsToken:return"*=";case ts.SyntaxKind.SlashEqualsToken:return"/=";default:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,`Unsupported Python operator (code: ${t})`)}}function Z(e){let t=v(e.left),n=v(e.right),r=e.operatorToken.kind===ts.SyntaxKind.PlusToken&&(t||n),[i,s]=ve(e.left);r&&!t&&(i=X("str(",i,")"));let o=Y(e.operatorToken.kind,e),[a,l]=ve(e.right);r&&!n&&(a=X("str(",a,")"));let u=s.concat(l);return[X(J(i)+" "+o+" ",a),u]}function ee(e){let t=k(e);if(t)return H(t);let[n,r]=ve(e.expression),i=x(e.name);return H("length"===i?`len(${J(n)})`:`${J(n)}.${i}`,r)}function te(e){if(ts.isPropertyAccessExpression(e)){let t=x(e.name),n=t.substr(t.lastIndexOf(".")+1);return ts.isIdentifier(e.expression)?[n]:te(e.expression).concat([n])}return ts.isIdentifier(e)?[x(e)]:[]}function ne(t,n,r,i){let o="";n&&(o=te(n).map(e.U.snakify).join("_"));let a=[];if(r&&r.length>1&&i&&i.length>1)for(let t=0;t<r.length&&t<i.length;t++){let n=i[t];if(g(s.getTypeAtLocation(n),ts.TypeFlags.EnumLike)){let t=te(n).map(e.U.snakify);a=a.concat(t)}}let l=a.join("_"),u="";o||l||!t||(u=x(t.name));let c=([o,l,u].filter((e=>e)).map(e.U.snakify).map((e=>e.toLowerCase())).join("_")||"my_callback").split("_");c.length>4&&(c=f(c));let p=e.U.toDictionary(["any","on","event"],(e=>e));for(;c.length>2;){let e=m(c,p);if(e.length==c.length)break;c=e}return c=["on",...c],c.join("_");function f(e){let t={},n=[];for(let r of e)r in t||(t[r]=!0,n.push(r));return n}function m(e,t){let n=[],r=!1;for(let i of e)!(i in t)||r?n.push(i):r=!0;return n}}function re(e){let n=e.join(", ");return n.length>60&&e.length>1?e.map(((n,r)=>{let i=","==n.charAt(n.length-1)?"":",";if(0==r){let e=n.split("\n");if(e.length>1){n=e.shift()+"\n"+t.indent1(e.join("\n"))}return n+i}return r==e.length-1?t.indent1(n):t.indent1(n+i)})):[n]}function ie(e,t,n,r,i){if((ts.isFunctionExpression(e)||ts.isArrowFunction(e))&&t&&t.type&&ts.isFunctionTypeNode(t.type)){let s;return ae(e,ne(t,n,r,i),s,!0)}return ve(e)}function se(t){let r=s.getTypeAtLocation(t.expression),i=s.typeToTypeNode(r),o=ts.createNodeArray([]);if(ts.isFunctionTypeNode(i)&&(o=i.parameters,t.arguments&&o.length<t.arguments.length))return e.tickEvent("depython.todo.argparammismatch",{kind:t.kind}),n(t,3010,"TODO: Unsupported call site where caller the arguments outnumber the callee parameters: "+t.getText());const a=y(t.expression);if(t.arguments&&a&&"TD_ID"==a.attributes.shim)return ve(t.arguments[0]);if(ts.isPropertyAccessExpression(t.expression)&&"toString"===t.expression.name.getText()){const[e,n]=ve(t.expression.expression);return[X("str(",e,")"),n]}let[l,u]=ve(t.expression),c=J(l),p=(t.arguments||ts.createNodeArray()).map(((e,n,r)=>ie(e,o[n],t.expression,o,r))),f=p.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),u);if(0===c.indexOf("_py.py_")){if(p.length<=0)return e.tickEvent("depython.todo._pynoargs"),n(t,3014,"Unsupported: call expression has no arguments for _py.py_ fn");c=c.substr(7).split("_").filter(((e,t)=>0!==t)).join("_");return[X(`${p.shift()[0]}.${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}return[X(`${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}function oe(e,t){let n=[],r={};for(let i=0;i<Math.max(e.length,t.length);i++){let s;if(e[i])s=e[i],r[x(s.name)]=!0;else{s=t[i];let e=x(s.name);r[e]&&(e=pxtc.decompiler.getNewName(e,r),s=Object.assign({altName:e},t[i]))}n.push(s)}return ts.createNodeArray(n,!1)}function ae(e,t,n,r){let i=e.name?x(e.name):T(t||"my_function");return H(i,W(e,i,n,r))}function le(e){switch(e){case ts.SyntaxKind.ExclamationToken:return" ";case ts.SyntaxKind.PlusToken:case ts.SyntaxKind.MinusToken:return"";default:return" "}}function ue(e){let t=Y(e.operator,e),[n,r]=ve(e.operand);return H(`${t}${le(e.operator)}${J(n)}`,r)}function ce(e){let t=Y(e.operator,e),[n,r]=ve(e.operand),i=le(e.operator);return H(`${J(n)}${i}${t}`,r)}function pe(e){let t=e.elements.map(ve),n=t.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),[]);return[X("[",re(t.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),"]"),n]}function fe(t){if(!t.argumentExpression)return e.tickEvent("depython.todo.accesswithoutexp"),n(t,3015,"Unsupported: element access expression without an argument expression");let[r,i]=ve(t.expression),[s,o]=ve(t.argumentExpression),a=i.concat(o);return H(`${J(r)}[${J(s)}]`,a)}function me(e){let[t,n]=ve(e.expression);return H(`(${J(t)})`,n)}function de(e){if(ts.isNoSubstitutionTemplateLiteral(e))return H(`"""\n${t.indent1(e.text.trim())}\n"""`);let[n,r]=ve(e.tag),[i,s]=ve(e.template),o=r.concat(s);return H(`${J(n)}(${J(i)})`,o)}function ye(e){if("undefined"==e.text)return H("None");return H(x(e))}function ke(e,t){let n=e=>ke(e,t);return ts.isBinaryExpression(e)?n(e.left)&&n(e.right):ts.isPropertyAccessExpression(e)?n(e.expression):ts.isPrefixUnaryExpression(e)||ts.isPostfixUnaryExpression(e)?e.operator!==ts.SyntaxKind.PlusPlusToken&&e.operator!==ts.SyntaxKind.MinusMinusToken&&n(e.operand):ts.isParenthesizedExpression(e)?n(e.expression):ts.isArrayLiteralExpression(e)?e.elements.map(n).reduce(((e,t)=>e&&t),!0):ts.isElementAccessExpression(e)?n(e.expression)&&(!e.argumentExpression||n(e.argumentExpression)):t(e)}function xe(e){return e.parent?e.parent.kind===ts.SyntaxKind.ParenthesizedExpression?xe(e.parent):e.parent:void 0}function Te(e){if("any"===e.type.getText().trim()&&(ts.isNumericLiteral(e.expression)||ts.isStringLiteral(e.expression)||e.expression.kind===ts.SyntaxKind.TrueKeyword||e.expression.kind===ts.SyntaxKind.FalseKeyword)){const t=xe(e);if((null==t?void 0:t.kind)===ts.SyntaxKind.BinaryExpression)switch(t.operatorToken.kind){case ts.SyntaxKind.EqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.LessThanToken:case ts.SyntaxKind.LessThanEqualsToken:case ts.SyntaxKind.GreaterThanToken:case ts.SyntaxKind.GreaterThanEqualsToken:return!0}}return!1}function ge(e){return ke(e,(e=>{switch(e.kind){case ts.SyntaxKind.PropertyAccessExpression:case ts.SyntaxKind.BinaryExpression:case ts.SyntaxKind.ParenthesizedExpression:case ts.SyntaxKind.ArrayLiteralExpression:case ts.SyntaxKind.ElementAccessExpression:case ts.SyntaxKind.TrueKeyword:case ts.SyntaxKind.FalseKeyword:case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:case ts.SyntaxKind.NumericLiteral:case ts.SyntaxKind.StringLiteral:case ts.SyntaxKind.NoSubstitutionTemplateLiteral:return!0;case ts.SyntaxKind.CallExpression:case ts.SyntaxKind.NewExpression:case ts.SyntaxKind.FunctionExpression:case ts.SyntaxKind.ArrowFunction:case ts.SyntaxKind.Identifier:case ts.SyntaxKind.ThisKeyword:return!1;case ts.SyntaxKind.PrefixUnaryExpression:case ts.SyntaxKind.PostfixUnaryExpression:let t=e;return t.operator!==ts.SyntaxKind.PlusPlusToken&&t.operator!==ts.SyntaxKind.MinusMinusToken}return!1}))}function he(e){let[t,n]=ve(e.condition),[r,i]=ve(e.whenTrue),[s,o]=ve(e.whenFalse),a=n.concat(i).concat(o);return H(`${r} if ${J(t)} else ${J(s)}`,a)}function ve(t){if(ts.isBinaryExpression(t))return Z(t);if(ts.isPropertyAccessExpression(t))return ee(t);if(ts.isCallExpression(t))return se(t);if(ts.isNewExpression(t))return se(t);if(ts.isFunctionExpression(t)||ts.isArrowFunction(t))return ae(t);if(ts.isPrefixUnaryExpression(t))return ue(t);if(ts.isPostfixUnaryExpression(t))return ce(t);if(ts.isParenthesizedExpression(t))return me(t);if(ts.isArrayLiteralExpression(t))return pe(t);if(ts.isElementAccessExpression(t))return fe(t);if(ts.isNoSubstitutionTemplateLiteral(t)||ts.isTaggedTemplateExpression(t))return de(t);switch(t.kind){case ts.SyntaxKind.TrueKeyword:return H("True");case ts.SyntaxKind.FalseKeyword:return H("False");case ts.SyntaxKind.ThisKeyword:return H("self");case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:return H("None")}return ts.isIdentifier(t)?ye(t):ts.isNumericLiteral(t)||ts.isStringLiteral(t)?H(t.getText()):ts.isConditionalExpression(t)?he(t):ts.isAsExpression(t)&&Te(t)?ve(t.expression):(e.tickEvent("depython.todo.expression",{kind:t.kind}),n(t,3017,"Unsupported expression kind: "+t.kind))}}(r,i),a=i.replace(/(\.py)?\.\w*$/i,"")+".py";s.outfiles[a]=o}catch(t){t.pyDiagnostic?s.diagnostics=[t.pyDiagnostic]:e.reportException(t),s.success=!1}return s};function r(e){return n=>(n||"").split("\n").map((n=>`${t.INDENT.repeat(e)}${n}`)).join("\n")}t.INDENT=" ",t.indent=r,t.indent1=r(1)}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){!function(e){const t=/[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;e.isIdentifierStart=function(e){return ts.pxtc.isIdentifierStart(e,ts.pxtc.ScriptTarget.ES5)},e.isIdentifierChar=function(e){return ts.pxtc.isIdentifierPart(e,ts.pxtc.ScriptTarget.ES5)},e.isSpace=function(e){return!!(32===e||9===e||11===e||12===e||160===e||e>=5760&&t.test(String.fromCharCode(e)))},e.isNewline=function(e){return 10===e||13===e||(8232===e||8233===e)}}(e.rx||(e.rx={}))}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){function t(e){const t={refs:[],children:[],owner:void 0};return function e(r){var i;if(!r)return t;if(ts.isPropertyAccessOrQualifiedName(r))return t;if(ts.isIdentifier(r))return{refs:[{kind:"read",node:r,varName:r.text}],children:[],owner:void 0};if(ts.isVariableDeclaration(r)||ts.isParameter(r)){const t=e(r.initializer);return{refs:[...t.refs,{kind:"decl",node:r,varName:r.name.getText()}],children:t.children,owner:void 0}}if(ts.isPrefixUnaryExpression(r)||ts.isPostfixUnaryExpression(r)){const t=e(r.operand),i=r.operand.getText();return n(t,{refs:[{kind:"assign",node:r,varName:i}],children:[],owner:void 0})}if(function(e){const t=[ts.SyntaxKind.EqualsToken,ts.SyntaxKind.PlusEqualsToken,ts.SyntaxKind.MinusEqualsToken,ts.SyntaxKind.AsteriskEqualsToken,ts.SyntaxKind.AsteriskAsteriskEqualsToken,ts.SyntaxKind.SlashEqualsToken,ts.SyntaxKind.PercentEqualsToken,ts.SyntaxKind.LessThanLessThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,ts.SyntaxKind.AmpersandEqualsToken,ts.SyntaxKind.BarEqualsToken,ts.SyntaxKind.CaretEqualsToken];return ts.isBinaryExpression(e)&&t.some((t=>e.operatorToken.kind===t))}(r)){const t=e(r.right);let i;r.operatorToken.kind!==ts.SyntaxKind.EqualsToken&&(i=e(r.left));const s=r.left.getText();return n(i,n(t,{refs:[{kind:"assign",node:r,varName:s}],children:[],owner:void 0}))}if(ts.isFunctionExpression(r)||ts.isArrowFunction(r)||ts.isFunctionDeclaration(r)||ts.isMethodDeclaration(r)){const s=null===(i=r.name)||void 0===i?void 0:i.getText();let o;s&&(o={kind:"decl",node:r,varName:s});const a=r.parameters.map((t=>e(t))).reduce(n,t),l=e(r.body),u=n(a,l);return u.owner=r,{refs:o?[o]:[],children:[u],owner:void 0}}return r.getChildren().map(e).reduce(n,t)}(e);function n(e,n){return e&&n?{refs:[...e.refs,...n.refs],children:[...e.children,...n.children],owner:e.owner||n.owner}:e||n||t}}function n(e,t,r=[]){const i=[],s=[],o=[],a=[],l={};for(const n of e.refs)"read"===n.kind||"assign"===n.kind?l[n.varName]?o.push(n):p(n)?s.push(n):t&&t[n.varName]?i.push(n):a.push(n):l[n.varName]=n;const u=t||l,c=t?[...r,l]:[];return{globalUsage:i,nonlocalUsage:s,localUsage:o,environmentUsage:a,children:e.children.map((e=>n(e,u,c))),owner:e.owner};function p(e){return r.map((t=>t[e.varName])).reduce(((e,t)=>t||e),void 0)}}function r(e){return`${e.kind}:${e.varName}`}e.computeScopeVariableLookup=function(e){const r=n(t(e)),i=new Map,s=new Map;return function e(t){const n=a((r=t,[...r.globalUsage,...r.environmentUsage].filter((e=>"assign"===e.kind)).map((e=>e))));var r;i.set(t.owner,n);const o=a(function(e){return e.nonlocalUsage.filter((e=>"assign"===e.kind)).map((e=>e))}(t));s.set(t.owner,o),t.children.forEach(e)}(r),{getExplicitGlobals:e=>i.get(e)||[],getExplicitNonlocals:e=>s.get(e)||[]};function o(e){let t=e.node.operand||e.node.left;return ts.isIdentifier(t)?t:void 0}function a(e){return e.map(o).filter((e=>!!e)).map((e=>e)).reduce(((e,t)=>e.find((e=>e.text===t.text))?e:[...e,t]),[])}},e.toStringVariableScopes=function(i){const s=t(i),o=n(s);return function t(n){return[n.refs.map(r).join(", "),...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])]}(s).join("\n")+"\n\n\n"+function(t){return function t(n){const i=n.globalUsage.map(r).join(", "),s=n.nonlocalUsage.map(r).join(", "),o=n.localUsage.map(r).join(", "),a=n.environmentUsage.map(r).join(", ");return[i?"global "+i:"",s?"nonlocal "+s:"",o?"local "+o:"",a?"env "+a:"",...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])].filter((e=>!!e))}(t).join("\n")}(o)}}(e.py||(e.py={}))}(pxt||(pxt={}));
|