@harmoniclabs/pebble 0.1.0-dev5 → 0.1.0-dev6

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.
Files changed (307) hide show
  1. package/dist/IR/IRHash.d.ts +3 -3
  2. package/dist/IR/IRHash.js +47 -52
  3. package/dist/IR/IRNodes/IRApp.d.ts +12 -8
  4. package/dist/IR/IRNodes/IRApp.js +34 -20
  5. package/dist/IR/IRNodes/IRCase.d.ts +11 -7
  6. package/dist/IR/IRNodes/IRCase.js +33 -32
  7. package/dist/IR/IRNodes/IRConst.d.ts +7 -5
  8. package/dist/IR/IRNodes/IRConst.js +23 -13
  9. package/dist/IR/IRNodes/IRConstr.d.ts +11 -7
  10. package/dist/IR/IRNodes/IRConstr.js +34 -37
  11. package/dist/IR/IRNodes/IRDelayed.d.ts +12 -9
  12. package/dist/IR/IRNodes/IRDelayed.js +22 -18
  13. package/dist/IR/IRNodes/IRError.d.ts +9 -6
  14. package/dist/IR/IRNodes/IRError.js +12 -5
  15. package/dist/IR/IRNodes/IRForced.d.ts +9 -6
  16. package/dist/IR/IRNodes/IRForced.js +22 -18
  17. package/dist/IR/IRNodes/IRFunc.d.ts +14 -10
  18. package/dist/IR/IRNodes/IRFunc.js +35 -38
  19. package/dist/IR/IRNodes/IRHoisted.d.ts +16 -9
  20. package/dist/IR/IRNodes/IRHoisted.js +36 -18
  21. package/dist/IR/IRNodes/IRLetted.d.ts +14 -34
  22. package/dist/IR/IRNodes/IRLetted.js +65 -297
  23. package/dist/IR/IRNodes/IRNative/IRNativeTag.d.ts +0 -2
  24. package/dist/IR/IRNodes/IRNative/IRNativeTag.js +0 -4
  25. package/dist/IR/IRNodes/IRNative/index.d.ts +9 -8
  26. package/dist/IR/IRNodes/IRNative/index.js +55 -18
  27. package/dist/IR/IRNodes/IRNative/isForcedNative.d.ts +2 -0
  28. package/dist/IR/IRNodes/IRNative/isForcedNative.js +1 -1
  29. package/dist/IR/IRNodes/IRRecursive.d.ts +18 -10
  30. package/dist/IR/IRNodes/IRRecursive.js +36 -44
  31. package/dist/IR/IRNodes/IRSelfCall.d.ts +10 -24
  32. package/dist/IR/IRNodes/IRSelfCall.js +25 -87
  33. package/dist/IR/IRNodes/IRVar.d.ts +11 -19
  34. package/dist/IR/IRNodes/IRVar.js +26 -54
  35. package/dist/IR/IRNodes/utils/dependsByDbns.d.ts +1 -1
  36. package/dist/IR/IRNodes/utils/dependsByDbns.js +5 -11
  37. package/dist/IR/IRNodes/utils/hashVarSym.d.ts +1 -0
  38. package/dist/IR/IRNodes/utils/hashVarSym.js +37 -0
  39. package/dist/IR/IRNodes/utils/makeArrayLikeProxy.d.ts +2 -1
  40. package/dist/IR/IRTerm.d.ts +7 -0
  41. package/dist/IR/toUPLC/_internal/_modifyChildFromTo.js +3 -0
  42. package/dist/IR/toUPLC/_internal/findAll.js +2 -73
  43. package/dist/IR/toUPLC/_internal/getDebruijnInTerm.js +7 -34
  44. package/dist/IR/toUPLC/_internal/iterTree.js +3 -17
  45. package/dist/IR/toUPLC/common_hoisted.d.ts +2 -0
  46. package/dist/IR/toUPLC/common_hoisted.js +4 -0
  47. package/dist/IR/toUPLC/compileIRToUPLC.d.ts +1 -1
  48. package/dist/IR/toUPLC/compileIRToUPLC.js +91 -14
  49. package/dist/IR/toUPLC/ctx/ToUplcCtx.d.ts +16 -0
  50. package/dist/IR/toUPLC/ctx/ToUplcCtx.js +75 -0
  51. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.d.ts +8 -0
  52. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.js +95 -0
  53. package/dist/IR/toUPLC/subRoutines/handleHoistedAndReturnRoot/index.js +7 -54
  54. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.d.ts +6 -13
  55. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.js +67 -71
  56. package/dist/IR/toUPLC/subRoutines/handleLetted/index.js +44 -170
  57. package/dist/IR/toUPLC/subRoutines/handleRecursiveTerms.js +7 -3
  58. package/dist/IR/toUPLC/subRoutines/hoistForcedNatives.js +3 -2
  59. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.d.ts +22 -0
  60. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.js +59 -0
  61. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.d.ts +0 -0
  62. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.js +217 -0
  63. package/dist/IR/toUPLC/subRoutines/markRecursiveHoistsAsForced.js +12 -49
  64. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.d.ts +1 -1
  65. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.js +11 -14
  66. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/{index.d.ts → performUplcOptimizationsAndReturnRoot.d.ts} +0 -2
  67. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/performUplcOptimizationsAndReturnRoot.js +151 -0
  68. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.d.ts +11 -0
  69. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.js +46 -0
  70. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.d.ts +2 -0
  71. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.js +80 -0
  72. package/dist/IR/toUPLC/subRoutines/replaceHoistedWithLetted.js +18 -11
  73. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.d.ts +43 -0
  74. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.js +255 -478
  75. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.d.ts +2 -0
  76. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.js +85 -0
  77. package/dist/IR/toUPLC/subRoutines/sanifyTree.js +1 -0
  78. package/dist/IR/toUPLC/utils/getApplicationTerms.d.ts +6 -0
  79. package/dist/IR/toUPLC/utils/getApplicationTerms.js +37 -0
  80. package/dist/IR/tree_utils/_ir_lazyChooseList.d.ts +2 -2
  81. package/dist/IR/tree_utils/_ir_lazyChooseList.js +4 -2
  82. package/dist/IR/tree_utils/_ir_lazyIfThenElse.d.ts +1 -1
  83. package/dist/IR/tree_utils/_ir_lazyIfThenElse.js +4 -2
  84. package/dist/IR/tree_utils/_ir_let.d.ts +2 -1
  85. package/dist/IR/tree_utils/_ir_let.js +6 -2
  86. package/dist/IR/utils/isClosedIRTerm.d.ts +1 -0
  87. package/dist/IR/utils/isClosedIRTerm.js +39 -25
  88. package/dist/IR/utils/positiveIntAsBytes.d.ts +1 -0
  89. package/dist/IR/utils/positiveIntAsBytes.js +4 -0
  90. package/dist/IR/utils/showIR.d.ts +10 -21
  91. package/dist/IR/utils/showIR.js +66 -64
  92. package/dist/ast/nodes/common/Identifier.d.ts +1 -0
  93. package/dist/ast/nodes/common/Identifier.js +3 -0
  94. package/dist/ast/nodes/expr/CaseExpr.d.ts +5 -5
  95. package/dist/ast/nodes/expr/ElemAccessExpr.d.ts +2 -2
  96. package/dist/ast/nodes/expr/ParentesizedExpr.d.ts +1 -1
  97. package/dist/ast/nodes/expr/PebbleExpr.d.ts +2 -1
  98. package/dist/ast/nodes/expr/PropAccessExpr.d.ts +3 -3
  99. package/dist/ast/nodes/expr/TernaryExpr.d.ts +3 -3
  100. package/dist/ast/nodes/expr/TypeConversionExpr.d.ts +2 -1
  101. package/dist/ast/nodes/expr/TypeConversionExpr.js +2 -0
  102. package/dist/ast/nodes/expr/binary/BinaryExpr.d.ts +42 -42
  103. package/dist/ast/nodes/expr/functions/CallExpr.d.ts +1 -1
  104. package/dist/ast/nodes/expr/functions/FuncExpr.d.ts +2 -1
  105. package/dist/ast/nodes/expr/functions/FuncExpr.js +6 -0
  106. package/dist/ast/nodes/expr/litteral/LitContextExpr.d.ts +6 -0
  107. package/dist/ast/nodes/expr/litteral/LitContextExpr.js +6 -0
  108. package/dist/ast/nodes/expr/litteral/LitFailExpr.d.ts +6 -0
  109. package/dist/ast/nodes/expr/litteral/LitFailExpr.js +6 -0
  110. package/dist/ast/nodes/expr/litteral/LitteralExpr.d.ts +3 -1
  111. package/dist/ast/nodes/expr/litteral/LitteralExpr.js +5 -1
  112. package/dist/ast/nodes/statements/AssertStmt.d.ts +2 -2
  113. package/dist/ast/nodes/statements/AssignmentStmt.d.ts +1 -1
  114. package/dist/ast/nodes/statements/BlockStmt.d.ts +1 -1
  115. package/dist/ast/nodes/statements/FailStmt.d.ts +1 -1
  116. package/dist/ast/nodes/statements/ForOfStmt.d.ts +4 -2
  117. package/dist/ast/nodes/statements/ForOfStmt.js +6 -0
  118. package/dist/ast/nodes/statements/ForStmt.d.ts +6 -4
  119. package/dist/ast/nodes/statements/ForStmt.js +6 -0
  120. package/dist/ast/nodes/statements/IfStmt.d.ts +8 -5
  121. package/dist/ast/nodes/statements/IfStmt.js +13 -0
  122. package/dist/ast/nodes/statements/MatchStmt.d.ts +13 -4
  123. package/dist/ast/nodes/statements/MatchStmt.js +22 -1
  124. package/dist/ast/nodes/statements/PebbleStmt.d.ts +2 -1
  125. package/dist/ast/nodes/statements/PebbleStmt.js +3 -1
  126. package/dist/ast/nodes/statements/ReturnStmt.d.ts +1 -1
  127. package/dist/ast/nodes/statements/WhileStmt.d.ts +4 -2
  128. package/dist/ast/nodes/statements/WhileStmt.js +6 -0
  129. package/dist/ast/nodes/statements/declarations/ContractDecl.d.ts +17 -0
  130. package/dist/ast/nodes/statements/declarations/ContractDecl.js +22 -0
  131. package/dist/ast/nodes/statements/declarations/VarDecl/ArrayLikeDeconstr.d.ts +1 -1
  132. package/dist/ast/nodes/statements/declarations/VarDecl/HasInit.d.ts +1 -1
  133. package/dist/ast/nodes/statements/declarations/VarDecl/NamedDeconstructVarDecl.d.ts +1 -1
  134. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.d.ts +2 -1
  135. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.js +6 -0
  136. package/dist/ast/nodes/statements/declarations/VarDecl/SingleDeconstructVarDecl.d.ts +1 -1
  137. package/dist/compiler/AstCompiler/AstCompiler.d.ts +6 -2
  138. package/dist/compiler/AstCompiler/AstCompiler.js +91 -24
  139. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.d.ts +10 -0
  140. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.js +777 -0
  141. package/dist/compiler/AstCompiler/internal/exprs/_compileBinaryExpr.js +1 -1
  142. package/dist/compiler/AstCompiler/internal/exprs/_compileExpr.js +1 -1
  143. package/dist/compiler/AstCompiler/internal/exprs/_compileLitteralExpr.js +8 -2
  144. package/dist/compiler/AstCompiler/internal/exprs/_compilePropAccessExpr.js +1 -1
  145. package/dist/compiler/AstCompiler/internal/exprs/_compileTypeConversionExpr.js +3 -1
  146. package/dist/compiler/AstCompiler/internal/exprs/_compileUnaryPrefixExpr.js +1 -1
  147. package/dist/compiler/AstCompiler/internal/statements/_compileAssignmentStmt.js +2 -2
  148. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.d.ts +2 -2
  149. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.js +48 -24
  150. package/dist/compiler/AstCompiler/internal/statements/_compileStatement.js +4 -1
  151. package/dist/compiler/AstCompiler/internal/statements/_compileVarStmt.js +2 -2
  152. package/dist/compiler/AstCompiler/internal/types/_compileDataEncodedConcreteType.js +1 -1
  153. package/dist/compiler/AstCompiler/internal/types/_compileSopEncodedConcreteType.js +4 -1
  154. package/dist/compiler/AstCompiler/scope/AstScope.js +4 -3
  155. package/dist/compiler/AstCompiler/utils/getPropAccessReturnType.js +6 -4
  156. package/dist/compiler/Compiler.js +3 -1
  157. package/dist/compiler/TirCompiler/compileTirProgram.js +3 -1
  158. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.d.ts +13 -3
  159. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.js +41 -37
  160. package/dist/compiler/TirCompiler/expressify/determineReassignedVariablesAndReturn.js +11 -2
  161. package/dist/compiler/TirCompiler/expressify/expressify.d.ts +2 -1
  162. package/dist/compiler/TirCompiler/expressify/expressify.js +82 -36
  163. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.d.ts +2 -1
  164. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.js +57 -8
  165. package/dist/compiler/TirCompiler/expressify/expressifyIfBranch.js +1 -1
  166. package/dist/compiler/TirCompiler/expressify/expressifyVarAssignmentStmt.js +1 -1
  167. package/dist/compiler/TirCompiler/expressify/expressifyVarDecl.js +1 -0
  168. package/dist/compiler/TirCompiler/expressify/expressifyVars.js +131 -9
  169. package/dist/compiler/TirCompiler/internal/_compileHoistedDeps.js +3 -1
  170. package/dist/compiler/io/IOutputStream.d.ts +1 -0
  171. package/dist/compiler/io/IOutputStream.js +18 -3
  172. package/dist/compiler/path/getAbsolutePath.js +4 -6
  173. package/dist/compiler/tir/expressions/ITirExpr.d.ts +2 -0
  174. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.d.ts +4 -2
  175. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.js +16 -2
  176. package/dist/compiler/tir/expressions/TirCallExpr.d.ts +3 -1
  177. package/dist/compiler/tir/expressions/TirCallExpr.js +16 -1
  178. package/dist/compiler/tir/expressions/TirCaseExpr.d.ts +6 -1
  179. package/dist/compiler/tir/expressions/TirCaseExpr.js +103 -60
  180. package/dist/compiler/tir/expressions/TirElemAccessExpr.d.ts +3 -1
  181. package/dist/compiler/tir/expressions/TirElemAccessExpr.js +9 -1
  182. package/dist/compiler/tir/expressions/TirFailExpr.d.ts +3 -1
  183. package/dist/compiler/tir/expressions/TirFailExpr.js +9 -1
  184. package/dist/compiler/tir/expressions/TirFromDataExpr.d.ts +3 -2
  185. package/dist/compiler/tir/expressions/TirFromDataExpr.js +85 -56
  186. package/dist/compiler/tir/expressions/TirFuncExpr.d.ts +4 -10
  187. package/dist/compiler/tir/expressions/TirFuncExpr.js +30 -13
  188. package/dist/compiler/tir/expressions/TirHoistedExpr.d.ts +3 -1
  189. package/dist/compiler/tir/expressions/TirHoistedExpr.js +8 -0
  190. package/dist/compiler/tir/expressions/TirInlineClosedIR.d.ts +4 -1
  191. package/dist/compiler/tir/expressions/TirInlineClosedIR.js +8 -0
  192. package/dist/compiler/tir/expressions/TirLettedExpr.d.ts +5 -2
  193. package/dist/compiler/tir/expressions/TirLettedExpr.js +19 -4
  194. package/dist/compiler/tir/expressions/TirNativeFunc.d.ts +8 -5
  195. package/dist/compiler/tir/expressions/TirNativeFunc.js +50 -22
  196. package/dist/compiler/tir/expressions/TirParentesizedExpr.d.ts +3 -1
  197. package/dist/compiler/tir/expressions/TirParentesizedExpr.js +6 -0
  198. package/dist/compiler/tir/expressions/TirPropAccessExpr.d.ts +3 -1
  199. package/dist/compiler/tir/expressions/TirPropAccessExpr.js +9 -0
  200. package/dist/compiler/tir/expressions/TirTernaryExpr.d.ts +3 -1
  201. package/dist/compiler/tir/expressions/TirTernaryExpr.js +16 -5
  202. package/dist/compiler/tir/expressions/TirToDataExpr.d.ts +3 -1
  203. package/dist/compiler/tir/expressions/TirToDataExpr.js +56 -25
  204. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.d.ts +3 -1
  205. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.js +21 -4
  206. package/dist/compiler/tir/expressions/TirTypeConversionExpr.d.ts +3 -1
  207. package/dist/compiler/tir/expressions/TirTypeConversionExpr.js +9 -1
  208. package/dist/compiler/tir/expressions/TirVariableAccessExpr.d.ts +7 -3
  209. package/dist/compiler/tir/expressions/TirVariableAccessExpr.js +17 -7
  210. package/dist/compiler/tir/expressions/ToIRTermCtx.d.ts +16 -20
  211. package/dist/compiler/tir/expressions/ToIRTermCtx.js +67 -50
  212. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.d.ts +40 -0
  213. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.js +174 -3
  214. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.d.ts +4 -2
  215. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.js +8 -2
  216. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.d.ts +17 -0
  217. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.js +21 -0
  218. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.d.ts +4 -1
  219. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.js +4 -0
  220. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.d.ts +4 -1
  221. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.js +5 -0
  222. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.d.ts +4 -1
  223. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.js +4 -0
  224. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.d.ts +3 -1
  225. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.js +5 -0
  226. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.d.ts +3 -1
  227. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.js +5 -0
  228. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.d.ts +4 -1
  229. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.js +4 -0
  230. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.d.ts +4 -1
  231. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.js +7 -3
  232. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.d.ts +4 -1
  233. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.js +4 -0
  234. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.d.ts +4 -1
  235. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.js +4 -0
  236. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.d.ts +4 -1
  237. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.js +4 -0
  238. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.d.ts +2 -1
  239. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.js +3 -1
  240. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.d.ts +4 -2
  241. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.js +8 -3
  242. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.d.ts +4 -2
  243. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.js +8 -2
  244. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.d.ts +3 -1
  245. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.js +6 -0
  246. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.d.ts +4 -2
  247. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.js +8 -2
  248. package/dist/compiler/tir/program/TypedProgram.d.ts +1 -0
  249. package/dist/compiler/tir/program/TypedProgram.js +9 -0
  250. package/dist/compiler/tir/program/stdScope/stdScope.js +126 -126
  251. package/dist/compiler/tir/statements/TirAssertStmt.d.ts +2 -0
  252. package/dist/compiler/tir/statements/TirAssertStmt.js +10 -0
  253. package/dist/compiler/tir/statements/TirAssignmentStmt.d.ts +2 -0
  254. package/dist/compiler/tir/statements/TirAssignmentStmt.js +8 -0
  255. package/dist/compiler/tir/statements/TirBlockStmt.d.ts +2 -0
  256. package/dist/compiler/tir/statements/TirBlockStmt.js +16 -0
  257. package/dist/compiler/tir/statements/TirBreakStmt.d.ts +2 -0
  258. package/dist/compiler/tir/statements/TirBreakStmt.js +8 -0
  259. package/dist/compiler/tir/statements/TirContinueStmt.d.ts +2 -0
  260. package/dist/compiler/tir/statements/TirContinueStmt.js +8 -0
  261. package/dist/compiler/tir/statements/TirFailStmt.d.ts +2 -0
  262. package/dist/compiler/tir/statements/TirFailStmt.js +8 -0
  263. package/dist/compiler/tir/statements/TirForOfStmt.d.ts +2 -0
  264. package/dist/compiler/tir/statements/TirForOfStmt.js +14 -0
  265. package/dist/compiler/tir/statements/TirForStmt.d.ts +2 -0
  266. package/dist/compiler/tir/statements/TirForStmt.js +21 -0
  267. package/dist/compiler/tir/statements/TirIfStmt.d.ts +3 -0
  268. package/dist/compiler/tir/statements/TirIfStmt.js +19 -0
  269. package/dist/compiler/tir/statements/TirMatchStmt.d.ts +2 -0
  270. package/dist/compiler/tir/statements/TirMatchStmt.js +30 -0
  271. package/dist/compiler/tir/statements/TirReturnStmt.d.ts +2 -0
  272. package/dist/compiler/tir/statements/TirReturnStmt.js +8 -0
  273. package/dist/compiler/tir/statements/TirStmt.d.ts +2 -0
  274. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.d.ts +2 -0
  275. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.js +30 -0
  276. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.d.ts +3 -1
  277. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.js +28 -0
  278. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.d.ts +3 -0
  279. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.js +13 -0
  280. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.d.ts +3 -1
  281. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.js +28 -0
  282. package/dist/compiler/tir/statements/TirWhileStmt.d.ts +2 -0
  283. package/dist/compiler/tir/statements/TirWhileStmt.js +14 -0
  284. package/dist/compiler/tir/types/utils/canAssignTo.js +1 -1
  285. package/dist/diagnostics/DiagnosticEmitter.js +1 -1
  286. package/dist/diagnostics/diagnosticMessages.generated.d.ts +10 -1
  287. package/dist/diagnostics/diagnosticMessages.generated.js +20 -2
  288. package/dist/parser/Parser.d.ts +8 -3
  289. package/dist/parser/Parser.js +162 -30
  290. package/dist/tokenizer/Token.d.ts +81 -72
  291. package/dist/tokenizer/Token.js +82 -72
  292. package/dist/tokenizer/utils/tokenFromKeyword.js +32 -10
  293. package/dist/tokenizer/utils/tokenIsAlsoIdentifier.js +10 -0
  294. package/dist/utils/BitUtils/index.js +1 -1
  295. package/dist/utils/UPLCFlatUtils/index.js +1 -1
  296. package/package.json +2 -1
  297. package/dist/IR/IRNodes/utils/isClosedAtDbn.d.ts +0 -2
  298. package/dist/IR/IRNodes/utils/isClosedAtDbn.js +0 -22
  299. package/dist/IR/toUPLC/_internal/_irToUplc.d.ts +0 -9
  300. package/dist/IR/toUPLC/_internal/_irToUplc.js +0 -156
  301. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.d.ts +0 -9
  302. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.js +0 -73
  303. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.d.ts +0 -1
  304. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.js +0 -12
  305. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/index.js +0 -227
  306. package/dist/IR/tree_utils/_ir_apps.d.ts +0 -3
  307. package/dist/IR/tree_utils/_ir_apps.js +0 -8
