@harmoniclabs/pebble 0.1.0-dev5 → 0.1.0-dev6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/IR/IRHash.d.ts +3 -3
  2. package/dist/IR/IRHash.js +47 -52
  3. package/dist/IR/IRNodes/IRApp.d.ts +12 -8
  4. package/dist/IR/IRNodes/IRApp.js +34 -20
  5. package/dist/IR/IRNodes/IRCase.d.ts +11 -7
  6. package/dist/IR/IRNodes/IRCase.js +33 -32
  7. package/dist/IR/IRNodes/IRConst.d.ts +7 -5
  8. package/dist/IR/IRNodes/IRConst.js +23 -13
  9. package/dist/IR/IRNodes/IRConstr.d.ts +11 -7
  10. package/dist/IR/IRNodes/IRConstr.js +34 -37
  11. package/dist/IR/IRNodes/IRDelayed.d.ts +12 -9
  12. package/dist/IR/IRNodes/IRDelayed.js +22 -18
  13. package/dist/IR/IRNodes/IRError.d.ts +9 -6
  14. package/dist/IR/IRNodes/IRError.js +12 -5
  15. package/dist/IR/IRNodes/IRForced.d.ts +9 -6
  16. package/dist/IR/IRNodes/IRForced.js +22 -18
  17. package/dist/IR/IRNodes/IRFunc.d.ts +14 -10
  18. package/dist/IR/IRNodes/IRFunc.js +35 -38
  19. package/dist/IR/IRNodes/IRHoisted.d.ts +16 -9
  20. package/dist/IR/IRNodes/IRHoisted.js +36 -18
  21. package/dist/IR/IRNodes/IRLetted.d.ts +14 -34
  22. package/dist/IR/IRNodes/IRLetted.js +65 -297
  23. package/dist/IR/IRNodes/IRNative/IRNativeTag.d.ts +0 -2
  24. package/dist/IR/IRNodes/IRNative/IRNativeTag.js +0 -4
  25. package/dist/IR/IRNodes/IRNative/index.d.ts +9 -8
  26. package/dist/IR/IRNodes/IRNative/index.js +55 -18
  27. package/dist/IR/IRNodes/IRNative/isForcedNative.d.ts +2 -0
  28. package/dist/IR/IRNodes/IRNative/isForcedNative.js +1 -1
  29. package/dist/IR/IRNodes/IRRecursive.d.ts +18 -10
  30. package/dist/IR/IRNodes/IRRecursive.js +36 -44
  31. package/dist/IR/IRNodes/IRSelfCall.d.ts +10 -24
  32. package/dist/IR/IRNodes/IRSelfCall.js +25 -87
  33. package/dist/IR/IRNodes/IRVar.d.ts +11 -19
  34. package/dist/IR/IRNodes/IRVar.js +26 -54
  35. package/dist/IR/IRNodes/utils/dependsByDbns.d.ts +1 -1
  36. package/dist/IR/IRNodes/utils/dependsByDbns.js +5 -11
  37. package/dist/IR/IRNodes/utils/hashVarSym.d.ts +1 -0
  38. package/dist/IR/IRNodes/utils/hashVarSym.js +37 -0
  39. package/dist/IR/IRNodes/utils/makeArrayLikeProxy.d.ts +2 -1
  40. package/dist/IR/IRTerm.d.ts +7 -0
  41. package/dist/IR/toUPLC/_internal/_modifyChildFromTo.js +3 -0
  42. package/dist/IR/toUPLC/_internal/findAll.js +2 -73
  43. package/dist/IR/toUPLC/_internal/getDebruijnInTerm.js +7 -34
  44. package/dist/IR/toUPLC/_internal/iterTree.js +3 -17
  45. package/dist/IR/toUPLC/common_hoisted.d.ts +2 -0
  46. package/dist/IR/toUPLC/common_hoisted.js +4 -0
  47. package/dist/IR/toUPLC/compileIRToUPLC.d.ts +1 -1
  48. package/dist/IR/toUPLC/compileIRToUPLC.js +91 -14
  49. package/dist/IR/toUPLC/ctx/ToUplcCtx.d.ts +16 -0
  50. package/dist/IR/toUPLC/ctx/ToUplcCtx.js +75 -0
  51. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.d.ts +8 -0
  52. package/dist/IR/toUPLC/subRoutines/_comptimeDropN.js +95 -0
  53. package/dist/IR/toUPLC/subRoutines/handleHoistedAndReturnRoot/index.js +7 -54
  54. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.d.ts +6 -13
  55. package/dist/IR/toUPLC/subRoutines/handleLetted/groupByScope.js +67 -71
  56. package/dist/IR/toUPLC/subRoutines/handleLetted/index.js +44 -170
  57. package/dist/IR/toUPLC/subRoutines/handleRecursiveTerms.js +7 -3
  58. package/dist/IR/toUPLC/subRoutines/hoistForcedNatives.js +3 -2
  59. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.d.ts +22 -0
  60. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/InlineSingleUseCtx.js +59 -0
  61. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.d.ts +0 -0
  62. package/dist/IR/toUPLC/subRoutines/inlineSingleUseAndReturnRoot/inlineSingleUseAndReturnRoot.js +217 -0
  63. package/dist/IR/toUPLC/subRoutines/markRecursiveHoistsAsForced.js +12 -49
  64. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.d.ts +1 -1
  65. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/expandFuncsAndReturnRoot.js +11 -14
  66. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/{index.d.ts → performUplcOptimizationsAndReturnRoot.d.ts} +0 -2
  67. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/performUplcOptimizationsAndReturnRoot.js +151 -0
  68. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.d.ts +11 -0
  69. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/RemoveUnusedVarsCtx.js +46 -0
  70. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.d.ts +2 -0
  71. package/dist/IR/toUPLC/subRoutines/removeUnusuedVarsAndReturnRoot/removeUnusuedVarsAndReturnRoot.js +80 -0
  72. package/dist/IR/toUPLC/subRoutines/replaceHoistedWithLetted.js +18 -11
  73. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.d.ts +43 -0
  74. package/dist/IR/toUPLC/subRoutines/replaceNatives/nativeToIR.js +255 -478
  75. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.d.ts +2 -0
  76. package/dist/IR/toUPLC/subRoutines/rewriteNativesAppliedToConstantsAndReturnRoot.js +85 -0
  77. package/dist/IR/toUPLC/subRoutines/sanifyTree.js +1 -0
  78. package/dist/IR/toUPLC/utils/getApplicationTerms.d.ts +6 -0
  79. package/dist/IR/toUPLC/utils/getApplicationTerms.js +37 -0
  80. package/dist/IR/tree_utils/_ir_lazyChooseList.d.ts +2 -2
  81. package/dist/IR/tree_utils/_ir_lazyChooseList.js +4 -2
  82. package/dist/IR/tree_utils/_ir_lazyIfThenElse.d.ts +1 -1
  83. package/dist/IR/tree_utils/_ir_lazyIfThenElse.js +4 -2
  84. package/dist/IR/tree_utils/_ir_let.d.ts +2 -1
  85. package/dist/IR/tree_utils/_ir_let.js +6 -2
  86. package/dist/IR/utils/isClosedIRTerm.d.ts +1 -0
  87. package/dist/IR/utils/isClosedIRTerm.js +39 -25
  88. package/dist/IR/utils/positiveIntAsBytes.d.ts +1 -0
  89. package/dist/IR/utils/positiveIntAsBytes.js +4 -0
  90. package/dist/IR/utils/showIR.d.ts +10 -21
  91. package/dist/IR/utils/showIR.js +66 -64
  92. package/dist/ast/nodes/common/Identifier.d.ts +1 -0
  93. package/dist/ast/nodes/common/Identifier.js +3 -0
  94. package/dist/ast/nodes/expr/CaseExpr.d.ts +5 -5
  95. package/dist/ast/nodes/expr/ElemAccessExpr.d.ts +2 -2
  96. package/dist/ast/nodes/expr/ParentesizedExpr.d.ts +1 -1
  97. package/dist/ast/nodes/expr/PebbleExpr.d.ts +2 -1
  98. package/dist/ast/nodes/expr/PropAccessExpr.d.ts +3 -3
  99. package/dist/ast/nodes/expr/TernaryExpr.d.ts +3 -3
  100. package/dist/ast/nodes/expr/TypeConversionExpr.d.ts +2 -1
  101. package/dist/ast/nodes/expr/TypeConversionExpr.js +2 -0
  102. package/dist/ast/nodes/expr/binary/BinaryExpr.d.ts +42 -42
  103. package/dist/ast/nodes/expr/functions/CallExpr.d.ts +1 -1
  104. package/dist/ast/nodes/expr/functions/FuncExpr.d.ts +2 -1
  105. package/dist/ast/nodes/expr/functions/FuncExpr.js +6 -0
  106. package/dist/ast/nodes/expr/litteral/LitContextExpr.d.ts +6 -0
  107. package/dist/ast/nodes/expr/litteral/LitContextExpr.js +6 -0
  108. package/dist/ast/nodes/expr/litteral/LitFailExpr.d.ts +6 -0
  109. package/dist/ast/nodes/expr/litteral/LitFailExpr.js +6 -0
  110. package/dist/ast/nodes/expr/litteral/LitteralExpr.d.ts +3 -1
  111. package/dist/ast/nodes/expr/litteral/LitteralExpr.js +5 -1
  112. package/dist/ast/nodes/statements/AssertStmt.d.ts +2 -2
  113. package/dist/ast/nodes/statements/AssignmentStmt.d.ts +1 -1
  114. package/dist/ast/nodes/statements/BlockStmt.d.ts +1 -1
  115. package/dist/ast/nodes/statements/FailStmt.d.ts +1 -1
  116. package/dist/ast/nodes/statements/ForOfStmt.d.ts +4 -2
  117. package/dist/ast/nodes/statements/ForOfStmt.js +6 -0
  118. package/dist/ast/nodes/statements/ForStmt.d.ts +6 -4
  119. package/dist/ast/nodes/statements/ForStmt.js +6 -0
  120. package/dist/ast/nodes/statements/IfStmt.d.ts +8 -5
  121. package/dist/ast/nodes/statements/IfStmt.js +13 -0
  122. package/dist/ast/nodes/statements/MatchStmt.d.ts +13 -4
  123. package/dist/ast/nodes/statements/MatchStmt.js +22 -1
  124. package/dist/ast/nodes/statements/PebbleStmt.d.ts +2 -1
  125. package/dist/ast/nodes/statements/PebbleStmt.js +3 -1
  126. package/dist/ast/nodes/statements/ReturnStmt.d.ts +1 -1
  127. package/dist/ast/nodes/statements/WhileStmt.d.ts +4 -2
  128. package/dist/ast/nodes/statements/WhileStmt.js +6 -0
  129. package/dist/ast/nodes/statements/declarations/ContractDecl.d.ts +17 -0
  130. package/dist/ast/nodes/statements/declarations/ContractDecl.js +22 -0
  131. package/dist/ast/nodes/statements/declarations/VarDecl/ArrayLikeDeconstr.d.ts +1 -1
  132. package/dist/ast/nodes/statements/declarations/VarDecl/HasInit.d.ts +1 -1
  133. package/dist/ast/nodes/statements/declarations/VarDecl/NamedDeconstructVarDecl.d.ts +1 -1
  134. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.d.ts +2 -1
  135. package/dist/ast/nodes/statements/declarations/VarDecl/SimpleVarDecl.js +6 -0
  136. package/dist/ast/nodes/statements/declarations/VarDecl/SingleDeconstructVarDecl.d.ts +1 -1
  137. package/dist/compiler/AstCompiler/AstCompiler.d.ts +6 -2
  138. package/dist/compiler/AstCompiler/AstCompiler.js +91 -24
  139. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.d.ts +10 -0
  140. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.js +777 -0
  141. package/dist/compiler/AstCompiler/internal/exprs/_compileBinaryExpr.js +1 -1
  142. package/dist/compiler/AstCompiler/internal/exprs/_compileExpr.js +1 -1
  143. package/dist/compiler/AstCompiler/internal/exprs/_compileLitteralExpr.js +8 -2
  144. package/dist/compiler/AstCompiler/internal/exprs/_compilePropAccessExpr.js +1 -1
  145. package/dist/compiler/AstCompiler/internal/exprs/_compileTypeConversionExpr.js +3 -1
  146. package/dist/compiler/AstCompiler/internal/exprs/_compileUnaryPrefixExpr.js +1 -1
  147. package/dist/compiler/AstCompiler/internal/statements/_compileAssignmentStmt.js +2 -2
  148. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.d.ts +2 -2
  149. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.js +48 -24
  150. package/dist/compiler/AstCompiler/internal/statements/_compileStatement.js +4 -1
  151. package/dist/compiler/AstCompiler/internal/statements/_compileVarStmt.js +2 -2
  152. package/dist/compiler/AstCompiler/internal/types/_compileDataEncodedConcreteType.js +1 -1
  153. package/dist/compiler/AstCompiler/internal/types/_compileSopEncodedConcreteType.js +4 -1
  154. package/dist/compiler/AstCompiler/scope/AstScope.js +4 -3
  155. package/dist/compiler/AstCompiler/utils/getPropAccessReturnType.js +6 -4
  156. package/dist/compiler/Compiler.js +3 -1
  157. package/dist/compiler/TirCompiler/compileTirProgram.js +3 -1
  158. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.d.ts +13 -3
  159. package/dist/compiler/TirCompiler/expressify/ExpressifyCtx.js +41 -37
  160. package/dist/compiler/TirCompiler/expressify/determineReassignedVariablesAndReturn.js +11 -2
  161. package/dist/compiler/TirCompiler/expressify/expressify.d.ts +2 -1
  162. package/dist/compiler/TirCompiler/expressify/expressify.js +82 -36
  163. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.d.ts +2 -1
  164. package/dist/compiler/TirCompiler/expressify/expressifyForStmt.js +57 -8
  165. package/dist/compiler/TirCompiler/expressify/expressifyIfBranch.js +1 -1
  166. package/dist/compiler/TirCompiler/expressify/expressifyVarAssignmentStmt.js +1 -1
  167. package/dist/compiler/TirCompiler/expressify/expressifyVarDecl.js +1 -0
  168. package/dist/compiler/TirCompiler/expressify/expressifyVars.js +131 -9
  169. package/dist/compiler/TirCompiler/internal/_compileHoistedDeps.js +3 -1
  170. package/dist/compiler/io/IOutputStream.d.ts +1 -0
  171. package/dist/compiler/io/IOutputStream.js +18 -3
  172. package/dist/compiler/path/getAbsolutePath.js +4 -6
  173. package/dist/compiler/tir/expressions/ITirExpr.d.ts +2 -0
  174. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.d.ts +4 -2
  175. package/dist/compiler/tir/expressions/TirAssertAndContinueExpr.js +16 -2
  176. package/dist/compiler/tir/expressions/TirCallExpr.d.ts +3 -1
  177. package/dist/compiler/tir/expressions/TirCallExpr.js +16 -1
  178. package/dist/compiler/tir/expressions/TirCaseExpr.d.ts +6 -1
  179. package/dist/compiler/tir/expressions/TirCaseExpr.js +103 -60
  180. package/dist/compiler/tir/expressions/TirElemAccessExpr.d.ts +3 -1
  181. package/dist/compiler/tir/expressions/TirElemAccessExpr.js +9 -1
  182. package/dist/compiler/tir/expressions/TirFailExpr.d.ts +3 -1
  183. package/dist/compiler/tir/expressions/TirFailExpr.js +9 -1
  184. package/dist/compiler/tir/expressions/TirFromDataExpr.d.ts +3 -2
  185. package/dist/compiler/tir/expressions/TirFromDataExpr.js +85 -56
  186. package/dist/compiler/tir/expressions/TirFuncExpr.d.ts +4 -10
  187. package/dist/compiler/tir/expressions/TirFuncExpr.js +30 -13
  188. package/dist/compiler/tir/expressions/TirHoistedExpr.d.ts +3 -1
  189. package/dist/compiler/tir/expressions/TirHoistedExpr.js +8 -0
  190. package/dist/compiler/tir/expressions/TirInlineClosedIR.d.ts +4 -1
  191. package/dist/compiler/tir/expressions/TirInlineClosedIR.js +8 -0
  192. package/dist/compiler/tir/expressions/TirLettedExpr.d.ts +5 -2
  193. package/dist/compiler/tir/expressions/TirLettedExpr.js +19 -4
  194. package/dist/compiler/tir/expressions/TirNativeFunc.d.ts +8 -5
  195. package/dist/compiler/tir/expressions/TirNativeFunc.js +50 -22
  196. package/dist/compiler/tir/expressions/TirParentesizedExpr.d.ts +3 -1
  197. package/dist/compiler/tir/expressions/TirParentesizedExpr.js +6 -0
  198. package/dist/compiler/tir/expressions/TirPropAccessExpr.d.ts +3 -1
  199. package/dist/compiler/tir/expressions/TirPropAccessExpr.js +9 -0
  200. package/dist/compiler/tir/expressions/TirTernaryExpr.d.ts +3 -1
  201. package/dist/compiler/tir/expressions/TirTernaryExpr.js +16 -5
  202. package/dist/compiler/tir/expressions/TirToDataExpr.d.ts +3 -1
  203. package/dist/compiler/tir/expressions/TirToDataExpr.js +56 -25
  204. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.d.ts +3 -1
  205. package/dist/compiler/tir/expressions/TirTraceIfFalseExpr.js +21 -4
  206. package/dist/compiler/tir/expressions/TirTypeConversionExpr.d.ts +3 -1
  207. package/dist/compiler/tir/expressions/TirTypeConversionExpr.js +9 -1
  208. package/dist/compiler/tir/expressions/TirVariableAccessExpr.d.ts +7 -3
  209. package/dist/compiler/tir/expressions/TirVariableAccessExpr.js +17 -7
  210. package/dist/compiler/tir/expressions/ToIRTermCtx.d.ts +16 -20
  211. package/dist/compiler/tir/expressions/ToIRTermCtx.js +67 -50
  212. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.d.ts +40 -0
  213. package/dist/compiler/tir/expressions/binary/TirBinaryExpr.js +174 -3
  214. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.d.ts +4 -2
  215. package/dist/compiler/tir/expressions/litteral/TirLitArrExpr.js +8 -2
  216. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.d.ts +17 -0
  217. package/dist/compiler/tir/expressions/litteral/TirLitFailExpr.js +21 -0
  218. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.d.ts +4 -1
  219. package/dist/compiler/tir/expressions/litteral/TirLitFalseExpr.js +4 -0
  220. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.d.ts +4 -1
  221. package/dist/compiler/tir/expressions/litteral/TirLitHexBytesExpr.js +5 -0
  222. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.d.ts +4 -1
  223. package/dist/compiler/tir/expressions/litteral/TirLitIntExpr.js +4 -0
  224. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.d.ts +3 -1
  225. package/dist/compiler/tir/expressions/litteral/TirLitNamedObjExpr.js +5 -0
  226. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.d.ts +3 -1
  227. package/dist/compiler/tir/expressions/litteral/TirLitObjExpr.js +5 -0
  228. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.d.ts +4 -1
  229. package/dist/compiler/tir/expressions/litteral/TirLitStrExpr.js +4 -0
  230. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.d.ts +4 -1
  231. package/dist/compiler/tir/expressions/litteral/TirLitThisExpr.js +7 -3
  232. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.d.ts +4 -1
  233. package/dist/compiler/tir/expressions/litteral/TirLitTrueExpr.js +4 -0
  234. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.d.ts +4 -1
  235. package/dist/compiler/tir/expressions/litteral/TirLitUndefExpr.js +4 -0
  236. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.d.ts +4 -1
  237. package/dist/compiler/tir/expressions/litteral/TirLitVoidExpr.js +4 -0
  238. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.d.ts +2 -1
  239. package/dist/compiler/tir/expressions/litteral/TirLitteralExpr.js +3 -1
  240. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.d.ts +4 -2
  241. package/dist/compiler/tir/expressions/unary/TirUnaryExclamation.js +8 -3
  242. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.d.ts +4 -2
  243. package/dist/compiler/tir/expressions/unary/TirUnaryMinus.js +8 -2
  244. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.d.ts +3 -1
  245. package/dist/compiler/tir/expressions/unary/TirUnaryPlus.js +6 -0
  246. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.d.ts +4 -2
  247. package/dist/compiler/tir/expressions/unary/TirUnaryTilde.js +8 -2
  248. package/dist/compiler/tir/program/TypedProgram.d.ts +1 -0
  249. package/dist/compiler/tir/program/TypedProgram.js +9 -0
  250. package/dist/compiler/tir/program/stdScope/stdScope.js +126 -126
  251. package/dist/compiler/tir/statements/TirAssertStmt.d.ts +2 -0
  252. package/dist/compiler/tir/statements/TirAssertStmt.js +10 -0
  253. package/dist/compiler/tir/statements/TirAssignmentStmt.d.ts +2 -0
  254. package/dist/compiler/tir/statements/TirAssignmentStmt.js +8 -0
  255. package/dist/compiler/tir/statements/TirBlockStmt.d.ts +2 -0
  256. package/dist/compiler/tir/statements/TirBlockStmt.js +16 -0
  257. package/dist/compiler/tir/statements/TirBreakStmt.d.ts +2 -0
  258. package/dist/compiler/tir/statements/TirBreakStmt.js +8 -0
  259. package/dist/compiler/tir/statements/TirContinueStmt.d.ts +2 -0
  260. package/dist/compiler/tir/statements/TirContinueStmt.js +8 -0
  261. package/dist/compiler/tir/statements/TirFailStmt.d.ts +2 -0
  262. package/dist/compiler/tir/statements/TirFailStmt.js +8 -0
  263. package/dist/compiler/tir/statements/TirForOfStmt.d.ts +2 -0
  264. package/dist/compiler/tir/statements/TirForOfStmt.js +14 -0
  265. package/dist/compiler/tir/statements/TirForStmt.d.ts +2 -0
  266. package/dist/compiler/tir/statements/TirForStmt.js +21 -0
  267. package/dist/compiler/tir/statements/TirIfStmt.d.ts +3 -0
  268. package/dist/compiler/tir/statements/TirIfStmt.js +19 -0
  269. package/dist/compiler/tir/statements/TirMatchStmt.d.ts +2 -0
  270. package/dist/compiler/tir/statements/TirMatchStmt.js +30 -0
  271. package/dist/compiler/tir/statements/TirReturnStmt.d.ts +2 -0
  272. package/dist/compiler/tir/statements/TirReturnStmt.js +8 -0
  273. package/dist/compiler/tir/statements/TirStmt.d.ts +2 -0
  274. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.d.ts +2 -0
  275. package/dist/compiler/tir/statements/TirVarDecl/TirArrayLikeDeconstr.js +30 -0
  276. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.d.ts +3 -1
  277. package/dist/compiler/tir/statements/TirVarDecl/TirNamedDeconstructVarDecl.js +28 -0
  278. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.d.ts +3 -0
  279. package/dist/compiler/tir/statements/TirVarDecl/TirSimpleVarDecl.js +13 -0
  280. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.d.ts +3 -1
  281. package/dist/compiler/tir/statements/TirVarDecl/TirSingleDeconstructVarDecl.js +28 -0
  282. package/dist/compiler/tir/statements/TirWhileStmt.d.ts +2 -0
  283. package/dist/compiler/tir/statements/TirWhileStmt.js +14 -0
  284. package/dist/compiler/tir/types/utils/canAssignTo.js +1 -1
  285. package/dist/diagnostics/DiagnosticEmitter.js +1 -1
  286. package/dist/diagnostics/diagnosticMessages.generated.d.ts +10 -1
  287. package/dist/diagnostics/diagnosticMessages.generated.js +20 -2
  288. package/dist/parser/Parser.d.ts +8 -3
  289. package/dist/parser/Parser.js +162 -30
  290. package/dist/tokenizer/Token.d.ts +81 -72
  291. package/dist/tokenizer/Token.js +82 -72
  292. package/dist/tokenizer/utils/tokenFromKeyword.js +32 -10
  293. package/dist/tokenizer/utils/tokenIsAlsoIdentifier.js +10 -0
  294. package/dist/utils/BitUtils/index.js +1 -1
  295. package/dist/utils/UPLCFlatUtils/index.js +1 -1
  296. package/package.json +2 -1
  297. package/dist/IR/IRNodes/utils/isClosedAtDbn.d.ts +0 -2
  298. package/dist/IR/IRNodes/utils/isClosedAtDbn.js +0 -22
  299. package/dist/IR/toUPLC/_internal/_irToUplc.d.ts +0 -9
  300. package/dist/IR/toUPLC/_internal/_irToUplc.js +0 -156
  301. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.d.ts +0 -9
  302. package/dist/IR/toUPLC/subRoutines/handleLetted/incrementUnboundDbns.js +0 -73
  303. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.d.ts +0 -1
  304. package/dist/IR/toUPLC/subRoutines/inlineSingleUseApplications.js +0 -12
  305. package/dist/IR/toUPLC/subRoutines/performUplcOptimizationsAndReturnRoot/index.js +0 -227
  306. package/dist/IR/tree_utils/_ir_apps.d.ts +0 -3
  307. package/dist/IR/tree_utils/_ir_apps.js +0 -8
