@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,4 +1,4 @@
1
- import { IRApp } from "../../../IR/IRNodes/IRApp.js";
1
+ import { _ir_apps, IRApp } from "../../../IR/IRNodes/IRApp.js";
2
2
  import { IRConst } from "../../../IR/IRNodes/IRConst.js";
3
3
  import { IRConstr } from "../../../IR/IRNodes/IRConstr.js";
4
4
  import { IRDelayed } from "../../../IR/IRNodes/IRDelayed.js";
@@ -7,7 +7,6 @@ import { IRFunc } from "../../../IR/IRNodes/IRFunc.js";
7
7
  import { IRHoisted } from "../../../IR/IRNodes/IRHoisted.js";
8
8
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
9
9
  import { IRVar } from "../../../IR/IRNodes/IRVar.js";
10
- import { _ir_apps } from "../../../IR/tree_utils/_ir_apps.js";
11
10
  import { _ir_let } from "../../../IR/tree_utils/_ir_let.js";
12
11
  import { TirBoolT } from "../types/TirNativeType/native/bool.js";
13
12
  import { TirBytesT } from "../types/TirNativeType/native/bytes.js";
@@ -33,6 +32,14 @@ export class TirFromDataExpr {
33
32
  this.type = type;
34
33
  this.range = range;
35
34
  }
35
+ toString() {
36
+ return `fromData<${this.type.toString()}>(${this.dataExpr.toString()})`;
37
+ }
38
+ pretty(indent) {
39
+ const singleIndent = " ";
40
+ const indent_base = singleIndent.repeat(indent);
41
+ return `fromData<${this.type.toString()}>(${this.dataExpr.pretty(indent)})`;
42
+ }
36
43
  clone() {
37
44
  return new TirFromDataExpr(this.dataExpr.clone(), this.type.clone(), this.range.clone());
38
45
  }
@@ -43,9 +50,6 @@ export class TirFromDataExpr {
43
50
  toIR(ctx) {
44
51
  return _inlineFromData(this.type, this.dataExpr.toIR(ctx));
45
52
  }
46
- toString() {
47
- return `fromData(${this.dataExpr.toString()}) as ${this.type.toString()}`;
48
- }
49
53
  }
