@harmoniclabs/pebble 0.1.0-dev5 → 0.1.0-dev7

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 (321) 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 +3 -3
  24. package/dist/IR/IRNodes/IRNative/IRNativeTag.js +4 -4
  25. package/dist/IR/IRNodes/IRNative/index.d.ts +10 -8
  26. package/dist/IR/IRNodes/IRNative/index.js +56 -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/CompilerOptions.d.ts +5 -0
  42. package/dist/IR/toUPLC/CompilerOptions.js +10 -1
  43. package/dist/IR/toUPLC/_internal/_modifyChildFromTo.js +3 -0
  44. package/dist/IR/toUPLC/_internal/findAll.js +2 -73
  45. package/dist/IR/toUPLC/_internal/getDebruijnInTerm.js +7 -34
  46. package/dist/IR/toUPLC/_internal/iterTree.js +3 -17
  47. package/dist/IR/toUPLC/common_hoisted.d.ts +2 -0
  48. package/dist/IR/toUPLC/common_hoisted.js +4 -0
  49. package/dist/IR/toUPLC/compileIRToUPLC.d.ts +1 -1
  50. package/dist/IR/toUPLC/compileIRToUPLC.js +91 -14
  51. package/dist/IR/toUPLC/ctx/ToUplcCtx.d.ts +16 -0
  52. package/dist/IR/toUPLC/ctx/ToUplcCtx.js +67 -0
  53. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.d.ts +8 -0
  54. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.js +95 -0
  55. package/dist/IR/toUPLC/subRoutines/handleHoistedAndReturnRoot/index.js +7 -54
  56. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.d.ts +6 -13
  57. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.js +65 -71
  58. package/dist/IR/toUPLC/subRoutines/handleLetted/index.js +44 -170
  59. package/dist/IR/toUPLC/subRoutines/handleRecursiveTerms.js +7 -3
  60. package/dist/IR/toUPLC/subRoutines/hoistForcedNatives.js +3 -2
  61. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.d.ts +22 -0
  62. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.js +59 -0
  63. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.d.ts +0 -0
  64. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.js +217 -0
  65. package/dist/IR/toUPLC/subRoutines/markRecursiveHoistsAsForced.js +12 -49
  66. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.d.ts +1 -1
  67. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.js +11 -14
  68. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/{index.d.ts → performUplcOptimizationsAndReturnRoot.d.ts} +0 -2
  69. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/performUplcOptimizationsAndReturnRoot.js +151 -0
  70. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.d.ts +11 -0
  71. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.js +46 -0
  72. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.d.ts +2 -0
  73. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.js +80 -0
  74. package/dist/IR/toUPLC/subRoutines/replaceHoistedWithLetted.js +18 -11
  75. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.d.ts +45 -0
  76. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.js +277 -478
  77. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.d.ts +2 -0
  78. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.js +85 -0
  79. package/dist/IR/toUPLC/subRoutines/sanifyTree.js +1 -0
  80. package/dist/IR/toUPLC/utils/getApplicationTerms.d.ts +6 -0
  81. package/dist/IR/toUPLC/utils/getApplicationTerms.js +37 -0
  82. package/dist/IR/tree_utils/_ir_lazyChooseList.d.ts +2 -2
  83. package/dist/IR/tree_utils/_ir_lazyChooseList.js +4 -2
  84. package/dist/IR/tree_utils/_ir_lazyIfThenElse.d.ts +1 -1
  85. package/dist/IR/tree_utils/_ir_lazyIfThenElse.js +4 -2
  86. package/dist/IR/tree_utils/_ir_let.d.ts +2 -1
  87. package/dist/IR/tree_utils/_ir_let.js +6 -2
  88. package/dist/IR/utils/isClosedIRTerm.d.ts +1 -0
  89. package/dist/IR/utils/isClosedIRTerm.js +40 -26
  90. package/dist/IR/utils/positiveIntAsBytes.d.ts +1 -0
  91. package/dist/IR/utils/positiveIntAsBytes.js +4 -4
  92. package/dist/IR/utils/showIR.d.ts +10 -21
  93. package/dist/IR/utils/showIR.js +66 -64
  94. package/dist/ast/nodes/common/Identifier.d.ts +1 -0
  95. package/dist/ast/nodes/common/Identifier.js +3 -0
  96. package/dist/ast/nodes/expr/CaseExpr.d.ts +5 -5
  97. package/dist/ast/nodes/expr/ElemAccessExpr.d.ts +2 -2
  98. package/dist/ast/nodes/expr/ParentesizedExpr.d.ts +1 -1
  99. package/dist/ast/nodes/expr/PebbleExpr.d.ts +2 -1
  100. package/dist/ast/nodes/expr/PropAccessExpr.d.ts +3 -3
  101. package/dist/ast/nodes/expr/TernaryExpr.d.ts +3 -3
  102. package/dist/ast/nodes/expr/TypeConversionExpr.d.ts +2 -1
  103. package/dist/ast/nodes/expr/TypeConversionExpr.js +2 -0
  104. package/dist/ast/nodes/expr/binary/BinaryExpr.d.ts +42 -42
  105. package/dist/ast/nodes/expr/functions/CallExpr.d.ts +1 -1
  106. package/dist/ast/nodes/expr/functions/FuncExpr.d.ts +2 -1
  107. package/dist/ast/nodes/expr/functions/FuncExpr.js +6 -0
  108. package/dist/ast/nodes/expr/litteral/LitContextExpr.d.ts +6 -0
  109. package/dist/ast/nodes/expr/litteral/LitContextExpr.js +6 -0
  110. package/dist/ast/nodes/expr/litteral/LitFailExpr.d.ts +6 -0
  111. package/dist/ast/nodes/expr/litteral/LitFailExpr.js +6 -0
  112. package/dist/ast/nodes/expr/litteral/LitteralExpr.d.ts +3 -1
  113. package/dist/ast/nodes/expr/litteral/LitteralExpr.js +5 -1
  114. package/dist/ast/nodes/statements/AssertStmt.d.ts +2 -2
  115. package/dist/ast/nodes/statements/AssignmentStmt.d.ts +1 -1
  116. package/dist/ast/nodes/statements/BlockStmt.d.ts +1 -1
  117. package/dist/ast/nodes/statements/FailStmt.d.ts +1 -1
  118. package/dist/ast/nodes/statements/ForOfStmt.d.ts +4 -2
  119. package/dist/ast/nodes/statements/ForOfStmt.js +6 -0
  120. package/dist/ast/nodes/statements/ForStmt.d.ts +6 -4
  121. package/dist/ast/nodes/statements/ForStmt.js +6 -0
  122. package/dist/ast/nodes/statements/IfStmt.d.ts +8 -5
  123. package/dist/ast/nodes/statements/IfStmt.js +13 -0
  124. package/dist/ast/nodes/statements/MatchStmt.d.ts +13 -4
  125. package/dist/ast/nodes/statements/MatchStmt.js +22 -1
  126. package/dist/ast/nodes/statements/PebbleStmt.d.ts +2 -1
  127. package/dist/ast/nodes/statements/PebbleStmt.js +3 -1
  128. package/dist/ast/nodes/statements/ReturnStmt.d.ts +1 -1
  129. package/dist/ast/nodes/statements/WhileStmt.d.ts +4 -2
  130. package/dist/ast/nodes/statements/WhileStmt.js +6 -0
  131. package/dist/ast/nodes/statements/declarations/ContractDecl.d.ts +17 -0
  132. package/dist/ast/nodes/statements/declarations/ContractDecl.js +22 -0
  133. package/dist/ast/nodes/statements/declarations/VarDecl/ArrayLikeDeconstr.d.ts +1 -1
  134. package/dist/ast/nodes/statements/declarations/VarDecl/HasInit.d.ts +1 -1
  135. package/dist/ast/nodes/statements/declarations/VarDecl/NamedDeconstructVarDecl.d.ts +1 -1
  136. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.d.ts +2 -1
  137. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.js +6 -0
  138. package/dist/ast/nodes/statements/declarations/VarDecl/SingleDeconstructVarDecl.d.ts +1 -1
  139. package/dist/compiler/AstCompiler/AstCompiler.d.ts +7 -2
  140. package/dist/compiler/AstCompiler/AstCompiler.js +129 -25
  141. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.d.ts +10 -0
  142. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.js +777 -0
  143. package/dist/compiler/AstCompiler/internal/exprs/_compileBinaryExpr.js +1 -1
  144. package/dist/compiler/AstCompiler/internal/exprs/_compileExpr.js +5 -1
  145. package/dist/compiler/AstCompiler/internal/exprs/_compileFuncExpr.js +7 -4
  146. package/dist/compiler/AstCompiler/internal/exprs/_compileLitteralExpr.js +8 -2
  147. package/dist/compiler/AstCompiler/internal/exprs/_compilePropAccessExpr.js +1 -1
  148. package/dist/compiler/AstCompiler/internal/exprs/_compileTypeConversionExpr.js +2 -1
  149. package/dist/compiler/AstCompiler/internal/exprs/_compileUnaryPrefixExpr.js +1 -1
  150. package/dist/compiler/AstCompiler/internal/exprs/_compileVarAccessExpr.js +3 -1
  151. package/dist/compiler/AstCompiler/internal/statements/_compileAssignmentStmt.js +8 -8
  152. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.d.ts +2 -2
  153. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.js +48 -24
  154. package/dist/compiler/AstCompiler/internal/statements/_compileStatement.js +4 -1
  155. package/dist/compiler/AstCompiler/internal/statements/_compileVarStmt.d.ts +2 -1
  156. package/dist/compiler/AstCompiler/internal/statements/_compileVarStmt.js +4 -3
  157. package/dist/compiler/AstCompiler/internal/types/_compileDataEncodedConcreteType.js +1 -1
  158. package/dist/compiler/AstCompiler/internal/types/_compileSopEncodedConcreteType.js +4 -1
  159. package/dist/compiler/AstCompiler/scope/AstScope.d.ts +1 -0
  160. package/dist/compiler/AstCompiler/scope/AstScope.js +9 -3
  161. package/dist/compiler/AstCompiler/utils/getPropAccessReturnType.js +6 -4
  162. package/dist/compiler/Compiler.js +7 -1
  163. package/dist/compiler/TirCompiler/compileTirProgram.js +4 -1
  164. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.d.ts +17 -5
  165. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.js +79 -49
  166. package/dist/compiler/TirCompiler/expressify/determineReassignedVariablesAndReturn.js +13 -2
  167. package/dist/compiler/TirCompiler/expressify/expressify.d.ts +2 -1
  168. package/dist/compiler/TirCompiler/expressify/expressify.js +102 -41
  169. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.d.ts +2 -1
  170. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.js +77 -12
  171. package/dist/compiler/TirCompiler/expressify/expressifyIfBranch.js +1 -1
  172. package/dist/compiler/TirCompiler/expressify/expressifyVarAssignmentStmt.d.ts +1 -2
  173. package/dist/compiler/TirCompiler/expressify/expressifyVarAssignmentStmt.js +16 -9
  174. package/dist/compiler/TirCompiler/expressify/expressifyVarDecl.js +6 -8
  175. package/dist/compiler/TirCompiler/expressify/expressifyVars.js +146 -13
  176. package/dist/compiler/TirCompiler/expressify/flattenSopNamedDeconstructInplace_addTopDestructToCtx_getNestedDeconstruct.js +1 -0
  177. package/dist/compiler/internalVar.d.ts +1 -1
  178. package/dist/compiler/internalVar.js +31 -24
  179. package/dist/compiler/io/CompilerIoApi.d.ts +1 -1
  180. package/dist/compiler/io/IOutputStream.d.ts +1 -0
  181. package/dist/compiler/io/IOutputStream.js +18 -3
  182. package/dist/compiler/path/getAbsolutePath.js +4 -6
  183. package/dist/compiler/tir/expressions/ITirExpr.d.ts +2 -0
  184. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.d.ts +4 -2
  185. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.js +16 -2
  186. package/dist/compiler/tir/expressions/TirCallExpr.d.ts +3 -1
  187. package/dist/compiler/tir/expressions/TirCallExpr.js +16 -1
  188. package/dist/compiler/tir/expressions/TirCaseExpr.d.ts +6 -1
  189. package/dist/compiler/tir/expressions/TirCaseExpr.js +105 -60
  190. package/dist/compiler/tir/expressions/TirElemAccessExpr.d.ts +3 -1
  191. package/dist/compiler/tir/expressions/TirElemAccessExpr.js +9 -1
  192. package/dist/compiler/tir/expressions/TirFailExpr.d.ts +3 -1
  193. package/dist/compiler/tir/expressions/TirFailExpr.js +9 -1
  194. package/dist/compiler/tir/expressions/TirFromDataExpr.d.ts +3 -2
  195. package/dist/compiler/tir/expressions/TirFromDataExpr.js +85 -56
  196. package/dist/compiler/tir/expressions/TirFuncExpr.d.ts +4 -10
  197. package/dist/compiler/tir/expressions/TirFuncExpr.js +30 -13
  198. package/dist/compiler/tir/expressions/TirHoistedExpr.d.ts +3 -1
  199. package/dist/compiler/tir/expressions/TirHoistedExpr.js +8 -0
  200. package/dist/compiler/tir/expressions/TirInlineClosedIR.d.ts +4 -1
  201. package/dist/compiler/tir/expressions/TirInlineClosedIR.js +8 -0
  202. package/dist/compiler/tir/expressions/TirLettedExpr.d.ts +6 -3
  203. package/dist/compiler/tir/expressions/TirLettedExpr.js +20 -7
  204. package/dist/compiler/tir/expressions/TirNativeFunc.d.ts +9 -5
  205. package/dist/compiler/tir/expressions/TirNativeFunc.js +58 -22
  206. package/dist/compiler/tir/expressions/TirParentesizedExpr.d.ts +3 -1
  207. package/dist/compiler/tir/expressions/TirParentesizedExpr.js +6 -0
  208. package/dist/compiler/tir/expressions/TirPropAccessExpr.d.ts +3 -1
  209. package/dist/compiler/tir/expressions/TirPropAccessExpr.js +9 -1
  210. package/dist/compiler/tir/expressions/TirTernaryExpr.d.ts +3 -1
  211. package/dist/compiler/tir/expressions/TirTernaryExpr.js +16 -5
  212. package/dist/compiler/tir/expressions/TirToDataExpr.d.ts +3 -1
  213. package/dist/compiler/tir/expressions/TirToDataExpr.js +56 -25
  214. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.d.ts +3 -1
  215. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.js +21 -4
  216. package/dist/compiler/tir/expressions/TirTypeConversionExpr.d.ts +3 -1
  217. package/dist/compiler/tir/expressions/TirTypeConversionExpr.js +9 -1
  218. package/dist/compiler/tir/expressions/TirVariableAccessExpr.d.ts +6 -3
  219. package/dist/compiler/tir/expressions/TirVariableAccessExpr.js +22 -8
  220. package/dist/compiler/tir/expressions/ToIRTermCtx.d.ts +19 -20
  221. package/dist/compiler/tir/expressions/ToIRTermCtx.js +74 -50
  222. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.d.ts +41 -0
  223. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.js +180 -4
  224. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.d.ts +4 -2
  225. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.js +8 -2
  226. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.d.ts +17 -0
  227. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.js +21 -0
  228. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.d.ts +4 -1
  229. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.js +4 -0
  230. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.d.ts +4 -1
  231. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.js +5 -0
  232. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.d.ts +4 -1
  233. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.js +4 -0
  234. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.d.ts +3 -1
  235. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.js +5 -0
  236. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.d.ts +3 -1
  237. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.js +5 -0
  238. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.d.ts +4 -1
  239. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.js +4 -0
  240. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.d.ts +4 -1
  241. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.js +7 -3
  242. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.d.ts +4 -1
  243. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.js +4 -0
  244. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.d.ts +4 -1
  245. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.js +4 -0
  246. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.d.ts +4 -1
  247. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.js +4 -0
  248. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.d.ts +2 -1
  249. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.js +3 -1
  250. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.d.ts +4 -2
  251. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.js +8 -3
  252. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.d.ts +4 -2
  253. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.js +8 -2
  254. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.d.ts +3 -1
  255. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.js +6 -0
  256. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.d.ts +4 -2
  257. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.js +8 -2
  258. package/dist/compiler/tir/program/TypedProgram.d.ts +3 -2
  259. package/dist/compiler/tir/program/TypedProgram.js +9 -0
  260. package/dist/compiler/tir/program/stdScope/stdScope.js +135 -149
  261. package/dist/compiler/tir/statements/TirAssertStmt.d.ts +2 -0
  262. package/dist/compiler/tir/statements/TirAssertStmt.js +10 -0
  263. package/dist/compiler/tir/statements/TirAssignmentStmt.d.ts +2 -0
  264. package/dist/compiler/tir/statements/TirAssignmentStmt.js +8 -0
  265. package/dist/compiler/tir/statements/TirBlockStmt.d.ts +2 -0
  266. package/dist/compiler/tir/statements/TirBlockStmt.js +16 -0
  267. package/dist/compiler/tir/statements/TirBreakStmt.d.ts +2 -0
  268. package/dist/compiler/tir/statements/TirBreakStmt.js +8 -0
  269. package/dist/compiler/tir/statements/TirContinueStmt.d.ts +2 -0
  270. package/dist/compiler/tir/statements/TirContinueStmt.js +8 -0
  271. package/dist/compiler/tir/statements/TirFailStmt.d.ts +2 -0
  272. package/dist/compiler/tir/statements/TirFailStmt.js +8 -0
  273. package/dist/compiler/tir/statements/TirForOfStmt.d.ts +2 -0
  274. package/dist/compiler/tir/statements/TirForOfStmt.js +14 -0
  275. package/dist/compiler/tir/statements/TirForStmt.d.ts +2 -0
  276. package/dist/compiler/tir/statements/TirForStmt.js +21 -0
  277. package/dist/compiler/tir/statements/TirIfStmt.d.ts +2 -0
  278. package/dist/compiler/tir/statements/TirIfStmt.js +16 -0
  279. package/dist/compiler/tir/statements/TirMatchStmt.d.ts +2 -0
  280. package/dist/compiler/tir/statements/TirMatchStmt.js +30 -0
  281. package/dist/compiler/tir/statements/TirReturnStmt.d.ts +2 -0
  282. package/dist/compiler/tir/statements/TirReturnStmt.js +8 -0
  283. package/dist/compiler/tir/statements/TirStmt.d.ts +2 -0
  284. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.d.ts +2 -0
  285. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.js +30 -0
  286. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.d.ts +3 -1
  287. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.js +28 -0
  288. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.d.ts +3 -0
  289. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.js +13 -0
  290. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.d.ts +3 -1
  291. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.js +28 -0
  292. package/dist/compiler/tir/statements/TirWhileStmt.d.ts +2 -0
  293. package/dist/compiler/tir/statements/TirWhileStmt.js +14 -0
  294. package/dist/compiler/tir/types/utils/canAssignTo.js +1 -1
  295. package/dist/diagnostics/DiagnosticEmitter.js +1 -1
  296. package/dist/diagnostics/diagnosticMessages.generated.d.ts +10 -1
  297. package/dist/diagnostics/diagnosticMessages.generated.js +20 -2
  298. package/dist/parser/Parser.d.ts +8 -3
  299. package/dist/parser/Parser.js +180 -32
  300. package/dist/parser/Precedence.js +1 -0
  301. package/dist/tokenizer/Token.d.ts +81 -72
  302. package/dist/tokenizer/Token.js +82 -72
  303. package/dist/tokenizer/utils/tokenFromKeyword.js +32 -10
  304. package/dist/tokenizer/utils/tokenIsAlsoIdentifier.js +10 -0
  305. package/dist/utils/BitUtils/index.js +1 -1
  306. package/dist/utils/UPLCFlatUtils/index.js +1 -1
  307. package/dist/utils/array/keepSortedArrInplace.js +1 -0
  308. package/package.json +3 -1
  309. package/dist/IR/IRNodes/utils/isClosedAtDbn.d.ts +0 -2
  310. package/dist/IR/IRNodes/utils/isClosedAtDbn.js +0 -22
  311. package/dist/IR/toUPLC/_internal/_irToUplc.d.ts +0 -9
  312. package/dist/IR/toUPLC/_internal/_irToUplc.js +0 -156
  313. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.d.ts +0 -9
  314. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.js +0 -73
  315. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.d.ts +0 -1
  316. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.js +0 -12
  317. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/index.js +0 -227
  318. package/dist/IR/tree_utils/_ir_apps.d.ts +0 -3
  319. package/dist/IR/tree_utils/_ir_apps.js +0 -8
  320. package/dist/compiler/TirCompiler/internal/_compileHoistedDeps.d.ts +0 -5
  321. package/dist/compiler/TirCompiler/internal/_compileHoistedDeps.js +0 -37