@@ -0,0 +1,75 @@
1
+ export class ToUplcCtx {
2
+ parent;
3
+ ctxMap;
4
+ _variables;
5
+ get _parentDbn() {
6
+ return this.parent?.dbn ?? 0;
7
+ }
8
+ get dbn() {
9
+ return this._variables.length + this._parentDbn;
10
+ }
11
+ _frozen;
12
+ constructor(parent, variables) {
13
+ this.parent = parent;
14
+ this.ctxMap = this.parent?.ctxMap ?? new Map();
15
+ this._variables = variables;
16
+ for (const v of variables)
17
+ this.ctxMap.set(v, this);
18
+ }
19
+ static root() {
20
+ return new ToUplcCtx(undefined, []);
21
+ }
22
+ newChild(variables) {
23
+ return new ToUplcCtx(this, variables);
24
+ }
25
+ getVarDeclDbn(sym) {
26
+ const ctx = this.ctxMap.get(sym);
27
+ const idx = ctx?._variables.indexOf(sym) ?? -1;
28
+ if (idx <= -1) {
29
+ console.log(sym, ctx?.allVars());
30
+ throw new Error("Variable not found in its defining context");
31
+ }
32
+ const declDbn = ctx._parentDbn + idx + 1;
33
+ if (declDbn === 5
34
+ && sym.description === "tailList") {
35
+ console.log({
36
+ ctxDbn: ctx.dbn,
37
+ idx
38
+ });
39
+ }
40
+ return declDbn;
41
+ }
42
+ getVarAccessDbn(sym) {
43
+ const declDbn = this.getVarDeclDbn(sym);
44
+ return this.dbn - declDbn;
45
+ }
46
+ toJson() {
47
+ let obj = {};
48
+ let prevCtx = null;
49
+ let ctx = this;
50
+ do {
51
+ obj["parentDbn"] = ctx._parentDbn;
52
+ obj["dbn"] = ctx.dbn;
53
+ obj["vars"] = ctx._variables.slice();
54
+ obj["next"] = prevCtx;
55
+ prevCtx = obj;
56
+ obj = {};
57
+ ctx = ctx.parent;
58
+ } while (ctx);
59
+ return prevCtx;
60
+ }
61
+ allVars() {
62
+ let vars = [];
63
+ let ctx = this;
64
+ while (ctx = ctx.parent) {
65
+ vars = ctx._variables.concat(vars);
66
+ }
67
+ return vars;
68
+ }
69
+ // for debugging purposes
70
+ // "inefficient" but correct way to get expected de bruijn index
71
+ expectedDbn(sym) {
72
+ const vars = this.allVars();
73
+ return vars.length - 1 - vars.lastIndexOf(sym);
74
+ }
75
+ }
@@ -0,0 +1,8 @@
1
+ import { IRHoisted, IRNative } from "../../IRNodes/index.js";
2
+ export declare const hoisted_drop2: IRHoisted;
3
+ export declare const hoisted_drop3: IRHoisted;
4
+ export declare const hoisted_drop4: IRHoisted;
5
+ export declare const hoisted_drop8: IRHoisted;
6
+ export declare const hoisted_drop16: IRHoisted;
7
+ export declare const hoisted_drop32: IRHoisted;
8
+ export declare function _compTimeDropN(bigN: bigint): IRHoisted | IRNative;
@@ -0,0 +1,95 @@
1
+ import { IRHoisted, IRFunc, IRNative, IRVar, _ir_apps } from "../../IRNodes/index.js";
2
+ const tailList = new IRHoisted(IRNative.tailList);
3
+ tailList.hash;
4
+ const drop2_lst = Symbol("lst");
5
+ export const hoisted_drop2 = new IRHoisted(new IRFunc([drop2_lst], // lst
6
+ _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), new IRVar(drop2_lst) // lst
7
+ ))));
8
+ hoisted_drop2.hash;
9
+ const drop3_lst = Symbol("lst");
10
+ export const hoisted_drop3 = new IRHoisted(new IRFunc([drop3_lst], // lst
11
+ _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), new IRVar(drop3_lst) // lst
12
+ )))));
13
+ hoisted_drop3.hash;
14
+ const drop4_lst = Symbol("lst");
15
+ export const hoisted_drop4 = new IRHoisted(new IRFunc([drop4_lst], // lst
16
+ _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), _ir_apps(tailList.clone(), new IRVar(drop4_lst) // lst
17
+ ))))));
18
+ hoisted_drop4.hash;
19
+ const drop8_lst = Symbol("lst");
20
+ export const hoisted_drop8 = new IRHoisted(new IRFunc([drop8_lst], // lst
21
+ _ir_apps(hoisted_drop4.clone(), _ir_apps(hoisted_drop4.clone(), new IRVar(drop8_lst) // lst
22
+ ))));
23
+ hoisted_drop8.hash;
24
+ // replace numeric arity version of drop16 with symbol param
25
+ const drop16_lst = Symbol("lst");
26
+ export const hoisted_drop16 = new IRHoisted(new IRFunc([drop16_lst], _ir_apps(hoisted_drop8.clone(), _ir_apps(hoisted_drop8.clone(), new IRVar(drop16_lst)))));
27
+ hoisted_drop16.hash;
28
+ // replace numeric arity version of drop32 with symbol param
29
+ const drop32_lst = Symbol("lst");
30
+ export const hoisted_drop32 = new IRHoisted(new IRFunc([drop32_lst], _ir_apps(hoisted_drop16.clone(), _ir_apps(hoisted_drop16.clone(), new IRVar(drop32_lst)))));
31
+ hoisted_drop32.hash;
32
+ export function _compTimeDropN(bigN) {
33
+ const n = Number(bigN);
34
+ if (n < 0)
35
+ throw new Error(`Cannot drop a negative number of elements from a list`);
36
+ if (n === 0)
37
+ return IRNative._id;
38
+ if (n === 1)
39
+ return tailList.clone();
40
+ if (n === 2)
41
+ return hoisted_drop2;
42
+ if (n === 3)
43
+ return hoisted_drop3;
44
+ if (n === 4)
45
+ return hoisted_drop4;
46
+ if (n === 8)
47
+ return hoisted_drop8;
48
+ if (n === 16)
49
+ return hoisted_drop16;
50
+ if (n === 32)
51
+ return hoisted_drop32;
52
+ // Greedy decomposition into available drop sizes (largest first)
53
+ let remaining = n;
54
+ const parts = [];
55
+ const sizes = [32, 16, 8, 4, 3, 2, 1];
56
+ for (const s of sizes) {
57
+ while (remaining >= s) {
58
+ parts.push(s);
59
+ remaining -= s;
60
+ }
61
+ if (remaining === 0)
62
+ break;
63
+ }
64
+ // Build the composed drop function body by sequential application
65
+ const lst = Symbol("lst"); // symbol param for composed function
66
+ let body = new IRVar(lst);
67
+ for (const p of parts) {
68
+ switch (p) {
69
+ case 32:
70
+ body = _ir_apps(hoisted_drop32.clone(), body);
71
+ break;
72
+ case 16:
73
+ body = _ir_apps(hoisted_drop16.clone(), body);
74
+ break;
75
+ case 8:
76
+ body = _ir_apps(hoisted_drop8.clone(), body);
77
+ break;
78
+ case 4:
79
+ body = _ir_apps(hoisted_drop4.clone(), body);
80
+ break;
81
+ case 3:
82
+ body = _ir_apps(hoisted_drop3.clone(), body);
83
+ break;
84
+ case 2:
85
+ body = _ir_apps(hoisted_drop2.clone(), body);
86
+ break;
87
+ case 1:
88
+ body = _ir_apps(tailList.clone(), body);
89
+ break;
90
+ }
91
+ }
92
+ const hoisted = new IRHoisted(new IRFunc([lst], body));
93
+ hoisted.hash;
94
+ return hoisted;
95
+ }
@@ -1,17 +1,11 @@
1
1
  import { IRApp } from "../../../IRNodes/IRApp.js";