@@ -11,7 +11,9 @@ export declare class TirTernaryExpr implements ITirExpr {
11
11
  readonly type: TirType;
12
12
  readonly range: SourceRange;
13
13
  constructor(condition: TirExpr, ifTrue: TirExpr, ifFalse: TirExpr, type: TirType, range: SourceRange);
14
- clone(): TirTernaryExpr;
14
+ toString(): string;
15
+ pretty(indent: number): string;
16
+ clone(): TirExpr;
15
17
  deps(): string[];
16
18
  get isConstant(): boolean;
17
19
  toIR(ctx: ToIRTermCtx): IRTerm;
@@ -1,7 +1,4 @@
1
- import { IRDelayed } from "../../../IR/IRNodes/IRDelayed.js";
2
- import { IRForced } from "../../../IR/IRNodes/IRForced.js";
3
- import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
4
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
1
+ import { _ir_lazyIfThenElse } from "../../../IR/tree_utils/_ir_lazyIfThenElse.js";
5
2
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
6
3
  export class TirTernaryExpr {
7
4
  condition;
@@ -16,6 +13,20 @@ export class TirTernaryExpr {
16
13
  this.type = type;
17
14
  this.range = range;
18
15
  }
16
+ toString() {
17
+ return `(${this.condition.toString()} ? ${this.ifTrue.toString()} : ${this.ifFalse.toString()})`;
18
+ }
19
+ pretty(indent) {
20
+ const singleIndent = " ";
21
+ const indent_base = singleIndent.repeat(indent);
22
+ const indent_0 = "\n" + indent_base;
23
+ const indent_1 = indent_0 + singleIndent;
24
+ return (`(` +
25
+ `${this.condition.pretty(indent)} ?` +
26
+ `${indent_1}${this.ifTrue.pretty(indent + 1)} :` +
27
+ `${indent_1}${this.ifFalse.pretty(indent + 1)}` +
28
+ `)`);
29
+ }
19
30
  clone() {
20
31
  return new TirTernaryExpr(this.condition.clone(), this.ifTrue.clone(), this.ifFalse.clone(), this.type.clone(), this.range.clone());
21
32
  }
@@ -31,6 +42,6 @@ export class TirTernaryExpr {
31
42
  && this.ifFalse.isConstant);
32
43
  }
33
44
  toIR(ctx) {
34
- return new IRForced(_ir_apps(IRNative.strictIfThenElse, this.condition.toIR(ctx), new IRDelayed(this.ifTrue.toIR(ctx)), new IRDelayed(this.ifFalse.toIR(ctx))));
45
+ return _ir_lazyIfThenElse(this.condition.toIR(ctx), this.ifTrue.toIR(ctx), this.ifFalse.toIR(ctx));
35
46
  }
36
47
  }