@@ -1,5 +1,5 @@
1
1
  import { SourceRange } from "../../../ast/Source/SourceRange.js";
2
- import { IRTerm } from "../../../IR/IRTerm.js";
2
+ import type { IRTerm } from "../../../IR/IRTerm.js";
3
3
  import { TirAssertStmt } from "../statements/TirAssertStmt.js";
4
4
  import { TirType } from "../types/TirType.js";
5
5
  import { ITirExpr } from "./ITirExpr.js";
@@ -11,7 +11,9 @@ export declare class TirAssertAndContinueExpr implements ITirExpr {
11
11
  readonly range: SourceRange;
12
12
  get type(): TirType;
13
13
  constructor(conditions: TirExpr[], continuation: TirExpr, range: SourceRange);
14
- clone(): TirAssertAndContinueExpr;
14
+ toString(): string;
15
+ pretty(indent: number): string;
16
+ clone(): TirExpr;
15
17
  static fromStmtsAndContinuation(assertions: TirAssertStmt[], continuation: TirExpr): TirExpr;
16
18
  deps(): string[];
17
19
  get isConstant(): boolean;
@@ -1,8 +1,8 @@
1
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
1
2
  import { IRDelayed } from "../../../IR/IRNodes/IRDelayed.js";
2
3
  import { IRError } from "../../../IR/IRNodes/IRError.js";
3
4
  import { IRForced } from "../../../IR/IRNodes/IRForced.js";
4
5
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
5
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
6
6
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
7
7
  export class TirAssertAndContinueExpr {
8
8
  conditions;
@@ -16,6 +16,18 @@ export class TirAssertAndContinueExpr {
16
16
  this.continuation = continuation;
17
17
  this.range = range;
18
18
  }
19
+ toString() {
20
+ return `assert ${this.conditions.map(c => c.toString()).join(" && ")} then ${this.continuation.toString()}`;
21
+ }
22
+ pretty(indent) {
23
+ const singleIndent = " ";
24
+ const indent_base = singleIndent.repeat(indent);
25
+ const indent_0 = "\n" + indent_base;
26
+ const indent_1 = indent_0 + singleIndent;
27
+ const conditionsPart = this.conditions.map(c => c.pretty(indent)).join(` &&${indent_1}`);
28
+ return (`assert ${conditionsPart}` +
29
+ `${indent_0}then ${this.continuation.pretty(indent)}`);
30
+ }
19
31
  /// @ts-ignore Return type annotation circularly references itself.
20
32
  clone() {
21
33
  return new TirAssertAndContinueExpr(this.conditions.map(c => c.clone()), this.continuation.clone(), this.range.clone());
@@ -23,7 +35,9 @@ export class TirAssertAndContinueExpr {
23
35
  static fromStmtsAndContinuation(assertions, continuation) {
24
36
  if (assertions.length <= 0)
25
37
  return continuation;
26
- return new TirAssertAndContinueExpr(assertions.map(a => a.toSafeCondition()), continuation, continuation.range);
38
+ const correctAssertions = assertions.map(a => a.toSafeCondition());
39
+ assertions.length = 0;
40
+ return new TirAssertAndContinueExpr(correctAssertions, continuation, continuation.range);
27
41
  }
28
42
  deps() {
29
43
  return (this.conditions
@@ -10,7 +10,9 @@ export declare class TirCallExpr implements ITirExpr {
10
10
  readonly type: TirType;
11
11
  readonly range: SourceRange;
12
12
  constructor(func: TirExpr, args: TirExpr[], type: TirType, range: SourceRange);
13
- clone(): TirCallExpr;
13
+ toString(): string;
14
+ pretty(indent?: number): string;
15
+ clone(): TirExpr;
14
16
  deps(): string[];
15
17
  get isConstant(): boolean;
16
18
  toIR(ctx: ToIRTermCtx): IRTerm;
@@ -1,4 +1,4 @@
1
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
1
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
2
2
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
3
3
  export class TirCallExpr {
4
4
  func;
@@ -11,6 +11,21 @@ export class TirCallExpr {
11
11
  this.type = type;
12
12
  this.range = range;
13
13
  }
14
+ toString() {
15
+ return `${this.func.toString()}( ${this.args.map(a => a.toString()).join(", ")} )`;
16
+ }
17
+ pretty(indent = 1) {
18
+ const singleIndent = " ";
19
+ const indent_base = singleIndent.repeat(indent);
20
+ const indent_0 = "\n" + indent_base;
21
+ const indent_1 = indent_0 + singleIndent;
22
+ if (this.args.length === 0) {
23
+ return `${this.func.pretty(indent)}()`;
24
+ }
25
+ return (`${this.func.pretty(indent)}(` +
26
+ indent_1 + this.args.map(arg => arg.pretty(indent + 1)).join(`,${indent_1}`) +
27
+ `${indent_0})`);
28
+ }
14
29
  clone() {
15
30
  return new TirCallExpr(this.func.clone(), this.args.map(a => a.clone()), this.type.clone(), this.range.clone());
16
31
  }
@@ -12,8 +12,11 @@ export declare class TirCaseExpr implements ITirExpr {
12
12
  readonly wildcardCase: TirWildcardCaseMatcher | undefined;
13
13
  readonly type: TirType;
14
14
  readonly range: SourceRange;
15
+ private readonly _creationStack;
15
16
  constructor(matchExpr: TirExpr, cases: TirCaseMatcher[], wildcardCase: TirWildcardCaseMatcher | undefined, type: TirType, range: SourceRange);
16
- clone(): TirCaseExpr;
17
+ toString(): string;
18
+ pretty(indent: number): string;
19
+ clone(): TirExpr;
17
20
  deps(): string[];
18
21
  get isConstant(): boolean;
19
22
  toIR(ctx: ToIRTermCtx): IRTerm;
@@ -27,10 +30,12 @@ export declare class TirCaseMatcher implements HasSourceRange {
27
30
  readonly range: SourceRange;
28
31
  constructor(pattern: TirCasePattern, body: TirExpr, range: SourceRange);
29
32
  deps(): string[];
33
+ pretty(indent: number): string;
30
34
  }
31
35
  export declare class TirWildcardCaseMatcher implements HasSourceRange {
32
36
  body: TirExpr;
33
37
  readonly range: SourceRange;
34
38
  constructor(body: TirExpr, range: SourceRange);
35
39
  deps(): string[];
40
+ pretty(indent: number): string;
36
41
  }
@@ -1,3 +1,4 @@
1
+ import { IRApp, _ir_apps } from "../../../IR/IRNodes/IRApp.js";
1
2
  import { IRCase } from "../../../IR/IRNodes/IRCase.js";
2
3
  import { IRConst } from "../../../IR/IRNodes/IRConst.js";
3
4
  import { IRDelayed } from "../../../IR/IRNodes/IRDelayed.js";
@@ -6,8 +7,8 @@ import { IRForced } from "../../../IR/IRNodes/IRForced.js";
6
7
  import { IRFunc } from "../../../IR/IRNodes/IRFunc.js";
7
8
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
8
9
  import { IRVar } from "../../../IR/IRNodes/IRVar.js";
9
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
10
- import { _ir_let } from "../../../IR/tree_utils/_ir_let.js";
10
+ import { _ir_lazyIfThenElse } from "../../../IR/tree_utils/_ir_lazyIfThenElse.js";
11
+ import { _ir_let, _ir_let_sym } from "../../../IR/tree_utils/_ir_let.js";
11
12
  import { filterSortedStrArrInplace } from "../../../utils/array/filterSortedStrArrInplace.js";
12
13
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
13
14
  import { TirSimpleVarDecl } from "../statements/TirVarDecl/TirSimpleVarDecl.js";
@@ -23,12 +24,35 @@ export class TirCaseExpr {
23
24
  wildcardCase;
24
25
  type;
25
26
  range;
27
+ _creationStack;
26
28
  constructor(matchExpr, cases, wildcardCase, type, range) {
27
29
  this.matchExpr = matchExpr;
28
30
  this.cases = cases;
29
31
  this.wildcardCase = wildcardCase;
30
32
  this.type = type;
31
33
  this.range = range;
34
+ // this._creationStack = (new Error()).stack;
35
+ }
36
+ toString() {
37
+ const casesStr = this.cases.map(c => `is ${c.pattern.toString()} => ${c.body.toString()}`).join(" ");
38
+ const wildcardStr = this.wildcardCase
39
+ ? `else ${this.wildcardCase.body.toString()}`
40
+ : "";
41
+ return `(case ${this.matchExpr.toString()} ${casesStr} ${wildcardStr})`;
42
+ }
43
+ pretty(indent) {
44
+ const singleIndent = " ";
45
+ const indent_base = singleIndent.repeat(indent);
46
+ const indent_0 = "\n" + indent_base;
47
+ const indent_1 = indent_0 + singleIndent;
48
+ const casesPart = this.cases.map(c => `${indent_1}is ${c.pattern.pretty(indent + 1)} => ${c.body.pretty(indent + 1)}`).join("");
49
+ const wildcardPart = this.wildcardCase
50
+ ? `${indent_1}else ${this.wildcardCase.body.pretty(indent + 1)}`
51
+ : "";
52
+ return (`(case ${this.matchExpr.pretty(indent + 1)}` +
53
+ casesPart +
54
+ wildcardPart +
55
+ `${indent_0})`);
32
56
  }
33
57
  /// @ts-ignore Return type annotation circularly references itself.
34
58
  clone() {
@@ -45,6 +69,7 @@ export class TirCaseExpr {
45
69
  }
46
70
  get isConstant() { return false; }
47
71
  toIR(ctx) {
72
+ // console.log( this.pretty(2) );
48
73
  const matchExprType = getUnaliased(this.matchExpr.type);
49
74
  if (matchExprType instanceof TirSoPStructType
50
75
  || matchExprType instanceof TirSopOptT)
@@ -52,6 +77,7 @@ export class TirCaseExpr {
52
77
  if (matchExprType instanceof TirDataStructType
53
78
  || matchExprType instanceof TirDataOptT)
54
79
  return this._dataStructToIR(matchExprType, ctx);
80
+ console.error(this);
55
81
  throw new Error("`case` expressions are only supported on Sum-of-Products or Data Struct types; got: "
56
82
  + this.matchExpr.type.toString());
57
83
  }
@@ -60,45 +86,53 @@ export class TirCaseExpr {
60
86
  const wildcardBodyIR = this.wildcardCase?.body.toIR(ctx) ?? new IRError();
61
87
  const someBranchCtx = ctx.newChild();
62
88
  const someBranch = this.cases.find(c => c.pattern.constrName === "Some");
89
+ let someBranchVarSym = Symbol("some_value_unused");
63
90
  if (someBranch) {
64
91
  const varDecl = someBranch.pattern.fields.values().next().value;
65
92
  if (!(varDecl instanceof TirSimpleVarDecl))
66
93
  throw new Error("case pattern not expressified.");
67
- someBranchCtx.defineVar(varDecl.name);
94
+ someBranchVarSym = someBranchCtx.defineVar(varDecl.name);
68
95
  }
69
96
  const someBranchIR = someBranch?.body.toIR(someBranchCtx) ?? wildcardBodyIR;
70
97
  const noneBranchIR = this.cases.find(c => c.pattern.constrName === "None")?.body.toIR(ctx) ?? wildcardBodyIR;
71
98
  return new IRCase(this.matchExpr.toIR(ctx), [
72
99
  // Some{ value }
73
- new IRFunc(1, someBranchIR),
100
+ new IRFunc([someBranchVarSym], someBranchIR),
74
101
  // None
75
102
  noneBranchIR
76
103
  ]);
77
104
  }
78
105
  // TirSopStructType
79
106
  const wildcardBodyIR = this.wildcardCase?.body.toIR(ctx) ?? new IRError();
80
- const branches = matchExprType.constructors.map(ctor => {
81
- const wrapBody = ctor.fields.length === 0
82
- ? (body) => body
83
- : (body) => new IRFunc(ctor.fields.length, body);
107
+ const branches = matchExprType.constructors.map((ctor, ctorIdx) => {
108
+ const nFields = ctor.fields.length;
84
109
  const branchCtx = ctx.newChild();
85
110
  const branch = this.cases.find(c => c.pattern.constrName === ctor.name);
86
- if (!branch)
87
- return wrapBody(wildcardBodyIR);
111
+ if (!branch) {
112
+ if (nFields <= 0)
113
+ return wildcardBodyIR;
114
+ const introducedVars = Array(nFields).fill(0).map(() => branchCtx.pushUnusedVar());
115
+ return new IRFunc(introducedVars, wildcardBodyIR);
116
+ }
88
117
  const pattern = branch.pattern;
89
- for (const field of ctor.fields) {
118
+ const introducedVars = new Array(nFields);
119
+ for (let i = 0; i < nFields; i++) {
120
+ const field = ctor.fields[i];
90
121
  const varDecl = pattern.fields.get(field.name);
91
122
  if (!varDecl) {
92
123
  // increment debrujin
93
124
  // variable is still introduced, even if unused
94
- branchCtx.pushUnusedVar();
125
+ introducedVars[i] = branchCtx.pushUnusedVar();
95
126
  continue;
96
127
  }
97
128
  if (!(varDecl instanceof TirSimpleVarDecl))
98
129
  throw new Error("case pattern not expressified.");
99
- branchCtx.defineVar(varDecl.name);
130
+ introducedVars[i] = branchCtx.defineVar(varDecl.name);
100
131
  }
101
- return wrapBody(branch.body.toIR(branchCtx));
132
+ // console.log( nFields, introducedVars, branchCtx.allVariables() );
133
+ if (nFields <= 0)
134
+ return branch.body.toIR(branchCtx);
135
+ return new IRFunc(introducedVars, branch.body.toIR(branchCtx));
102
136
  });
103
137
  // branches at the end that are supposed to "just fail"
104
138
  // can be omitted, as the CEK machine will fail if no branch for
@@ -107,46 +141,38 @@ export class TirCaseExpr {
107
141
  branches.pop();
108
142
  return branches.length > 0 ? new IRCase(this.matchExpr.toIR(ctx), branches) : new IRError(); // all branches fail, so the whole expression fails
109
143
  }
110
- // TODO: optimization
111
- // expect data-encoded patterns to be empty after `expressify`
112
- // because accessed field should use `IRLetted` instead
113
144
  _dataStructToIR(matchExprType, ctx) {
114
145
  if (matchExprType instanceof TirDataOptT) {
115
146
  const stmtCtx = ctx.newChild();
116
147
  stmtCtx.pushUnusedVar(); // debrujin un constr data result
117
148
  const wildcardBodyIR = this.wildcardCase?.body.toIR(stmtCtx) ?? new IRError();
118
- const someBranchCtx = stmtCtx.newChild();
119
149
  const someBranch = this.cases.find(c => c.pattern.constrName === "Some");
150
+ let someBranchIR = () => new IRFunc([Symbol("unused_some_value")], wildcardBodyIR);
120
151
  if (someBranch) {
121
- const varDecl = someBranch.pattern.fields.values().next().value;
122
- if (varDecl === undefined) {
123
- // increment debrujin
124
- // variable is still introduced, even if unused
125
- someBranchCtx.pushUnusedVar();
126
- }
127
- else {
128
- if (!(varDecl instanceof TirSimpleVarDecl))
129
- throw new Error("case pattern not expressified.");
130
- someBranchCtx.defineVar(varDecl.name);
131
- }
152
+ const pattern = someBranch.pattern;
153
+ const valueDecl = pattern.fields.get("value");
154
+ if (valueDecl
155
+ && !(valueDecl instanceof TirSimpleVarDecl))
156
+ throw new Error("case pattern not expressified.");
157
+ const someBranchCtx = stmtCtx.newChild();
158
+ const someBranchVarSym = valueDecl ? someBranchCtx.defineVar(valueDecl.name) : Symbol("some_value_unused");
159
+ someBranchIR = (unConstrMatchSym) => new IRApp(new IRFunc([someBranchVarSym], someBranch.body.toIR(someBranchCtx)), _inlineFromData(getOptTypeArg(matchExprType), _ir_apps(IRNative.sndPair, new IRVar(unConstrMatchSym) // unConstrData result
160
+ )));
132
161
  }
133
- const someBranchIR = someBranch?.body.toIR(someBranchCtx); // ?? wildcardBodyIR;
134
162
  const noneBranchIR = this.cases.find(c => c.pattern.constrName === "None")?.body.toIR(stmtCtx) ?? wildcardBodyIR;
135
- if (someBranchIR instanceof IRError && noneBranchIR instanceof IRError)
136
- return new IRError();
137
- return new IRForced(_ir_let(_ir_apps(IRNative.unConstrData, this.matchExpr.toIR(ctx)), _ir_apps(IRNative.strictIfThenElse, _ir_apps(IRNative.equalsInteger, IRConst.int(0), _ir_apps(IRNative.fstPair, new IRVar(0) // unConstrData result
163
+ return new IRForced(_ir_let(_ir_apps(IRNative.unConstrData, this.matchExpr.toIR(ctx)), unConstrMatchSym => _ir_lazyIfThenElse(
164
+ // condition
165
+ _ir_apps(IRNative.equalsInteger, IRConst.int(0), _ir_apps(IRNative.fstPair, new IRVar(unConstrMatchSym) // unConstrData result
138
166
  )),
139
167
  // then Just{ value }
140
- !someBranchIR ? new IRDelayed(wildcardBodyIR) :
141
- _ir_let(_inlineFromData(getOptTypeArg(matchExprType), _ir_apps(IRNative.sndPair, new IRVar(0) // unConstrData result
142
- )), new IRDelayed(someBranchIR)),
168
+ someBranchIR(unConstrMatchSym),
143
169
  // else None
144
- new IRDelayed(noneBranchIR))));
170
+ noneBranchIR)));
145
171
  }
146
172
  // TirDataStructType
147
173
  const stmtCtx = ctx.newChild();
148
- stmtCtx.pushUnusedVar(); // unconstrStruct
149
- stmtCtx.pushUnusedVar(); // isConstrIdx
174
+ const unConstrStructSym = stmtCtx.pushUnusedVar("unconstrStruct"); // unconstrStruct
175
+ const isConstrIdxSym = stmtCtx.pushUnusedVar("isConstrIdx"); // isConstrIdx
150
176
  const noVarsWildcardBodyIR = (this.wildcardCase?.body.toIR(stmtCtx)
151
177
  ?? new IRError());
152
178
  const delayedNoVarWildcardBodyIR = new IRDelayed(noVarsWildcardBodyIR);
@@ -167,12 +193,14 @@ export class TirCaseExpr {
167
193
  const usedFieldsCtorNames = (ctor.fields.map(f => f.name)
168
194
  .filter(fName => pattern.fields.has(fName)));
169
195
  if (usedFieldsCtorNames.length <= 0) {
170
- ifThenElseMatchingStatements = _ir_apps(IRNative.strictIfThenElse, _ir_apps(new IRVar(0), // isConstrIdx
196
+ ifThenElseMatchingStatements = _ir_lazyIfThenElse(
197
+ // condition
198
+ _ir_apps(new IRVar(isConstrIdxSym), // isConstrIdx
171
199
  IRConst.int(ctorIdx)),
172
200
  // then
173
- new IRDelayed(body.toIR(stmtCtx)),
201
+ body.toIR(stmtCtx),
174
202
  // else
175
- new IRDelayed(ifThenElseMatchingStatements));
203
+ ifThenElseMatchingStatements);
176
204
  continue;
177
205
  }
178
206
  function indexOfField(fieldName) {
@@ -187,45 +215,52 @@ export class TirCaseExpr {
187
215
  const patternVarDecl = pattern.fields.get(fName);
188
216
  if (!(patternVarDecl instanceof TirSimpleVarDecl))
189
217
  throw new Error("case pattern not expressified.");
190
- thenCtx.defineVar(patternVarDecl.name);
191
- const thenCase = _ir_let(_inlineFromData(patternVarDecl.type, _ir_apps(IRNative.headList, _ir_apps(IRNative._dropList, IRConst.int(indexOfField(fName)), // constr field index
218
+ const introVar = thenCtx.defineVar(patternVarDecl.name);
219
+ const thenCase = _ir_let_sym(introVar, _inlineFromData(patternVarDecl.type, _ir_apps(IRNative.headList, _ir_apps(IRNative._dropList, IRConst.int(indexOfField(fName)), // constr field index
192
220
  _ir_apps(// fileds as data list
193
- IRNative.sndPair, new IRVar(1) // uncostrStruct
221
+ IRNative.sndPair, new IRVar(unConstrStructSym) // unconstrStruct
194
222
  )))), body.toIR(thenCtx));
195
- ifThenElseMatchingStatements = _ir_apps(IRNative.strictIfThenElse, _ir_apps(new IRVar(0), // isConstrIdx
223
+ ifThenElseMatchingStatements = _ir_lazyIfThenElse(
224
+ // condition
225
+ _ir_apps(new IRVar(isConstrIdxSym), // isConstrIdx
196
226
  IRConst.int(ctorIdx)),
197
227
  // then
198
- new IRDelayed(thenCase),
228
+ thenCase,
199
229
  // else
200
- new IRDelayed(ifThenElseMatchingStatements));
230
+ ifThenElseMatchingStatements);
201
231
  continue;
202
- }
232
+ } // single field used edge case
203
233
  // multiple fields used
204
234
  const thenCtx = stmtCtx.newChild();
235
+ const fieldsAsDataList = thenCtx.pushUnusedVar(); // fileds as data list
205
236
  const sortedUsedFields = [...usedFieldsCtorNames].sort((a, b) => indexOfField(a) - indexOfField(b));
206
- for (const fName of sortedUsedFields) {
237
+ const introducedVars = new Array(sortedUsedFields.length);
238
+ for (let fIdx = 0; fIdx < sortedUsedFields.length; fIdx++) {
239
+ const fName = sortedUsedFields[fIdx];
207
240
  const patternVarDecl = pattern.fields.get(fName);
208
241
  if (!(patternVarDecl instanceof TirSimpleVarDecl))
209
242
  throw new Error("case pattern not expressified.");
210
- thenCtx.defineVar(patternVarDecl.name);
243
+ introducedVars[fIdx] = thenCtx.defineVar(patternVarDecl.name);
211
244
  }
212
245
  const extractedFields = sortedUsedFields.map(fName => _inlineFromData(ctor.fields.find(f => f.name === fName).type, _ir_apps(IRNative.headList, _ir_apps(IRNative._dropList, IRConst.int(indexOfField(fName)), // constr field index
213
- new IRVar(0) // fileds as data list
246
+ new IRVar(fieldsAsDataList) // fileds as data list
214
247
  ))));
215
- const thenCase = _ir_let(_ir_apps(IRNative.sndPair, new IRVar(1) // uncostrStruct
248
+ const thenCase = _ir_let_sym(fieldsAsDataList, _ir_apps(IRNative.sndPair, new IRVar(unConstrStructSym) // unconstrStruct
216
249
  ), // fileds as data list
217
- _ir_apps(new IRFunc(sortedUsedFields.length, body.toIR(thenCtx)), ...extractedFields));
218
- ifThenElseMatchingStatements = _ir_apps(IRNative.strictIfThenElse, _ir_apps(new IRVar(0), // isConstrIdx
250
+ _ir_apps(new IRFunc(introducedVars, body.toIR(thenCtx)), ...extractedFields));
251
+ ifThenElseMatchingStatements = _ir_lazyIfThenElse(
252
+ // condition
253
+ _ir_apps(new IRVar(isConstrIdxSym), // isConstrIdx
219
254
  IRConst.int(ctorIdx)),
220
255
  // then
221
- new IRDelayed(thenCase),
256
+ thenCase,
222
257
  // else
223
- new IRDelayed(ifThenElseMatchingStatements));
258
+ ifThenElseMatchingStatements);
224
259
  }
225
- return new IRForced(_ir_let(_ir_apps(IRNative.unConstrData, this.matchExpr.toIR(ctx)), // uncostrStruct
226
- _ir_let(_ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(0) // unConstrData result
260
+ return _ir_let_sym(unConstrStructSym, _ir_apps(IRNative.unConstrData, this.matchExpr.toIR(ctx)), // unconstrStruct
261
+ _ir_let_sym(isConstrIdxSym, _ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(unConstrStructSym) // unConstrData result
227
262
  )), // isConstrIdx
228
- ifThenElseMatchingStatements)));
263
+ ifThenElseMatchingStatements));
229
264
  }
230
265
  }
231
266
  export class TirCaseMatcher {
@@ -243,6 +278,11 @@ export class TirCaseMatcher {
243
278
  filterSortedStrArrInplace(deps, nonDeps);
244
279
  return deps;
245
280
  }
281
+ pretty(indent) {
282
+ const singleIndent = " ";
283
+ const indent_base = singleIndent.repeat(indent);
284
+ return `is ${this.pattern.pretty(indent)} => ${this.body.pretty(indent)}`;
285
+ }
246
286
  }
247
287
  export class TirWildcardCaseMatcher {
248
288
  body;
@@ -254,4 +294,9 @@ export class TirWildcardCaseMatcher {
254
294
  deps() {
255
295
  return this.body.deps();
256
296
  }
297
+ pretty(indent) {
298
+ const singleIndent = " ";
299
+ const indent_base = singleIndent.repeat(indent);
300
+ return `else ${this.body.pretty(indent)}`;
301
+ }
257
302
  }
@@ -13,7 +13,9 @@ export declare class TirElemAccessExpr implements ITirExpr {
13
13
  readonly type: TirType;
14
14
  readonly range: SourceRange;
15
15
  constructor(arrLikeExpr: TirExpr, indexExpr: TirExpr, type: TirType, range: SourceRange);
16
- clone(): TirElemAccessExpr;
16
+ toString(): string;
17
+ pretty(indent: number): string;
18
+ clone(): TirExpr;
17
19
  deps(): string[];
18
20
  get isConstant(): boolean;
19
21
  toIR(ctx: ToIRTermCtx): IRTerm;
@@ -2,8 +2,8 @@ import { CEKConst, Machine } from "@harmoniclabs/plutus-machine";
2
2
  import { IRConst } from "../../../IR/IRNodes/IRConst.js";
3
3
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
4
4
  import { mergeSortedStrArrInplace } from "../../../utils/array/mergeSortedStrArrInplace.js";
5
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
6
5
  import { compileIRToUPLC } from "../../../IR/toUPLC/compileIRToUPLC.js";
6
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
7
7
  /**
8
8
  * `arrLikeExpr[ indexExpr ]`
9
9
  */
@@ -18,6 +18,14 @@ export class TirElemAccessExpr {
18
18
  this.type = type;
19
19
  this.range = range;
20
20
  }
21
+ toString() {
22
+ return `${this.arrLikeExpr.toString()}[ ${this.indexExpr.toString()} ]`;
23
+ }
24
+ pretty(indent) {
25
+ const singleIndent = " ";
26
+ const indent_base = singleIndent.repeat(indent);
27
+ return `${this.arrLikeExpr.pretty(indent)}[ ${this.indexExpr.pretty(indent)} ]`;
28
+ }
21
29
  clone() {
22
30
  return new TirElemAccessExpr(this.arrLikeExpr.clone(), this.indexExpr.clone(), this.type.clone(), this.range.clone());
23
31
  }
@@ -12,7 +12,9 @@ export declare class TirFailExpr implements ITirExpr {
12
12
  constructor(
13
13
  /** must be string (or utf8 bytes) */
14
14
  failMsgExpr: TirExpr | undefined, type: TirType, range: SourceRange);
15
- clone(): TirFailExpr;
15
+ toString(): string;
16
+ pretty(indent: number): string;
17
+ clone(): TirExpr;
16
18
  deps(): string[];
17
19
  get isConstant(): boolean;
18
20
  toIR(ctx: ToIRTermCtx): IRTerm;
@@ -1,6 +1,6 @@
1
+ import { _ir_apps } from "../../../IR/IRNodes/IRApp.js";
1
2
  import { IRError } from "../../../IR/IRNodes/IRError.js";
2
3
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
3
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
4
4
  export class TirFailExpr {
5
5
  failMsgExpr;
6
6
  type;
@@ -12,6 +12,14 @@ export class TirFailExpr {
12
12
  this.type = type;
13
13
  this.range = range;
14
14
  }
15
+ toString() {
16
+ return `(fail${this.failMsgExpr ? ` ${this.failMsgExpr.toString()}` : ""})`;
17
+ }
18
+ pretty(indent) {
19
+ const singleIndent = " ";
20
+ const indent_base = singleIndent.repeat(indent);
21
+ return `(fail${this.failMsgExpr ? ` ${this.failMsgExpr.pretty(indent)}` : ""})`;
22
+ }
15
23
  clone() {
16
24
  return new TirFailExpr(this.failMsgExpr?.clone(), this.type.clone(), this.range.clone());
17
25
  }
@@ -10,11 +10,12 @@ export declare class TirFromDataExpr implements ITirExpr {
10
10
  readonly type: TirType;
11
11
  readonly range: SourceRange;
12
12
  constructor(dataExpr: TirExpr, type: TirType, range: SourceRange);
13
- clone(): TirFromDataExpr;
13
+ toString(): string;
14
+ pretty(indent: number): string;
15
+ clone(): TirExpr;
14
16
  get isConstant(): boolean;
15
17
  deps(): string[];
16
18
  toIR(ctx: ToIRTermCtx): IRTerm;
17
- toString(): string;
18
19
  }
19
20
  export declare function _inlineFromData(target_t: TirType, dataExprIR: IRTerm): IRTerm;
20
21
  export declare function _fromDataUplcFunc(_target_t: TirType): IRTerm;