2
- import { IRDelayed } from "../../../IRNodes/IRDelayed.js";
3
- import { IRForced } from "../../../IRNodes/IRForced.js";
4
2
  import { IRFunc } from "../../../IRNodes/IRFunc.js";
5
3
  import { getSortedHoistedSet, getHoistedTerms, IRHoisted } from "../../../IRNodes/IRHoisted.js";
6
- import { IRLetted } from "../../../IRNodes/IRLetted.js";
7
4
  import { IRVar } from "../../../IRNodes/IRVar.js";
8
5
  import { _modifyChildFromTo } from "../../_internal/_modifyChildFromTo.js";
9
6
  import { showIR } from "../../../utils/showIR.js";
10
7
  import { markRecursiveHoistsAsForced } from "../markRecursiveHoistsAsForced.js";
11
8
  import { equalIrHash, irHashToHex } from "../../../IRHash.js";
12
- import { mapArrayLike } from "../../../IRNodes/utils/mapArrayLike.js";
13
- import { IRCase } from "../../../IRNodes/IRCase.js";
14
- import { IRConstr } from "../../../IRNodes/IRConstr.js";
15
9
  import { stringify } from "../../../../utils/stringify.js";
16
10
  import { IRRecursive } from "../../../IRNodes/IRRecursive.js";