@@ -15,7 +15,9 @@ export declare class TirToDataExpr implements ITirExpr {
15
15
  expr: TirExpr;
16
16
  readonly range: SourceRange;
17
17
  constructor(expr: TirExpr, range: SourceRange);
18
- clone(): TirToDataExpr;
18
+ toString(): string;
19
+ pretty(indent: number): string;
20
+ clone(): TirExpr;
19
21
  get isConstant(): boolean;
20
22
  get type(): TirDataT;
21
23
  deps(): string[];
@@ -5,7 +5,6 @@ import { IRFunc } from "../../../IR/IRNodes/IRFunc.js";
5
5
  import { IRHoisted } from "../../../IR/IRNodes/IRHoisted.js";
6
6
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
7
7
  import { IRVar } from "../../../IR/IRNodes/IRVar.js";
8
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
9
8
  import { data_t } from "../program/stdScope/stdScope.js";
10
9
  import { TirDataStructType, TirSoPStructType } from "../types/TirStructType.js";
11
10
  import { isTirType } from "../types/TirType.js";
@@ -22,6 +21,8 @@ import { TirDataOptT } from "../types/TirNativeType/native/Optional/data.js";
22
21
  import { TirSopOptT } from "../types/TirNativeType/native/Optional/sop.js";
23
22
  import { TirStringT } from "../types/TirNativeType/native/string.js";
24
23
  import { TirVoidT } from "../types/TirNativeType/native/void.js";
24
+ import { hoisted_constr1_empty } from "../../../IR/toUPLC/common_hoisted.js";
25
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
25
26
  export function isTirDataEncodedType(type) {
26
27
  type = getUnaliased(type) ?? type;
27
28
  return (type instanceof TirDataT
@@ -35,6 +36,14 @@ export class TirToDataExpr {
35
36
  this.expr = expr;
36
37
  this.range = range;
37
38
  }
39
+ toString() {
40
+ return `toData( ${this.expr.toString()} )`;
41
+ }
42
+ pretty(indent) {
43
+ const singleIndent = " ";
44
+ const indent_base = singleIndent.repeat(indent);
45
+ return `toData(${this.expr.pretty(indent)})`;
46
+ }
38
47
  clone() {
39
48
  return new TirToDataExpr(this.expr.clone(), this.range.clone());
40
49
  }
@@ -67,13 +76,14 @@ export function _inlineToData(origin_t, exprIR) {
67
76
  const value_t = getOptTypeArg(from_t);
68
77
  if (!isTirType(value_t))
69
78
  throw new Error("TirToDataExpr: unreachable");
79
+ const valueName = Symbol("value");
70
80
  return new IRCase(exprIR, [
71
81
  // case Just{ value }
72
- new IRFunc(1, // value
73
- _ir_apps(IRNative.constrData, IRConst.int(0), _ir_apps(IRNative.mkCons, _inlineToData(value_t, new IRVar(0)), // value to data
82
+ new IRFunc([valueName], // value
83
+ _ir_apps(IRNative.constrData, IRConst.int(0), _ir_apps(IRNative.mkCons, _inlineToData(value_t, new IRVar(valueName)), // value to data
74
84
  IRConst.listOf(data_t)([])))),
75
85
  // case Nothing
76
- new IRHoisted(IRConst.data(new DataConstr(1, [])))
86
+ hoisted_constr1_empty.clone()
77
87
  ]);
78
88
  }
79
89
  if (from_t instanceof TirSoPStructType) {
@@ -107,25 +117,22 @@ export function _toDataUplcFunc(origin_t) {
107
117
  || elems_t instanceof TirDataOptT
108
118
  || elems_t instanceof TirDataT)
109
119
  return IRNative.listData;
110
- return new IRHoisted(new IRFunc(1, // list
111
- _ir_apps(IRNative.listData, _ir_apps(IRNative._mkMapList, IRConst.listOf(elems_t)([]), _toDataUplcFunc(elems_t), new IRVar(0) // list
112
- ))));
120
+ return mkMapListToData(elems_t);
113
121
  }
114
122
  if (from_t instanceof TirSopOptT
115
- || from_t instanceof TirSoPStructType) {
116
- return new IRHoisted(new IRFunc(1, // sop
117
- _inlineToData(from_t, new IRVar(0) // sop
118
- )));
119
- }
123
+ || from_t instanceof TirSoPStructType)
124
+ return mkSopToData(from_t);
120
125
  throw new Error(`TirFromDataExpr: cannot convert from Data to type ${from_t.toString()}`);
121
126
  }
122
- const _mkUnitData = new IRHoisted(new IRFunc(1, IRConst.data(new DataConstr(0, [])), "~_mkUnitData"));
123
- const _boolToData = new IRHoisted(new IRFunc(1, // bool
124
- _ir_apps(IRNative.strictIfThenElse, new IRVar(0), // bool
125
- new IRHoisted(IRConst.data(new DataConstr(0, []))), new IRHoisted(IRConst.data(new DataConstr(1, [])))), "~_boolToData"));
126
- const _strToData = new IRHoisted(new IRFunc(1, // string
127
- _ir_apps(IRNative.bData, _ir_apps(IRNative.encodeUtf8, new IRVar(0) // string
128
- )), "~_strToData"));
127
+ const _mkUnitData = new IRHoisted(new IRFunc([Symbol("unit")], IRConst.data(new DataConstr(0, []))));
128
+ const bool_var_name = Symbol("bool");
129
+ const _boolToData = new IRHoisted(new IRFunc([bool_var_name], // bool
130
+ _ir_apps(IRNative.strictIfThenElse, new IRVar(bool_var_name), // bool
131
+ new IRHoisted(IRConst.data(new DataConstr(0, []))), new IRHoisted(IRConst.data(new DataConstr(1, []))))));
132
+ const str_var_name = Symbol("str");
133
+ const _strToData = new IRHoisted(new IRFunc([str_var_name], // string
134
+ _ir_apps(IRNative.bData, _ir_apps(IRNative.encodeUtf8, new IRVar(str_var_name) // string
135
+ ))));
129
136
  export function _inlineSingleSopConstrToData(sop_t, exprIR) {
130
137
  if (sop_t.constructors.length !== 1)
131
138
  throw new Error("_inilneSingeSopConstrFromData: multiple constructors");
@@ -141,15 +148,16 @@ export function _inlineSingleSopConstrToData(sop_t, exprIR) {
141
148
  new IRCase(exprIR, [IRNative._id])), IRConst.listOf(data_t)([])));
142
149
  }
143
150
  let lst = IRConst.listOf(data_t)([]);
144
- for (let i = constr.fields.length - 1, fieldDbnIdx = 0; i >= 0; i--, fieldDbnIdx++) {
145
- const filedExpr = new IRVar(fieldDbnIdx);
151
+ const fieldsVarsNames = constr.fields.map(f => Symbol(f.name));
152
+ for (let i = constr.fields.length - 1; i >= 0; i--) {
153
+ const filedExpr = new IRVar(fieldsVarsNames[i]);
146
154
  const field_t = getUnaliased(constr.fields[i].type);
147
155
  if (!isTirType(field_t))
148
156
  throw new Error("TirFromDataExpr: unreachable");
149
157
  lst = _ir_apps(IRNative.mkCons, _inlineToData(field_t, filedExpr), lst);
150
158
  }
151
159
  return _ir_apps(IRNative.constrData, IRConst.int(0), new IRCase(exprIR, [
152
- new IRFunc(constr.fields.length, lst)
160
+ new IRFunc(fieldsVarsNames, lst)
153
161
  ]));
154
162
  }
155
163
  export function _inlineMultiSopConstrToData(sop_t, exprIR) {
@@ -159,14 +167,37 @@ export function _inlineMultiSopConstrToData(sop_t, exprIR) {
159
167
  if (constr.fields.length === 0)
160
168
  return new IRHoisted(IRConst.data(new DataConstr(constrIdx, [])));
161
169
  let lst = IRConst.listOf(data_t)([]);
162
- for (let i = constr.fields.length - 1, fieldDbnIdx = 0; i >= 0; i--, fieldDbnIdx++) {
163
- const filedExpr = new IRVar(fieldDbnIdx);
170
+ const fieldsVarsNames = constr.fields.map(f => Symbol(f.name));
171
+ for (let i = constr.fields.length - 1; i >= 0; i--) {
172
+ const filedExpr = new IRVar(fieldsVarsNames[i]);
164
173
  const field_t = getUnaliased(constr.fields[i].type);
165
174
  if (!isTirType(field_t))
166
175
  throw new Error("TirFromDataExpr: unreachable");
167
176
  lst = _ir_apps(IRNative.mkCons, _inlineToData(field_t, filedExpr), lst);
168
177
  }
169
- return new IRFunc(constr.fields.length, _ir_apps(IRNative.constrData, IRConst.int(constrIdx), lst));
178
+ return new IRFunc(fieldsVarsNames, _ir_apps(IRNative.constrData, IRConst.int(constrIdx), lst));
170
179
  });
171
180
  return new IRCase(exprIR, cases);
172
181
  }
182
+ const _mapListToDataOfType = {};
183
+ function mkMapListToData(elems_t) {
184
+ const key = elems_t.toTirTypeKey();
185
+ if (_mapListToDataOfType[key])
186
+ return _mapListToDataOfType[key].clone();
187
+ const hoisted_mapListToData_lst = Symbol("hoisted_mapListToData_lst");
188
+ _mapListToDataOfType[key] = new IRHoisted(new IRFunc([hoisted_mapListToData_lst], // list
189
+ _ir_apps(IRNative.listData, _ir_apps(IRNative._mkMapList, IRConst.listOf(elems_t)([]), _toDataUplcFunc(elems_t), new IRVar(hoisted_mapListToData_lst) // list
190
+ ))));
191
+ return _mapListToDataOfType[key].clone();
192
+ }
193
+ const _sopToDataOfType = {};
194
+ function mkSopToData(from_t) {
195
+ const key = from_t.toTirTypeKey();
196
+ if (_sopToDataOfType[key])
197
+ return _sopToDataOfType[key].clone();
198
+ const sop_var = Symbol("sop");
199
+ _sopToDataOfType[key] = new IRHoisted(new IRFunc([sop_var], // sop
200
+ _inlineToData(from_t, new IRVar(sop_var) // sop
201
+ )));
202
+ return _sopToDataOfType[key].clone();
203
+ }
@@ -16,7 +16,9 @@ export declare class TirTraceIfFalseExpr implements ITirExpr {
16
16
  condition: TirExpr,
17
17
  /** must be string */
18
18
  traceStrExpr: TirExpr, range: SourceRange);
19
- clone(): TirTraceIfFalseExpr;
19
+ toString(): string;
20
+ pretty(indent: number): string;
21
+ clone(): TirExpr;
20
22
  toIR(ctx: ToIRTermCtx): IRTerm;
21
23
  get isConstant(): boolean;
22
24
  deps(): string[];
@@ -1,10 +1,9 @@
1
1
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
2
2
  import { bool_t } from "../program/stdScope/stdScope.js";
3
3
  import { IRConst } from "../../../IR/IRNodes/IRConst.js";
4
- import { IRDelayed } from "../../../IR/IRNodes/IRDelayed.js";
5
- import { IRForced } from "../../../IR/IRNodes/IRForced.js";
6
4
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
7
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
5
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
6
+ import { _ir_lazyIfThenElse } from "../../../IR/tree_utils/_ir_lazyIfThenElse.js";
8
7
  export class TirTraceIfFalseExpr {
9
8
  condition;
10
9
  traceStrExpr;
@@ -19,11 +18,29 @@ export class TirTraceIfFalseExpr {
19
18
  this.traceStrExpr = traceStrExpr;
20
19
  this.range = range;
21
20
  }
21
+ toString() {
22
+ return `traceIfFalse( ${this.condition.toString()}, ${this.traceStrExpr.toString()} )`;
23
+ }
24
+ pretty(indent) {
25
+ const singleIndent = " ";
26
+ const indent_base = singleIndent.repeat(indent);
27
+ const indent_1 = indent_base + singleIndent;
28
+ return (`traceIfFalse(` +
29
+ `\n${indent_1}${this.condition.pretty(indent + 1)},` +
30
+ `\n${indent_1}${this.traceStrExpr.pretty(indent + 1)}` +
31
+ `\n${indent_base})`);
32
+ }
22
33
  clone() {
23
34
  return new TirTraceIfFalseExpr(this.condition.clone(), this.traceStrExpr.clone(), this.range.clone());
24
35
  }
25
36
  toIR(ctx) {
26
- return new IRForced(_ir_apps(IRNative.strictIfThenElse, this.condition.toIR(ctx), new IRDelayed(IRConst.bool(true)), new IRDelayed(_ir_apps(IRNative.trace, this.traceStrExpr.toIR(ctx), IRConst.bool(false)))));
37
+ return _ir_lazyIfThenElse(
38
+ // condition
39
+ this.condition.toIR(ctx),
40
+ // then
41
+ IRConst.bool(true),
42
+ // else
43
+ _ir_apps(IRNative.trace, this.traceStrExpr.toIR(ctx), IRConst.bool(false)));
27
44
  }
28
45
  get isConstant() { return this.condition.isConstant && this.traceStrExpr.isConstant; }
29
46
  deps() {
@@ -9,8 +9,10 @@ export declare class TirTypeConversionExpr implements ITirExpr {
9
9
  readonly type: TirType;
10
10
  readonly range: SourceRange;
11
11
  constructor(expr: TirExpr, type: TirType, range: SourceRange);
12
+ toString(): string;
13
+ pretty(indent: number): string;
12
14
  deps(): string[];
13
15
  get isConstant(): boolean;
14
- clone(): TirTypeConversionExpr;
16
+ clone(): TirExpr;
15
17
  toIR(ctx: ToIRTermCtx): IRTerm;
16
18
  }
@@ -1,5 +1,5 @@
1
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
1
2
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
2
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
3
3
  import { TirBoolT } from "../types/TirNativeType/native/bool.js";
4
4
  import { TirBytesT } from "../types/TirNativeType/native/bytes.js";
5
5
  import { TirDataT } from "../types/TirNativeType/native/data.js";
@@ -18,6 +18,14 @@ export class TirTypeConversionExpr {
18
18
  this.type = type;
19
19
  this.range = range;
20
20
  }
21
+ toString() {
22
+ return `(${this.expr.toString()} as ${this.type.toString()})`;
23
+ }
24
+ pretty(indent) {
25
+ const singleIndent = " ";
26
+ const indent_base = singleIndent.repeat(indent);
27
+ return (`(${this.expr.pretty(indent)} as ${this.type.toString()})`);
28
+ }
21
29
  deps() {
22
30
  return this.expr.deps();
23
31
  }
@@ -3,14 +3,18 @@ import { IRSelfCall } from "../../../IR/IRNodes/IRSelfCall.js";
3
3
  import { IRVar } from "../../../IR/IRNodes/IRVar.js";
4
4
  import { ResolveValueResult } from "../../AstCompiler/scope/AstScope.js";
5
5
  import { TirType } from "../types/TirType.js";
6
- import { ITirExpr } from "./ITirExpr.js";
6
+ import type { ITirExpr } from "./ITirExpr.js";
7
+ import type { TirExpr } from "./TirExpr.js";
7
8
  import { ToIRTermCtx } from "./ToIRTermCtx.js";
8
9
  export declare class TirVariableAccessExpr implements ITirExpr {
9
- readonly resolvedValue: ResolveValueResult;
10
10
  readonly range: SourceRange;
11
+ readonly resolvedValue: Readonly<ResolveValueResult>;
12
+ private readonly _creationStack;
11
13
  get type(): TirType;
12
14
  constructor(resolvedValue: ResolveValueResult, range: SourceRange);
13
- clone(): TirVariableAccessExpr;
15
+ toString(): string;
16
+ pretty(indent: number): string;
17
+ clone(): TirExpr;
14
18
  get isConstant(): boolean;
15
19
  get varName(): string;
16
20
  deps(): string[];
@@ -1,14 +1,24 @@
1
1
  import { IRSelfCall } from "../../../IR/IRNodes/IRSelfCall.js";
2
2
  import { IRVar } from "../../../IR/IRNodes/IRVar.js";
3
3
  export class TirVariableAccessExpr {
4
- resolvedValue;
5
4
  range;
5
+ resolvedValue;
6
+ _creationStack;
6
7
  get type() {
7
8
  return this.resolvedValue.variableInfos.type;
8
9
  }
9
10
  constructor(resolvedValue, range) {
10
- this.resolvedValue = resolvedValue;
11
11
  this.range = range;
12
+ this.resolvedValue = Object.freeze(resolvedValue);
13
+ this._creationStack = (new Error()).stack;
14
+ }
15
+ toString() {
16
+ return this.varName;
17
+ }
18
+ pretty(indent) {
19
+ const singleIndent = " ";
20
+ const indent_base = singleIndent.repeat(indent);
21
+ return `${this.varName}`;
12
22
  }
13
23
  clone() {
14
24
  return new TirVariableAccessExpr(this.resolvedValue, this.range.clone());
@@ -17,14 +27,14 @@ export class TirVariableAccessExpr {
17
27
  get varName() {
18
28
  return this.resolvedValue.variableInfos.name;
19
29
  }
20
- deps() {
21
- return [this.varName];
22
- }
30
+ deps() { return [this.varName]; }
23
31
  toIR(ctx) {
24
32
  const ir = ctx.getVarAccessIR(this.varName);
25
33
  if (!(ir instanceof IRVar
26
- || ir instanceof IRSelfCall))
27
- throw new Error("Invalid variable access context");
34
+ || ir instanceof IRSelfCall)) {
35
+ console.log(this.resolvedValue);
36
+ throw new Error(`variable '${this.varName}' is missing`);
37
+ }
28
38
  return ir;
29
39
  }
30
40
  }
@@ -2,28 +2,24 @@ import { IRVar } from "../../../IR/IRNodes/IRVar.js";
2
2
  import { IRSelfCall } from "../../../IR/IRNodes/IRSelfCall.js";
3
3
  export declare class ToIRTermCtx {
4
4
  readonly parent: ToIRTermCtx | undefined;
5
- /**
6
- * quick access from a variable name to its context
7
- * used to resolve the variables in 0(1) time
8
- */
9
- private readonly variableToCtx;
10
- private readonly variables;
11
- private readonly _parentDbn;
12
- get dbn(): bigint;
5
+ private readonly localVars;
13
6
  private _firstVariableIsRecursive;
14
- constructor(parent: ToIRTermCtx | undefined,
15
- /**
16
- * quick access from a variable name to its context
17
- * used to resolve the variables in 0(1) time
18
- */
19
- variableToCtx: Map<string, ToIRTermCtx>);
7
+ constructor(parent: ToIRTermCtx | undefined);
8
+ allVariables(): string[];
20
9
  static root(): ToIRTermCtx;
21
10
  newChild(): ToIRTermCtx;
22
- private localVarDbn;
23
- getVarDeclDbn(name: string): bigint | undefined;
24
- getVarAccessDbn(name: string): bigint | undefined;
11
+ private localVarSym;
12
+ getVarAccessSym(name: string): symbol | undefined;
25
13
  getVarAccessIR(name: string): IRVar | IRSelfCall | undefined;
26
- defineVar(name: string): void;
27
- defineRecursiveVar(name: string): void;
28
- pushUnusedVar(): void;
14
+ /**
15
+ * @returns the symbol of the defined variable (for eventual `new IRFunc( ... )`)
16
+ **/
17
+ defineVar(varName: string | symbol): symbol;
18
+ /**
19
+ * @returns the symbol of the defined recursive variable (for eventual `new IRRecursive( ... )`)
20
+ **/
21
+ defineRecursiveVar(name: string): symbol;
22
+ private _parentDbn;
23
+ get dbn(): number;
24
+ pushUnusedVar(postfix?: string): symbol;
29
25
  }
@@ -3,75 +3,92 @@ import { IRSelfCall } from "../../../IR/IRNodes/IRSelfCall.js";
3
3
  const _1n = BigInt(1);
4
4
  export class ToIRTermCtx {
5
5
  parent;
6
- variableToCtx;
7
- variables = [];
8
- _parentDbn;
9
- get dbn() {
10
- return this._parentDbn + BigInt(this.variables.length);
11
- }
6
+ localVars = new Map();
12
7
  _firstVariableIsRecursive = false;
13
- constructor(parent,
14
- /**
15
- * quick access from a variable name to its context
16
- * used to resolve the variables in 0(1) time
17
- */
18
- variableToCtx) {
8
+ constructor(parent) {
19
9
  this.parent = parent;
20
- this.variableToCtx = variableToCtx;
21
- this._parentDbn = parent ? parent._parentDbn : BigInt(0);
10
+ this.localVars = new Map();
11
+ // DO NOT SET _parentDbn HERE
12
+ // it must be a getter to reflect changes in parent
13
+ // (parent dbn can change)
22
14
  this._firstVariableIsRecursive = false;
23
15
  }
16
+ allVariables() {
17
+ return ((this.parent?.allVariables() ?? [])
18
+ .concat([...this.localVars.keys()]));
19
+ }
24
20
  static root() {
25
- return new ToIRTermCtx(undefined, new Map());
21
+ return new ToIRTermCtx(undefined);
26
22
  }
27
23
  newChild() {
28
- return new ToIRTermCtx(this, this.variableToCtx);
29
- }
30
- localVarDbn(name) {
31
- const idx = this.variables.indexOf(name);
32
- if (idx < 0)
33
- return undefined;
34
- return this._parentDbn + BigInt(idx);
24
+ return new ToIRTermCtx(this);
35
25
  }
36
- getVarDeclDbn(name) {
37
- const ctx = this.variableToCtx.get(name);
38
- if (!ctx)
39
- return undefined;
40
- return ctx.localVarDbn(name);
26
+ localVarSym(name) {
27
+ return this.localVars.get(name);
41
28
  }
42
- getVarAccessDbn(name) {
43
- const declDbn = this.getVarDeclDbn(name);
44
- if (typeof declDbn !== "bigint")
45
- return undefined;
46
- return this.dbn - (declDbn + _1n);
29
+ getVarAccessSym(name) {
30
+ return (this.localVarSym(name)
31
+ ?? this.parent?.getVarAccessSym(name));
47
32
  }
48
33
  getVarAccessIR(name) {
49
- const accessDbn = this.getVarAccessDbn(name);
50
- if (typeof accessDbn !== "bigint")
34
+ const accessSym = this.getVarAccessSym(name);
35
+ if (typeof accessSym !== "symbol")
51
36
  return undefined;
52
- if (name === this.variables[0]
53
- && this._firstVariableIsRecursive)
54
- return new IRSelfCall(accessDbn);
55
- return new IRVar(accessDbn);
37
+ if (this._firstVariableIsRecursive
38
+ && name === this.localVars.keys().next().value)
39
+ return new IRSelfCall(accessSym);
40
+ return new IRVar(accessSym);
56
41
  }
57
- defineVar(name) {
58
- if (this.variableToCtx.has(name)) {
59
- const ctx = this.variableToCtx.get(name);
60
- if (ctx.localVarDbn(name) !== undefined) {
61
- throw new Error(`variable '${name}' already defined in the current scope`);
62
- }
42
+ /**
43
+ * @returns the symbol of the defined variable (for eventual `new IRFunc( ... )`)
44
+ **/
45
+ defineVar(varName) {
46
+ const name = typeof varName === "string" ? varName : varName.description;
47
+ // allow shadowing
48
+ // const exsistingCtx = this.variableToCtx.get( name );
49
+ // if(
50
+ // exsistingCtx
51
+ // && exsistingCtx.localVarSym( name ) !== undefined
52
+ // ) throw new Error(`variable '${name}' already defined in the current scope`);
53
+ if (this.localVars.has(name)) {
54
+ throw new Error(`variable '${name}' already defined in the current scope`);
63
55
  }
64
- this.variables.push(name);
65
- this.variableToCtx.set(name, this);
56
+ const sym = typeof varName === "string" ? Symbol(name) : varName;
57
+ this.localVars.set(name, sym);
58
+ // this.variableToCtx.set( name, this );
59
+ return sym;
66
60
  }
61
+ /**
62
+ * @returns the symbol of the defined recursive variable (for eventual `new IRRecursive( ... )`)
63
+ **/
67
64
  defineRecursiveVar(name) {
68
- if (this.variables.length > 0
65
+ if (this.localVars.size > 0
69
66
  || this._firstVariableIsRecursive)
70
67
  throw new Error("recursive variable must be the first defined variable in the context");
71
- this.defineVar(name);
72
68
  this._firstVariableIsRecursive = true;
69
+ return this.defineVar(name);
70
+ }
71
+ _parentDbn = undefined;
72
+ get dbn() {
73
+ if (typeof this._parentDbn !== "number")
74
+ this._parentDbn = this.parent instanceof ToIRTermCtx ? this.parent.dbn : 0;
75
+ return this.localVars.size + this._parentDbn;
73
76
  }
74
- pushUnusedVar() {
75
- this.variables.push(""); // just to increment dbn
77
+ pushUnusedVar(postfix) {
78
+ // this.variables.push( "" );
79
+ // just to increment dbn
80
+ // we need a new unique name in the `variables` map
81
+ // (if we just use empty string, or the same string, it will overwrite the previous "unused" entry)
82
+ //
83
+ // we start with the number so we know it is not a valid variable name
84
+ // but we add "_unused" so the key is not an integer (which would be sorted first in Object.keys)
85
+ const prefix = this.dbn.toString();
86
+ if (!(typeof postfix === "string"
87
+ && postfix.length > 0))
88
+ postfix = "unused";
89
+ const name = prefix + "_" + postfix;
90
+ const sym = Symbol(name);
91
+ this.localVars.set(name, sym);
92
+ return sym;
76
93
  }
77
94
  }