50
54
  export function _inlineFromData(target_t, dataExprIR) {
51
55
  const to_t = getUnaliased(target_t);
@@ -74,11 +78,11 @@ export function _inlineFromData(target_t, dataExprIR) {
74
78
  if (!isTirType(value_t))
75
79
  throw new Error("TirFromDataExpr: unreachable");
76
80
  return _ir_let(// introuduce a var
77
- _ir_apps(IRNative.unConstrData, dataExprIR), _ir_apps(IRNative.strictIfThenElse, _ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(0) // unConstrData result
81
+ _ir_apps(IRNative.unConstrData, dataExprIR), unConstrDataResultSym => _ir_apps(IRNative.strictIfThenElse, _ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(unConstrDataResultSym) // unConstrData result
78
82
  ), IRConst.int(0)),
79
83
  // then (Just value)
80
84
  new IRConstr(0, [
81
- _ir_apps(_fromDataUplcFunc(value_t), _ir_apps(IRNative.headList, _ir_apps(IRNative.sndPair, new IRVar(0) // unConstrData result
85
+ _ir_apps(_fromDataUplcFunc(value_t), _ir_apps(IRNative.headList, _ir_apps(IRNative.sndPair, new IRVar(unConstrDataResultSym) // unConstrData result
82
86
  )))
83
87
  ]),
84
88
  // else (Nothing)
@@ -101,11 +105,11 @@ export function _fromDataUplcFunc(_target_t) {
101
105
  if (target_t instanceof TirBytesT)
102
106
  return IRNative.unBData;
103
107
  if (target_t instanceof TirVoidT)
104
- return _mkUnit;
108
+ return _mkUnit.clone();
105
109
  if (target_t instanceof TirBoolT)
106
- return _boolFromData;
110
+ return _boolFromData.clone();
107
111
  if (target_t instanceof TirStringT)
108
- return _strFromData;
112
+ return _strFromData.clone();
109
113
  if (target_t instanceof TirLinearMapT)
110
114
  // linear maps only have pairs as elements
111
115
  // and we only support pairs of data (bc we only have `mkPairData`)
@@ -116,23 +120,23 @@ export function _fromDataUplcFunc(_target_t) {
116
120
  || elems_t instanceof TirDataOptT
117
121
  || elems_t instanceof TirDataT)
118
122
  return IRNative.unListData;
119
- return new IRHoisted(new IRFunc(1, // data ( representing list )
120
- _ir_apps(IRNative._mkMapList, IRConst.listOf(elems_t)([]), _fromDataUplcFunc(elems_t), _ir_apps(IRNative.unListData, new IRVar(0) // data
121
- ))));
123
+ return mkMapListFromData(elems_t);
122
124
  }
123
125
  if (target_t instanceof TirSopOptT
124
126
  || target_t instanceof TirSoPStructType) {
125
- return new IRHoisted(new IRFunc(1, // data
126
- _inlineFromData(target_t, new IRVar(0) // data
127
- )));
127
+ return mkSopFromData(target_t);
128
128
  }
129
129
  throw new Error(`TirFromDataExpr: cannot convert from Data to type ${target_t.toString()}`);
130
130
  }
131
- const _mkUnit = new IRHoisted(new IRFunc(1, IRConst.unit, "~_mkUnit"));
132
- const _boolFromData = new IRHoisted(new IRFunc(1, _ir_apps(IRNative.equalsInteger, new IRApp(IRNative.fstPair, new IRApp(IRNative.unConstrData, new IRVar(0))), IRConst.int(0))));
133
- const _strFromData = new IRHoisted(new IRFunc(1, // data
134
- _ir_apps(IRNative.decodeUtf8, _ir_apps(IRNative.unBData, new IRVar(0) // data
135
- ))));
131
+ // replace old numeric-arity helpers
132
+ const _unitFromDataSym = Symbol("unit");
133
+ const _mkUnit = new IRHoisted(new IRFunc([_unitFromDataSym], IRConst.unit));
134
+ const _boolFromDataDataSym = Symbol("boolData");
135
+ const _boolFromData = new IRHoisted(new IRFunc([_boolFromDataDataSym], // data
136
+ _ir_apps(IRNative.equalsInteger, new IRApp(IRNative.fstPair, new IRApp(IRNative.unConstrData, new IRVar(_boolFromDataDataSym))), IRConst.int(0))));
137
+ const _strFromDataDataSym = Symbol("strData");
138
+ const _strFromData = new IRHoisted(new IRFunc([_strFromDataDataSym], // data
139
+ _ir_apps(IRNative.decodeUtf8, _ir_apps(IRNative.unBData, new IRVar(_strFromDataDataSym)))));
136
140
  export function _inilneSingeSopConstrFromData(sop_t, dataExprIR) {
137
141
  if (sop_t.constructors.length !== 1)
138
142
  throw new Error("_inilneSingeSopConstrFromData: multiple constructors");
@@ -149,48 +153,73 @@ export function _inilneSingeSopConstrFromData(sop_t, dataExprIR) {
149
153
  _ir_apps(IRNative.headList, _ir_apps(IRNative.sndPair, _ir_apps(IRNative.unConstrData, dataExprIR))))
150
154
  ]);
151
155
  }
152
- return _ir_let(_ir_apps(IRNative.sndPair, _ir_apps(IRNative.unConstrData, dataExprIR)), // introuduce fields list
153
- new IRConstr(0, constr.fields.map((field, i) => {
156
+ return _ir_let(_ir_apps(IRNative.sndPair, _ir_apps(IRNative.unConstrData, dataExprIR)), // introduce fields list
157
+ // introduce fields list
158
+ fieldsListSym => new IRConstr(0, constr.fields.map((field, i) => {
154
159
  const field_t = getUnaliased(field.type);
155
160
  if (!isTirType(field_t))
156
161
  throw new Error("TirFromDataExpr: unreachable");
157
- return _inlineFromData(field_t, _ir_apps(IRNative.headList, i === 0 ? new IRVar(0) // fields list
158
- : _ir_apps(IRNative._dropList, IRConst.int(i), new IRVar(0) // fields list
159
- )));
162
+ return _inlineFromData(field_t, _ir_apps(IRNative.headList, i === 0
163
+ ? new IRVar(fieldsListSym)
164
+ : _ir_apps(IRNative._dropList, IRConst.int(i), new IRVar(fieldsListSym))));
160
165
  })));
161
166
  }
162
167
  export function _inlineMultiSopConstrFromData(sop_t, dataExprIR) {
163
168
  if (sop_t.constructors.length <= 1)
164
169
  return _inilneSingeSopConstrFromData(sop_t, dataExprIR);
165
- const continuations = sop_t.constructors.map((constr, constrIdx) => {
166
- if (constr.fields.length === 0)
167
- return new IRHoisted(new IRConstr(constrIdx, []));
168
- if (constr.fields.length === 1) {
169
- const value_t = getUnaliased(constr.fields[0].type);
170
- if (!isTirType(value_t))
171
- throw new Error("TirFromDataExpr: unreachable");
172
- return new IRConstr(constrIdx, [
173
- _inlineFromData(value_t, _ir_apps(IRNative.headList, new IRVar(0) // fields list
174
- ))
175
- ]);
170
+ return _ir_let(_ir_apps(IRNative.unConstrData, dataExprIR), // introduce unConstrData result
171
+ // introduce unConstrData result
172
+ unConstrDataSym => _ir_let(_ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(unConstrDataSym))), // introduce isConstrIdx predicate (a function expecting an int)
173
+ // introduce isConstrIdx predicate (a function expecting an int)
174
+ isConstrIdxSym => _ir_let(_ir_apps(IRNative.sndPair, new IRVar(unConstrDataSym)), // introduce fields list
175
+ // introduce fields list
176
+ fieldsListSym => {
177
+ const continuations = sop_t.constructors.map((constr, constrIdx) => {
178
+ if (constr.fields.length === 0)
179
+ return new IRHoisted(new IRConstr(constrIdx, []));
180
+ if (constr.fields.length === 1) {
181
+ const value_t = getUnaliased(constr.fields[0].type);
182
+ if (!isTirType(value_t))
183
+ throw new Error("TirFromDataExpr: unreachable");
184
+ return new IRConstr(constrIdx, [
185
+ _inlineFromData(value_t, _ir_apps(IRNative.headList, new IRVar(fieldsListSym)))
186
+ ]);
187
+ }
188
+ return new IRConstr(constrIdx, constr.fields.map((field, i) => {
189
+ const field_t = getUnaliased(field.type);
190
+ if (!isTirType(field_t))
191
+ throw new Error("TirFromDataExpr: unreachable");
192
+ return _inlineFromData(field_t, _ir_apps(IRNative.headList, i === 0
193
+ ? new IRVar(fieldsListSym)
194
+ : _ir_apps(IRNative._dropList, IRConst.int(i), new IRVar(fieldsListSym))));
195
+ }));
196
+ });
197
+ let finalIfThenElseChain = continuations[continuations.length - 1];
198
+ for (let i = continuations.length - 2; i >= 0; i--) {
199
+ finalIfThenElseChain = new IRForced(_ir_apps(IRNative.strictIfThenElse, _ir_apps(new IRVar(isConstrIdxSym), IRConst.int(i)), new IRDelayed(continuations[i]), new IRDelayed(finalIfThenElseChain)));
176
200
  }
177
- return new IRConstr(constrIdx, constr.fields.map((field, i) => {
178
- const field_t = getUnaliased(field.type);
179
- if (!isTirType(field_t))
180
- throw new Error("TirFromDataExpr: unreachable");
181
- return _inlineFromData(field_t, _ir_apps(IRNative.headList, i === 0 ? new IRVar(0) // fields list
182
- : _ir_apps(IRNative._dropList, IRConst.int(i), new IRVar(0) // fields list
183
- )));
184
- }));
185
- });
186
- let finalIfThenElseChain = continuations[continuations.length - 1];
187
- for (let i = continuations.length - 2; i >= 0; i--) {
188
- finalIfThenElseChain = new IRForced(_ir_apps(IRNative.strictIfThenElse, _ir_apps(new IRVar(1), // isConstrIdx
189
- IRConst.int(i)), new IRDelayed(continuations[i]), new IRDelayed(finalIfThenElseChain)));
190
- }
191
- return _ir_let(_ir_apps(IRNative.unConstrData, dataExprIR), // unConstrData result
192
- _ir_let(_ir_apps(IRNative.equalsInteger, _ir_apps(IRNative.fstPair, new IRVar(0) // unConstrData result
193
- )), // isConstrIdx
194
- _ir_let(_ir_apps(IRNative.sndPair, new IRVar(1)), // fields list
195
- finalIfThenElseChain)));
201
+ return finalIfThenElseChain;
202
+ })));
203
+ }
204
+ // new cached hoisted helpers (mirroring TirToDataExpr pattern)
205
+ const _mapListFromDataOfType = {};
206
+ function mkMapListFromData(elems_t) {
207
+ const key = elems_t.toTirTypeKey();
208
+ if (_mapListFromDataOfType[key])
209
+ return _mapListFromDataOfType[key].clone();
210
+ const listDataSym = Symbol("mapListFromData_data");
211
+ _mapListFromDataOfType[key] = new IRHoisted(new IRFunc([listDataSym], // data (list data)
212
+ _ir_apps(IRNative._mkMapList, IRConst.listOf(elems_t)([]), _fromDataUplcFunc(elems_t), _ir_apps(IRNative.unListData, new IRVar(listDataSym) // data
213
+ ))));
214
+ return _mapListFromDataOfType[key].clone();
215
+ }
216
+ const _sopFromDataOfType = {};
217
+ function mkSopFromData(target_t) {
218
+ const key = target_t.toTirTypeKey();
219
+ if (_sopFromDataOfType[key])
220
+ return _sopFromDataOfType[key].clone();
221
+ const dataSym = Symbol("sop_data");
222
+ _sopFromDataOfType[key] = new IRHoisted(new IRFunc([dataSym], // data
223
+ _inlineFromData(target_t, new IRVar(dataSym))));
224
+ return _sopFromDataOfType[key].clone();
196
225
  }
@@ -6,6 +6,7 @@ import { TirBlockStmt } from "../statements/TirBlockStmt.js";
6
6
  import { ToIRTermCtx } from "./ToIRTermCtx.js";
7
7
  import { TirFuncT } from "../types/TirNativeType/native/function.js";
8
8
  import { IRTerm } from "../../../IR/IRTerm.js";
9
+ import type { TirExpr } from "./TirExpr.js";
9
10
  export declare class TirFuncExpr implements ITirExpr {
10
11
  readonly name: string;
11
12
  readonly params: TirSimpleVarDecl[];
@@ -16,16 +17,9 @@ export declare class TirFuncExpr implements ITirExpr {
16
17
  get type(): TirFuncT;
17
18
  sig(): TirFuncT;
18
19
  constructor(name: string, params: TirSimpleVarDecl[], returnType: TirType, body: TirBlockStmt, range: SourceRange, _isLoop?: boolean);
19
- clone(): TirFuncExpr;
20
- /**
21
- * `true` if the function is guaranteed to never error
22
- */
23
- readonly isSafe: boolean;
24
- /**
25
- * `true` if, for all cases where the function can error,
26
- * there is an alternative implementation that is safe (wrapping the result as `Optional`)
27
- */
28
- readonly isRecoverable: boolean;
20
+ toString(): string;
21
+ pretty(indent?: number): string;
22
+ clone(): TirExpr;
29
23
  isAnonymous(): boolean;
30
24
  private _deps;
31
25
  private _defineDeps;
@@ -33,18 +33,34 @@ export class TirFuncExpr {
33
33
  this.range = range;
34
34
  this._isLoop = _isLoop;
35
35
  }
36
+ toString() {
37
+ return (`function ${this.name}` +
38
+ `( ${this.params.map(p => p.toString()).join(", ")} )` +
39
+ `: ${this.returnType.toString()} ` +
40
+ `${this.body.toString()}`);
41
+ }
42
+ pretty(indent = 1) {
43
+ const singleIndent = " ";
44
+ const indent_base = singleIndent.repeat(indent);
45
+ const indent_0 = "\n" + indent_base;
46
+ const indent_1 = indent_0 + singleIndent;
47
+ return (`function ${this.name}(` +
48
+ indent_1 + this.params.map(p => p.pretty(indent + 1)).join(`,${indent_1}`) +
49
+ `${indent_0}): ${this.returnType.toString()} ` +
50
+ this.body.pretty(indent));
51
+ }
36
52
  clone() {
37
53
  return new TirFuncExpr(this.name, this.params.slice(), this.returnType.clone(), this.body, this.range.clone(), this._isLoop);
38
54
  }
39
- /**
40
- * `true` if the function is guaranteed to never error
41
- */
42
- isSafe = false;
43
- /**
44
- * `true` if, for all cases where the function can error,
45
- * there is an alternative implementation that is safe (wrapping the result as `Optional`)
46
- */
47
- isRecoverable = false;
55
+ // / **
56
+ // * `true` if the function is guaranteed to never error
57
+ // * /
58
+ // readonly isSafe: boolean = false;
59
+ // / **
60
+ // * `true` if, for all cases where the function can error,
61
+ // * there is an alternative implementation that is safe (wrapping the result as `Optional`)
62
+ // * /
63
+ // readonly isRecoverable: boolean = false;
48
64
  isAnonymous() {
49
65
  return this.name === "";
50
66
  }
@@ -81,12 +97,13 @@ export class TirFuncExpr {
81
97
  const expr = returnStmt.value;
82
98
  const isRecursive = this.isRecursive();
83
99
  ctx = ctx.newChild();
100
+ let recursiveVarSym = undefined;
84
101
  if (isRecursive)
85
- ctx.defineRecursiveVar(this.name);
86
- this.params.forEach(param => ctx.defineVar(param.name));
87
- let irFunc = new IRFunc(this.params.length, expr.toIR(ctx), this.name);
102
+ recursiveVarSym = ctx.defineRecursiveVar(this.name);
103
+ const introuducedVars = this.params.map(param => ctx.defineVar(param.name));
104
+ let irFunc = new IRFunc(introuducedVars, expr.toIR(ctx));
88
105
  if (isRecursive)
89
- irFunc = new IRRecursive(irFunc, this.name);
106
+ irFunc = new IRRecursive(recursiveVarSym, irFunc);
90
107
  return irFunc;
91
108
  }
92
109
  }
@@ -10,7 +10,9 @@ export declare class TirHoistedExpr implements ITirExpr {
10
10
  get type(): TirType;
11
11
  get range(): SourceRange;
12
12
  constructor(varName: string, expr: TirExpr);
13
- clone(): TirHoistedExpr;
13
+ toString(): string;
14
+ pretty(indent: number): string;
15
+ clone(): TirExpr;
14
16
  deps(): string[];
15
17
  unsafeClone(): TirHoistedExpr;
16
18
  get isConstant(): boolean;
@@ -12,6 +12,14 @@ export class TirHoistedExpr {
12
12
  this.varName = varName;
13
13
  this.expr = expr;
14
14
  }
15
+ toString() {
16
+ return `/*hoisted '${this.varName}'*/(${this.expr.toString()})`;
17
+ }
18
+ pretty(indent) {
19
+ const singleIndent = " ";
20
+ const indent_base = singleIndent.repeat(indent);
21
+ return `/*hoisted '${this.varName}'*/(${this.expr.pretty(indent)})`;
22
+ }
15
23
  clone() {
16
24
  return new TirHoistedExpr(this.varName, this.expr.clone());
17
25
  }
@@ -2,6 +2,7 @@ import { SourceRange } from "../../../ast/Source/SourceRange.js";
2
2
  import type { IRTerm } from "../../../IR/IRTerm.js";
3
3
  import { TirFuncT } from "../types/TirNativeType/index.js";
4
4
  import { ITirExpr } from "./ITirExpr.js";
5
+ import { TirExpr } from "./TirExpr.js";
5
6
  import { ToIRTermCtx } from "./ToIRTermCtx.js";
6
7
  export declare class TirInlineClosedIR implements ITirExpr {
7
8
  readonly type: TirFuncT;
@@ -9,8 +10,10 @@ export declare class TirInlineClosedIR implements ITirExpr {
9
10
  readonly range: SourceRange;
10
11
  sig(): TirFuncT;
11
12
  constructor(type: TirFuncT, getIr: (ctx: ToIRTermCtx) => IRTerm, range: SourceRange);
13
+ toString(): string;
14
+ pretty(indent: number): string;
12
15
  get isConstant(): boolean;
13
- clone(): ITirExpr;
16
+ clone(): TirExpr;
14
17
  deps(): string[];
15
18
  toIR(ctx: ToIRTermCtx): IRTerm;
16
19
  }
@@ -11,6 +11,14 @@ export class TirInlineClosedIR {
11
11
  this.getIr = getIr;
12
12
  this.range = range;
13
13
  }
14
+ toString() {
15
+ return `<closed IR> as ${this.type.toString()}`;
16
+ }
17
+ pretty(indent) {
18
+ const singleIndent = " ";
19
+ const indent_base = singleIndent.repeat(indent);
20
+ return `<closed IR> as ${this.type.toString()}`;
21
+ }
14
22
  get isConstant() { return true; }
15
23
  clone() {
16
24
  return new TirInlineClosedIR(this.type.clone(), this.getIr, this.range.clone());
@@ -8,11 +8,14 @@ export declare class TirLettedExpr implements ITirExpr {
8
8
  readonly varName: string;
9
9
  expr: TirExpr;
10
10
  readonly range: SourceRange;
11
+ private _creationStack;
11
12
  get type(): TirType;
12
- constructor(varName: string, expr: TirExpr, range: SourceRange);
13
+ private readonly _irVarSym;
14
+ constructor(varName: string, expr: TirExpr, range: SourceRange, _unsafeVarSym?: symbol | undefined, _creationStack?: string | undefined);
15
+ toString(): string;
16
+ pretty(indent: number): string;
13
17
  deps(): string[];
14
- clone(): TirLettedExpr;
15
- unsafeClone(): TirLettedExpr;
18
+ clone(): TirExpr;
16
19
  get isConstant(): boolean;
17
20
  toIR(ctx: ToIRTermCtx): IRTerm;
18
21
  }
@@ -3,26 +3,39 @@ export class TirLettedExpr {
3
3
  varName;
4
4
  expr;
5
5
  range;
6
+ _creationStack = undefined;
6
7
  get type() {
7
8
  return this.expr.type;
8
9
  }
9
- constructor(varName, expr, range) {
10
+ _irVarSym;
11
+ constructor(varName, expr, range, _unsafeVarSym, _creationStack) {
10
12
  this.varName = varName;
11
13
  this.expr = expr;
12
14
  this.range = range;
15
+ if (!(typeof varName === "string"
16
+ && varName.length > 0))
17
+ throw new Error("TirLettedExpr: varName must be a non empty string");
18
+ this._creationStack = _creationStack ?? (new Error()).stack;
19
+ this._irVarSym = (typeof _unsafeVarSym === "symbol"
20
+ && _unsafeVarSym.description === varName) ? _unsafeVarSym : Symbol(varName);
21
+ }
22
+ toString() {
23
+ return `/*letted '${this.varName}'*/(${this.expr.toString()})`;
24
+ }
25
+ pretty(indent) {
26
+ const singleIndent = " ";
27
+ const indent_base = singleIndent.repeat(indent);
28
+ const indent_0 = "\n" + indent_base;
29
+ return `/*letted '${this.varName}'*/(${indent_0}${this.expr.pretty(indent)}${indent_0})`;
13
30
  }
14
31
  deps() {
15
32
  return this.expr.deps();
16
33
  }
17
34
  clone() {
18
- return new TirLettedExpr(this.varName, this.expr.clone(), this.range.clone());
19
- }
20
- unsafeClone() {
21
- return new TirLettedExpr(this.varName, this.expr, // this.expr.clone(),
22
- this.range);
35
+ return new TirLettedExpr(this.varName, this.expr.clone(), this.range.clone(), this._irVarSym, this._creationStack);
23
36
  }
24
37
  get isConstant() { return this.expr.isConstant; }
25
38
  toIR(ctx) {
26
- return new IRLetted(ctx.dbn, this.expr.toIR(ctx));
39
+ return new IRLetted(this._irVarSym, this.expr.toIR(ctx));
27
40
  }
28
41
  }
@@ -5,12 +5,16 @@ import type { IRTerm } from "../../../IR/IRTerm.js";
5
5
  import { TirType } from "../types/TirType.js";
6
6
  import { ToIRTermCtx } from "./ToIRTermCtx.js";
7
7
  import { TirFuncT } from "../types/TirNativeType/native/function.js";
8
+ import { TirHoistedExpr } from "./TirHoistedExpr.js";
9
+ import { TirExpr } from "./TirExpr.js";
8
10
  export declare class TirNativeFunc implements ITirExpr {
9
11
  readonly tag: IRNativeTag;
10
12
  readonly type: TirFuncT;
11
13
  constructor(tag: IRNativeTag, type: TirFuncT);
14
+ toString(): string;
15
+ pretty(indent: number): string;
12
16
  toIR(ctx: ToIRTermCtx): IRTerm;
13
- clone(): TirNativeFunc;
17
+ clone(): TirExpr;
14
18
  get range(): SourceRange;
15
19
  deps(): string[];
16
20
  get isConstant(): boolean;
@@ -81,6 +85,7 @@ export declare class TirNativeFunc implements ITirExpr {
81
85
  static _foldr(elemT: TirType, returnT: TirType): TirNativeFunc;
82
86
  static _foldl(elemT: TirType, returnT: TirType): TirNativeFunc;
83
87
  static _mkFindDataOptional(elems_t: TirType): TirNativeFunc;
88
+ static _findSopOptional(elems_t: TirType): TirNativeFunc;
84
89
  static _length(elemT: TirType): TirNativeFunc;
85
90
  static _some(elemT: TirType): TirNativeFunc;
86
91
  static _every(elemT: TirType): TirNativeFunc;
@@ -88,9 +93,7 @@ export declare class TirNativeFunc implements ITirExpr {
88
93
  static _id(t: TirType): TirNativeFunc;
89
94
  static get _not(): TirNativeFunc;
90
95
  static get _strictAnd(): TirNativeFunc;
91
- static get _and(): TirNativeFunc;
92
96
  static get _strictOr(): TirNativeFunc;
93
- static get _or(): TirNativeFunc;
94
97
  static get _gtBS(): TirNativeFunc;
95
98
  static get _gtEqBS(): TirNativeFunc;
96
99
  static get _gtInt(): TirNativeFunc;
@@ -98,7 +101,8 @@ export declare class TirNativeFunc implements ITirExpr {
98
101
  static get _pairDataToData(): TirNativeFunc;
99
102
  static get _pairDataFromData(): TirNativeFunc;
100
103
  static _mkEqualsList(elemT: TirType): TirNativeFunc;
101
- static get _equalPairData(): TirNativeFunc;
102
- static get _equalBoolean(): TirNativeFunc;
104
+ static get _equalPairData(): TirHoistedExpr;
105
+ static get _equalBoolean(): TirHoistedExpr;
106
+ static _equals(t: TirType): TirExpr;
103
107
  static get _negateInt(): TirNativeFunc;
104
108
  }
@@ -2,11 +2,16 @@ import { SourceRange } from "../../../ast/Source/SourceRange.js";
2
2
  import { IRNativeTag } from "../../../IR/IRNodes/IRNative/IRNativeTag.js";
3
3
  import { IRNative } from "../../../IR/IRNodes/IRNative/index.js";
4
4
  import { bool_t, bytes_t, data_t, int_t, void_t } from "../program/stdScope/stdScope.js";
5
- import { TirUnConstrDataResultT, TirPairDataT } from "../types/TirNativeType/index.js";
5
+ import { TirUnConstrDataResultT, TirPairDataT, TirIntT, TirBytesT, TirDataT, TirBoolT, TirSopOptT } from "../types/TirNativeType/index.js";
6
6
  import { TirFuncT } from "../types/TirNativeType/native/function.js";
7
7
  import { TirLinearMapT } from "../types/TirNativeType/native/linearMap.js";
8
8
  import { TirListT } from "../types/TirNativeType/native/list.js";
9
9
  import { TirDataOptT } from "../types/TirNativeType/native/Optional/data.js";
10
+ import { TirDataStructType } from "../types/TirStructType.js";
11
+ import { getUnaliased } from "../types/utils/getUnaliased.js";
12
+ import { getListTypeArg } from "../types/utils/getListTypeArg.js";
13
+ import { TirHoistedExpr } from "./TirHoistedExpr.js";
14
+ import { TirCallExpr } from "./TirCallExpr.js";
10
15
  export class TirNativeFunc {
11
16
  tag;
12
17
  type;
@@ -14,6 +19,14 @@ export class TirNativeFunc {
14
19
  this.tag = tag;
15
20
  this.type = type;
16
21
  }
22
+ toString() {
23
+ return `<native ${IRNativeTag[this.tag]}>`;
24
+ }
25
+ pretty(indent) {
26
+ const singleIndent = " ";
27
+ const indent_base = singleIndent.repeat(indent);
28
+ return `<native ${IRNativeTag[this.tag]}>`;
29
+ }
17
30
  toIR(ctx) {
18
31
  return new IRNative(this.tag);
19
32
  }
@@ -660,6 +673,14 @@ export class TirNativeFunc {
660
673
  new TirListT(elems_t)
661
674
  ], new TirDataOptT(elems_t)));
662
675
  }
676
+ static _findSopOptional(elems_t) {
677
+ return new TirNativeFunc(IRNativeTag._findSopOptional, new TirFuncT([
678
+ // predicate: (elemT) => bool
679
+ new TirFuncT([elems_t], bool_t),
680
+ // list<elemT>
681
+ new TirListT(elems_t)
682
+ ], new TirSopOptT(elems_t)));
683
+ }
663
684
  static _length(elemT) {
664
685
  return new TirNativeFunc(IRNativeTag._length, new TirFuncT([
665
686
  // list
@@ -668,11 +689,9 @@ export class TirNativeFunc {
668
689
  }
669
690
  static _some(elemT) {
670
691
  return new TirNativeFunc(IRNativeTag._some, new TirFuncT([
671
- // predicate
672
- new TirFuncT([
673
- elemT
674
- ], bool_t),
675
- // list
692
+ // predicate ((elemT) => bool)
693
+ new TirFuncT([elemT], bool_t),
694
+ // list<elemT>
676
695
  new TirListT(elemT)
677
696
  ], bool_t));
678
697
  }
@@ -713,24 +732,12 @@ export class TirNativeFunc {
713
732
  bool_t
714
733
  ], bool_t));
715
734
  }
716
- static get _and() {
717
- return new TirNativeFunc(IRNativeTag._and, new TirFuncT([
718
- bool_t,
719
- bool_t
720
- ], bool_t));
721
- }
722
735
  static get _strictOr() {
723
736
  return new TirNativeFunc(IRNativeTag._strictOr, new TirFuncT([
724
737
  bool_t,
725
738
  bool_t
726
739
  ], bool_t));
727
740
  }
728
- static get _or() {
729
- return new TirNativeFunc(IRNativeTag._or, new TirFuncT([
730
- bool_t,
731
- bool_t
732
- ], bool_t));
733
- }
734
741
  static get _gtBS() {
735
742
  return new TirNativeFunc(IRNativeTag._gtBS, new TirFuncT([
736
743
  bytes_t,
@@ -781,20 +788,49 @@ export class TirNativeFunc {
781
788
  ], bool_t));
782
789
  }
783
790
  static get _equalPairData() {
784
- return new TirNativeFunc(IRNativeTag._equalPairData, new TirFuncT([
791
+ return new TirHoistedExpr("equal_pair_data", new TirNativeFunc(IRNativeTag._equalPairData, new TirFuncT([
785
792
  // pairA
786
793
  new TirPairDataT(),
787
794
  // pairB
788
795
  new TirPairDataT()
789
- ], bool_t));
796
+ ], bool_t)));
790
797
  }
791
798
  static get _equalBoolean() {
792
- return new TirNativeFunc(IRNativeTag._equalBoolean, new TirFuncT([
799
+ return new TirHoistedExpr("equal_boolean", new TirNativeFunc(IRNativeTag._equalBoolean, new TirFuncT([
793
800
  // a
794
801
  bool_t,
795
802
  // b
796
803
  bool_t
797
- ], bool_t));
804
+ ], bool_t)));
805
+ }
806
+ static _equals(t) {
807
+ t = getUnaliased(t);
808
+ if (t instanceof TirIntT)
809
+ return this.equalsInteger;
810
+ if (t instanceof TirBytesT)
811
+ return this.equalsByteString;
812
+ if (t instanceof TirPairDataT)
813
+ return this._equalPairData;
814
+ if (t instanceof TirBoolT)
815
+ return this._equalBoolean;
816
+ if (t instanceof TirDataT
817
+ || t instanceof TirDataOptT
818
+ || t instanceof TirDataStructType)
819
+ return this.equalsData;
820
+ if (t instanceof TirListT) {
821
+ const elemT = getListTypeArg(t);
822
+ if (!elemT)
823
+ throw new Error(`Could not get element type of list type ${t.toString()}`);
824
+ const elemName = elemT.toConcreteTirTypeName();
825
+ const funcName = `equal_list_of_${elemName}`;
826
+ return new TirHoistedExpr(funcName, new TirCallExpr(this._mkEqualsList(elemT), [this._equals(elemT)], new TirFuncT([
827
+ // listA
828
+ new TirListT(elemT),
829
+ // listB
830
+ new TirListT(elemT)
831
+ ], bool_t), SourceRange.unknown));
832
+ }
833
+ throw new Error(`No native equals function for type ${t.toString()}`);
798
834
  }
799
835
  static get _negateInt() {
800
836
  return new TirNativeFunc(IRNativeTag._negateInt, new TirFuncT([
@@ -10,7 +10,9 @@ export declare class TirParentesizedExpr implements HasSourceRange, ITirExpr {
10
10
  readonly type: TirType;
11
11
  readonly range: SourceRange;
12
12
  constructor(expr: TirExpr, type: TirType, range: SourceRange);
13
- clone(): TirParentesizedExpr;
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;
@@ -7,6 +7,12 @@ export class TirParentesizedExpr {
7
7
  this.type = type;
8
8
  this.range = range;
9
9
  }
10
+ toString() {
11
+ return `(${this.expr.toString()})`;
12
+ }
13
+ pretty(indent) {
14
+ return `(${this.expr.pretty(indent)})`;
15
+ }
10
16
  clone() {
11
17
  return new TirParentesizedExpr(this.expr.clone(), this.type.clone(), this.range.clone());
12
18
  }