17
11
  export function handleHoistedAndReturnRoot(term) {
@@ -68,19 +62,11 @@ export function handleHoistedAndReturnRoot(term) {
68
62
  let root = term;
69
63
  while (root.parent !== undefined)
70
64
  root = root.parent;
71
- function getIRVarForHoistedAtLevel(_hoistedHash, level) {
72
- let levelOfTerm = toHoist.findIndex(sortedH => equalIrHash(sortedH.hash, _hoistedHash));
73
- if (levelOfTerm < 0) {
74
- throw new Error(`missing hoisted with hash ${irHashToHex(_hoistedHash)} between toHoist [\n\t${toHoist.map(h => irHashToHex(h.hash))
75
- .join(",\n\t")}\n]; can't replace with IRVar`);
76
- }
77
- return new IRVar(level - (levelOfTerm + 1));
78
- }
79
65
  // adds the actual terms
80
66
  // from last to first
81
67
  for (let i = toHoist.length - 1; i >= 0; i--) {
82
68
  const thisHoisted = toHoist[i];
83
- root = new IRApp(new IRFunc(1, root), thisHoisted.hoisted.clone());
69
+ root = new IRApp(new IRFunc([thisHoisted.name], root), thisHoisted.hoisted.clone());
84
70
  }
85
71
  // replace hoisted references with variables
86
72
  const stack = [{ irTerm: root, dbn: 0 }];
@@ -93,22 +79,14 @@ export function handleHoistedAndReturnRoot(term) {
93
79
  irTerm instanceof IRHoisted &&
94
80
  // is not one to be inlined
95
81
  !isHoistedToinline) {
96
- const irvar = getIRVarForHoistedAtLevel(irTermHash, dbn);
97
- if (irvar.dbn >= dbn) {
98
- throw new Error(`out of bound hoisted term; hash: ${irHashToHex(irTerm.hash)}; var's DeBruijn: ${irvar.dbn} (starts from 0); tot hoisted in scope: ${dbn}`);
99
- }
82
+ const irvar = new IRVar(irTerm.name); // getIRVarForHoistedAtLevel( irTermHash, dbn );
100
83
  // console.log(
101
84
  // showIRText( irTerm.parent as IRTerm ),
102
85
  // "\n\n",
103
86
  // showIRText( irTerm ),
104
87
  // )
105
88
  _modifyChildFromTo(irTerm.parent, irTerm, irvar);
106
- Object.defineProperty(irTerm.meta, "handled", {
107
- value: true,
108
- writable: true,
109
- enumerable: true,
110
- configurable: true
111
- });
89
+ irTerm.meta.handled = true;
112
90
  // don't push anything
113
91
  // because we just replaced with a variable
114
92
  // so we know there's not a tree to explore
@@ -124,38 +102,13 @@ export function handleHoistedAndReturnRoot(term) {
124
102
  stack.push({ irTerm: toInline, dbn });
125
103
  continue;
126
104
  }
127
- if (irTerm instanceof IRApp) {
128
- stack.push({ irTerm: irTerm.fn, dbn }, { irTerm: irTerm.arg, dbn });
129
- continue;
130
- }
131
- if (irTerm instanceof IRCase) {
132
- stack.push({ irTerm: irTerm.constrTerm, dbn }, ...mapArrayLike(irTerm.continuations, (continuation) => ({ irTerm: continuation, dbn })));
133
- continue;
134
- }
135
- if (irTerm instanceof IRConstr) {
136
- stack.push(...mapArrayLike(irTerm.fields, (field) => ({ irTerm: field, dbn })));
137
- continue;
138
- }
139
- if (irTerm instanceof IRDelayed) {
140
- stack.push({ irTerm: irTerm.delayed, dbn });
141
- continue;
142
- }
143
- if (irTerm instanceof IRForced) {
144
- stack.push({ irTerm: irTerm.forced, dbn });
145
- continue;
146
- }
147
- if (irTerm instanceof IRFunc) {
105
+ if (irTerm instanceof IRFunc
106
+ || irTerm instanceof IRRecursive) {
148
107
  stack.push({ irTerm: irTerm.body, dbn: dbn + irTerm.arity });
149
108
  continue;
150
109
  }
151
- if (irTerm instanceof IRRecursive) {
152
- stack.push({ irTerm: irTerm.body, dbn: dbn + irTerm.arity });
153
- continue;
154
- }
155
- if (irTerm instanceof IRLetted) {
156
- stack.push({ irTerm: irTerm.value, dbn });
157
- continue;
158
- }
110
+ stack.push(...irTerm.children()
111
+ .map(child => ({ irTerm: child, dbn })));
159
112
  }
160
113
  return root;
161
114
  }
@@ -1,20 +1,13 @@
1
- import { IRFunc } from "../../../IRNodes/IRFunc.js";
2
1
  import { LettedSetEntry } from "../../../IRNodes/IRLetted.js";
2
+ import { IRSelfCall } from "../../../IRNodes/IRSelfCall.js";
3
+ import { IRVar } from "../../../IRNodes/IRVar.js";
3
4
  import { IRTerm } from "../../../IRTerm.js";
4
5
  type ScopedLettedTerms = {
5
- maxScope: IRFunc | undefined;
6
+ maxScope: IRTerm | undefined;
6
7
  group: LettedSetEntry[];
7
8
  };
8
9
  export declare function groupByScope(letteds: LettedSetEntry[]): ScopedLettedTerms[];
9
- /**
10
- *
11
- * @param _term
12
- * @returns {number | undefined}
13
- * a `number` if the `_term` param is open;
14
- * represents the debuijn index an `IRVar` would have
15
- * in order to point to the smallest scope that fulfills the term;
16
- *
17
- * `undefined` if the term is closed
18
- */
19
- export declare function _getMinUnboundDbn(_term: IRTerm): number | undefined;
10
+ export declare function getMaxScope(term: IRTerm): IRTerm | undefined;
11
+ export declare function getUnboundedIRVars(term: IRTerm): (IRVar | IRSelfCall)[];
12
+ export declare function getUnboundedVars(term: IRTerm, knownVars?: Set<symbol> | undefined): Set<symbol>;
20
13
  export {};
@@ -1,14 +1,8 @@
1
- import { IRApp } from "../../../IRNodes/IRApp.js";
2
- import { IRCase } from "../../../IRNodes/IRCase.js";
3
- import { IRConstr } from "../../../IRNodes/IRConstr.js";
4
1
  import { IRDelayed } from "../../../IRNodes/IRDelayed.js";
5
- import { IRForced } from "../../../IRNodes/IRForced.js";
6
2
  import { IRFunc } from "../../../IRNodes/IRFunc.js";
7
- import { IRLetted } from "../../../IRNodes/IRLetted.js";
8
3
  import { IRRecursive } from "../../../IRNodes/IRRecursive.js";
9
4
  import { IRSelfCall } from "../../../IRNodes/IRSelfCall.js";
10
5
  import { IRVar } from "../../../IRNodes/IRVar.js";
11
- import { mapArrayLike } from "../../../IRNodes/utils/mapArrayLike.js";
12
6
  export function groupByScope(letteds) {
13
7
  const scopes = [];
14
8
  function pushScope(scope, letted) {
@@ -23,85 +17,87 @@ export function groupByScope(letteds) {
23
17
  scopeEntry.group.push(letted);
24
18
  }
25
19
  for (const { letted, nReferences } of letteds) {
26
- let minUnboundDbn = _getMinUnboundDbn(letted.value);
27
- if (minUnboundDbn === undefined) {
28
- pushScope(undefined, { letted, nReferences });
29
- continue;
30
- }
31
- let maxScope = letted.parent;
32
- if (maxScope instanceof IRFunc ||
33
- maxScope instanceof IRRecursive) {
34
- minUnboundDbn -= maxScope.arity;
35
- }
36
- while (minUnboundDbn >= 0) {
37
- maxScope = maxScope?.parent;
38
- if (maxScope instanceof IRFunc ||
39
- maxScope instanceof IRRecursive) {
40
- minUnboundDbn -= maxScope.arity;
41
- }
42
- }
20
+ const maxScope = getMaxScope(letted.value);
43
21
  pushScope(maxScope, { letted, nReferences });
44
22
  }
45
23
  return scopes;
46
24
  }
47
- /**
48
- *
49
- * @param _term
50
- * @returns {number | undefined}
51
- * a `number` if the `_term` param is open;
52
- * represents the debuijn index an `IRVar` would have
53
- * in order to point to the smallest scope that fulfills the term;
54
- *
55
- * `undefined` if the term is closed
56
- */
57
- export function _getMinUnboundDbn(_term) {
58
- let minDbn = undefined;
59
- const stack = [{ term: _term, dbn: 0 }];
60
- while (stack.length > 0) {
61
- const { term, dbn } = stack.pop();
62
- if (term instanceof IRVar ||
63
- term instanceof IRSelfCall) {
64
- if (term.dbn >= dbn) // some val outside
65
- {
66
- const outsideDbn = term.dbn - dbn;
67
- minDbn = minDbn === undefined ? outsideDbn : Math.min(outsideDbn, minDbn);
25
+ export function getMaxScope(term) {
26
+ const unbounded = getUnboundedVars(term);
27
+ if (unbounded.size === 0)
28
+ return undefined;
29
+ while (term.parent) {
30
+ term = term.parent;
31
+ if (term instanceof IRDelayed)
32
+ return term;
33
+ if (term instanceof IRFunc
34
+ || term instanceof IRRecursive) {
35
+ for (const param of term.params) {
36
+ if (unbounded.has(param))
37
+ return term;
68
38
  }
69
39
  }
70
- if (term instanceof IRApp) {
71
- stack.push({ term: term.fn, dbn }, { term: term.arg, dbn });
72
- continue;
73
- }
74
- if (term instanceof IRCase) {
75
- stack.push({ term: term.constrTerm, dbn }, ...mapArrayLike(term.continuations, continuation => ({ term: continuation, dbn })));
76
- continue;
77
- }
78
- if (term instanceof IRConstr) {
79
- stack.push(...mapArrayLike(term.fields, field => ({ term: field, dbn })));
80
- continue;
81
- }
82
- if (term instanceof IRDelayed) {
83
- stack.push({ term: term.delayed, dbn });
40
+ }
41
+ throw new Error("Unbounded var not found in any parent term");
42
+ }
43
+ export function getUnboundedIRVars(term) {
44
+ const accessedVars = new Map();
45
+ const boundedVars = new Set();
46
+ const stack = [term];
47
+ while (stack.length > 0) {
48
+ const t = stack.pop();
49
+ if (t instanceof IRVar
50
+ || t instanceof IRSelfCall) {
51
+ let vars = accessedVars.get(t.name);
52
+ if (!Array.isArray(vars)) {
53
+ vars = [];
54
+ accessedVars.set(t.name, vars);
55
+ }
56
+ vars.push(t);
84
57
  continue;
85
58
  }
86
- if (term instanceof IRForced) {
87
- stack.push({ term: term.forced, dbn });
59
+ if (t instanceof IRFunc
60
+ || t instanceof IRRecursive) {
61
+ for (const param of t.params)
62
+ boundedVars.add(param);
63
+ stack.push(t.body);
88
64
  continue;
89
65
  }
90
- if (term instanceof IRFunc) {
91
- stack.push({ term: term.body, dbn: dbn + term.arity });
92
- continue;
66
+ stack.push(...t.children());
67
+ }
68
+ console.log("accessedVars", [...new Set(accessedVars.keys())]);
69
+ console.log("boundedVars", [...boundedVars]);
70
+ for (const v of boundedVars)
71
+ accessedVars.delete(v);
72
+ return [...accessedVars.values()].flat();
73
+ }
74
+ export function getUnboundedVars(term, knownVars) {
75
+ const accessedVars = new Set();
76
+ const boundedVars = new Set();
77
+ if (knownVars instanceof Set) {
78
+ for (const v of knownVars) {
79
+ if (typeof v === "symbol")
80
+ boundedVars.add(v);
93
81
  }
94
- if (term instanceof IRRecursive) {
95
- stack.push({ term: term.body, dbn: dbn + term.arity });
82
+ }
83
+ const stack = [term];
84
+ while (stack.length > 0) {
85
+ const t = stack.pop();
86
+ if (t instanceof IRVar
87
+ || t instanceof IRSelfCall) {
88
+ accessedVars.add(t.name);
96
89
  continue;
97
90
  }
98
- // letted terms do count too
99
- if (term instanceof IRLetted) {
100
- stack.push({ term: term.value, dbn });
91
+ if (t instanceof IRFunc
92
+ || t instanceof IRRecursive) {
93
+ for (const param of t.params)
94
+ boundedVars.add(param);
95
+ stack.push(t.body);
101
96
  continue;
102
97
  }
103
- // closed
104
- // if( term instanceof IRHoisted )
98
+ stack.push(...t.children());
105
99
  }
106
- return minDbn;
100
+ for (const v of boundedVars)
101
+ accessedVars.delete(v);
102
+ return accessedVars;
107
103
  }