openalgo-script 0.5.0 → 0.7.0

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 (343) hide show
  1. package/CHANGELOG.md +226 -0
  2. package/README.md +53 -22
  3. package/dist/adapters/charts/run.d.ts.map +1 -1
  4. package/dist/adapters/charts/run.js +6 -0
  5. package/dist/adapters/charts/run.js.map +1 -1
  6. package/dist/adapters/charts/tables.d.ts +6 -19
  7. package/dist/adapters/charts/tables.d.ts.map +1 -1
  8. package/dist/adapters/charts/tables.js.map +1 -1
  9. package/dist/adapters/charts/undrawable.d.ts +4 -0
  10. package/dist/adapters/charts/undrawable.d.ts.map +1 -0
  11. package/dist/adapters/charts/undrawable.js +47 -0
  12. package/dist/adapters/charts/undrawable.js.map +1 -0
  13. package/dist/core/backtest/drive.d.ts +36 -1
  14. package/dist/core/backtest/drive.d.ts.map +1 -1
  15. package/dist/core/backtest/drive.js +13 -107
  16. package/dist/core/backtest/drive.js.map +1 -1
  17. package/dist/core/backtest/index.d.ts +2 -0
  18. package/dist/core/backtest/index.d.ts.map +1 -1
  19. package/dist/core/backtest/index.js.map +1 -1
  20. package/dist/core/backtest/walk.d.ts +39 -0
  21. package/dist/core/backtest/walk.d.ts.map +1 -0
  22. package/dist/core/backtest/walk.js +125 -0
  23. package/dist/core/backtest/walk.js.map +1 -0
  24. package/dist/core/catalogue/catalogue.generated.d.ts +178 -1
  25. package/dist/core/catalogue/catalogue.generated.d.ts.map +1 -1
  26. package/dist/core/catalogue/catalogue.generated.js +18 -1
  27. package/dist/core/catalogue/catalogue.generated.js.map +1 -1
  28. package/dist/core/catalogue/types.d.ts +8 -2
  29. package/dist/core/catalogue/types.d.ts.map +1 -1
  30. package/dist/core/catalogue/values.generated.d.ts +51 -0
  31. package/dist/core/catalogue/values.generated.d.ts.map +1 -1
  32. package/dist/core/check/assigned.d.ts +19 -0
  33. package/dist/core/check/assigned.d.ts.map +1 -0
  34. package/dist/core/check/assigned.js +14 -0
  35. package/dist/core/check/assigned.js.map +1 -0
  36. package/dist/core/check/call-sites.d.ts.map +1 -1
  37. package/dist/core/check/call-sites.js +9 -4
  38. package/dist/core/check/call-sites.js.map +1 -1
  39. package/dist/core/check/calls.d.ts.map +1 -1
  40. package/dist/core/check/calls.js +12 -4
  41. package/dist/core/check/calls.js.map +1 -1
  42. package/dist/core/check/check.d.ts.map +1 -1
  43. package/dist/core/check/check.js +15 -2
  44. package/dist/core/check/check.js.map +1 -1
  45. package/dist/core/check/checker.d.ts +26 -0
  46. package/dist/core/check/checker.d.ts.map +1 -1
  47. package/dist/core/check/checker.js +38 -2
  48. package/dist/core/check/checker.js.map +1 -1
  49. package/dist/core/check/constant.d.ts +16 -0
  50. package/dist/core/check/constant.d.ts.map +1 -1
  51. package/dist/core/check/constant.js +52 -0
  52. package/dist/core/check/constant.js.map +1 -1
  53. package/dist/core/check/deleted.d.ts +3 -0
  54. package/dist/core/check/deleted.d.ts.map +1 -0
  55. package/dist/core/check/deleted.js +109 -0
  56. package/dist/core/check/deleted.js.map +1 -0
  57. package/dist/core/check/expressions.js +1 -1
  58. package/dist/core/check/expressions.js.map +1 -1
  59. package/dist/core/check/library-output.d.ts.map +1 -1
  60. package/dist/core/check/library-output.js +1 -0
  61. package/dist/core/check/library-output.js.map +1 -1
  62. package/dist/core/check/library-prose.generated.js +10 -10
  63. package/dist/core/check/library-prose.generated.js.map +1 -1
  64. package/dist/core/check/library.d.ts +7 -0
  65. package/dist/core/check/library.d.ts.map +1 -1
  66. package/dist/core/check/library.js +1 -0
  67. package/dist/core/check/library.js.map +1 -1
  68. package/dist/core/check/surface.d.ts +9 -0
  69. package/dist/core/check/surface.d.ts.map +1 -1
  70. package/dist/core/check/surface.js +13 -0
  71. package/dist/core/check/surface.js.map +1 -1
  72. package/dist/core/engine/bar-source.d.ts +65 -0
  73. package/dist/core/engine/bar-source.d.ts.map +1 -0
  74. package/dist/core/engine/bar-source.js +58 -0
  75. package/dist/core/engine/bar-source.js.map +1 -0
  76. package/dist/core/engine/channels.js +2 -2
  77. package/dist/core/engine/channels.js.map +1 -1
  78. package/dist/core/engine/engine.d.ts +9 -11
  79. package/dist/core/engine/engine.d.ts.map +1 -1
  80. package/dist/core/engine/engine.js +26 -27
  81. package/dist/core/engine/engine.js.map +1 -1
  82. package/dist/core/engine/guard.d.ts.map +1 -1
  83. package/dist/core/engine/guard.js +10 -0
  84. package/dist/core/engine/guard.js.map +1 -1
  85. package/dist/core/engine/host.d.ts +4 -2
  86. package/dist/core/engine/host.d.ts.map +1 -1
  87. package/dist/core/engine/host.js.map +1 -1
  88. package/dist/core/engine/index.d.ts +1 -0
  89. package/dist/core/engine/index.d.ts.map +1 -1
  90. package/dist/core/engine/index.js.map +1 -1
  91. package/dist/core/engine/library/binding.d.ts +2 -0
  92. package/dist/core/engine/library/binding.d.ts.map +1 -1
  93. package/dist/core/engine/library/binding.js.map +1 -1
  94. package/dist/core/engine/library/index.d.ts +8 -0
  95. package/dist/core/engine/library/index.d.ts.map +1 -1
  96. package/dist/core/engine/library/index.js +10 -0
  97. package/dist/core/engine/library/index.js.map +1 -1
  98. package/dist/core/engine/library/maths.js +2 -2
  99. package/dist/core/engine/library/maths.js.map +1 -1
  100. package/dist/core/engine/library/objects.d.ts.map +1 -1
  101. package/dist/core/engine/library/objects.js +1 -1
  102. package/dist/core/engine/library/objects.js.map +1 -1
  103. package/dist/core/engine/machine.js +5 -5
  104. package/dist/core/engine/machine.js.map +1 -1
  105. package/dist/core/engine/memory.js +2 -2
  106. package/dist/core/engine/memory.js.map +1 -1
  107. package/dist/core/engine/registers.js +2 -2
  108. package/dist/core/engine/registers.js.map +1 -1
  109. package/dist/core/engine/request-body.d.ts +3 -1
  110. package/dist/core/engine/request-body.d.ts.map +1 -1
  111. package/dist/core/engine/request-body.js +3 -1
  112. package/dist/core/engine/request-body.js.map +1 -1
  113. package/dist/core/engine/request-plan.d.ts +3 -3
  114. package/dist/core/engine/request-plan.js +3 -3
  115. package/dist/core/engine/requests.d.ts +2 -2
  116. package/dist/core/engine/requests.d.ts.map +1 -1
  117. package/dist/core/engine/requests.js +5 -4
  118. package/dist/core/engine/requests.js.map +1 -1
  119. package/dist/core/engine/series.d.ts +18 -6
  120. package/dist/core/engine/series.d.ts.map +1 -1
  121. package/dist/core/engine/series.js +24 -5
  122. package/dist/core/engine/series.js.map +1 -1
  123. package/dist/core/engine/session/record.d.ts +4 -4
  124. package/dist/core/engine/session/record.js +4 -4
  125. package/dist/core/engine/values/index.d.ts +1 -1
  126. package/dist/core/engine/values/index.d.ts.map +1 -1
  127. package/dist/core/engine/values/index.js +1 -1
  128. package/dist/core/engine/values/index.js.map +1 -1
  129. package/dist/core/engine/values/value.d.ts +2 -0
  130. package/dist/core/engine/values/value.d.ts.map +1 -1
  131. package/dist/core/engine/values/value.js +4 -0
  132. package/dist/core/engine/values/value.js.map +1 -1
  133. package/dist/core/importer/calls.d.ts +29 -0
  134. package/dist/core/importer/calls.d.ts.map +1 -0
  135. package/dist/core/importer/calls.js +267 -0
  136. package/dist/core/importer/calls.js.map +1 -0
  137. package/dist/core/importer/context.d.ts +118 -0
  138. package/dist/core/importer/context.d.ts.map +1 -0
  139. package/dist/core/importer/context.js +120 -0
  140. package/dist/core/importer/context.js.map +1 -0
  141. package/dist/core/importer/expressions.d.ts +44 -0
  142. package/dist/core/importer/expressions.d.ts.map +1 -0
  143. package/dist/core/importer/expressions.js +223 -0
  144. package/dist/core/importer/expressions.js.map +1 -0
  145. package/dist/core/importer/importer.d.ts +13 -0
  146. package/dist/core/importer/importer.d.ts.map +1 -0
  147. package/dist/core/importer/importer.js +220 -0
  148. package/dist/core/importer/importer.js.map +1 -0
  149. package/dist/core/importer/index.d.ts +20 -0
  150. package/dist/core/importer/index.d.ts.map +1 -0
  151. package/dist/core/importer/index.js +18 -0
  152. package/dist/core/importer/index.js.map +1 -0
  153. package/dist/core/importer/lexer.d.ts +68 -0
  154. package/dist/core/importer/lexer.d.ts.map +1 -0
  155. package/dist/core/importer/lexer.js +207 -0
  156. package/dist/core/importer/lexer.js.map +1 -0
  157. package/dist/core/importer/names.d.ts +41 -0
  158. package/dist/core/importer/names.d.ts.map +1 -0
  159. package/dist/core/importer/names.js +78 -0
  160. package/dist/core/importer/names.js.map +1 -0
  161. package/dist/core/importer/orders.d.ts +8 -0
  162. package/dist/core/importer/orders.d.ts.map +1 -0
  163. package/dist/core/importer/orders.js +332 -0
  164. package/dist/core/importer/orders.js.map +1 -0
  165. package/dist/core/importer/outputs.d.ts +19 -0
  166. package/dist/core/importer/outputs.d.ts.map +1 -0
  167. package/dist/core/importer/outputs.js +266 -0
  168. package/dist/core/importer/outputs.js.map +1 -0
  169. package/dist/core/importer/parser.d.ts +5 -0
  170. package/dist/core/importer/parser.d.ts.map +1 -0
  171. package/dist/core/importer/parser.js +439 -0
  172. package/dist/core/importer/parser.js.map +1 -0
  173. package/dist/core/importer/presence.d.ts +32 -0
  174. package/dist/core/importer/presence.d.ts.map +1 -0
  175. package/dist/core/importer/presence.js +146 -0
  176. package/dist/core/importer/presence.js.map +1 -0
  177. package/dist/core/importer/settle.d.ts +23 -0
  178. package/dist/core/importer/settle.d.ts.map +1 -0
  179. package/dist/core/importer/settle.js +135 -0
  180. package/dist/core/importer/settle.js.map +1 -0
  181. package/dist/core/importer/statements.d.ts +4 -0
  182. package/dist/core/importer/statements.d.ts.map +1 -0
  183. package/dist/core/importer/statements.js +339 -0
  184. package/dist/core/importer/statements.js.map +1 -0
  185. package/dist/core/importer/syntax.d.ts +182 -0
  186. package/dist/core/importer/syntax.d.ts.map +1 -0
  187. package/dist/core/importer/syntax.js +14 -0
  188. package/dist/core/importer/syntax.js.map +1 -0
  189. package/dist/core/importer/table.d.ts +52 -0
  190. package/dist/core/importer/table.d.ts.map +1 -0
  191. package/dist/core/importer/table.js +156 -0
  192. package/dist/core/importer/table.js.map +1 -0
  193. package/dist/core/importer/values.d.ts +27 -0
  194. package/dist/core/importer/values.d.ts.map +1 -0
  195. package/dist/core/importer/values.js +236 -0
  196. package/dist/core/importer/values.js.map +1 -0
  197. package/dist/core/index.d.ts +12 -0
  198. package/dist/core/index.d.ts.map +1 -1
  199. package/dist/core/index.js +11 -0
  200. package/dist/core/index.js.map +1 -1
  201. package/dist/core/stdlib/averages/exponential.d.ts.map +1 -1
  202. package/dist/core/stdlib/averages/exponential.js +3 -6
  203. package/dist/core/stdlib/averages/exponential.js.map +1 -1
  204. package/dist/core/stdlib/averages/gaussian.d.ts +15 -0
  205. package/dist/core/stdlib/averages/gaussian.d.ts.map +1 -0
  206. package/dist/core/stdlib/averages/gaussian.js +55 -0
  207. package/dist/core/stdlib/averages/gaussian.js.map +1 -0
  208. package/dist/core/stdlib/averages/shaped.d.ts +2 -6
  209. package/dist/core/stdlib/averages/shaped.d.ts.map +1 -1
  210. package/dist/core/stdlib/averages/shaped.js +8 -22
  211. package/dist/core/stdlib/averages/shaped.js.map +1 -1
  212. package/dist/core/stdlib/calendar/civil.d.ts.map +1 -1
  213. package/dist/core/stdlib/calendar/civil.js +5 -2
  214. package/dist/core/stdlib/calendar/civil.js.map +1 -1
  215. package/dist/core/stdlib/maths/arithmetic.d.ts.map +1 -1
  216. package/dist/core/stdlib/maths/arithmetic.js +2 -1
  217. package/dist/core/stdlib/maths/arithmetic.js.map +1 -1
  218. package/dist/core/stdlib/maths/elementary.d.ts +3 -20
  219. package/dist/core/stdlib/maths/elementary.d.ts.map +1 -1
  220. package/dist/core/stdlib/maths/elementary.js +17 -13
  221. package/dist/core/stdlib/maths/elementary.js.map +1 -1
  222. package/dist/core/stdlib/maths/hypot.d.ts +8 -0
  223. package/dist/core/stdlib/maths/hypot.d.ts.map +1 -0
  224. package/dist/core/stdlib/maths/hypot.js +68 -0
  225. package/dist/core/stdlib/maths/hypot.js.map +1 -0
  226. package/dist/core/stdlib/maths/power.d.ts +3 -0
  227. package/dist/core/stdlib/maths/power.d.ts.map +1 -0
  228. package/dist/core/stdlib/maths/power.js +83 -0
  229. package/dist/core/stdlib/maths/power.js.map +1 -0
  230. package/dist/core/stdlib/maths/transcendental.d.ts +15 -0
  231. package/dist/core/stdlib/maths/transcendental.d.ts.map +1 -0
  232. package/dist/core/stdlib/maths/transcendental.js +185 -0
  233. package/dist/core/stdlib/maths/transcendental.js.map +1 -0
  234. package/dist/core/stdlib/maths/trigonometric.d.ts +4 -0
  235. package/dist/core/stdlib/maths/trigonometric.d.ts.map +1 -0
  236. package/dist/core/stdlib/maths/trigonometric.js +196 -0
  237. package/dist/core/stdlib/maths/trigonometric.js.map +1 -0
  238. package/dist/core/stdlib/series/conditions.d.ts +2 -4
  239. package/dist/core/stdlib/series/conditions.d.ts.map +1 -1
  240. package/dist/core/stdlib/series/conditions.js +9 -13
  241. package/dist/core/stdlib/series/conditions.js.map +1 -1
  242. package/dist/core/stdlib/series/statistics.d.ts.map +1 -1
  243. package/dist/core/stdlib/series/statistics.js +2 -0
  244. package/dist/core/stdlib/series/statistics.js.map +1 -1
  245. package/dist/core/stdlib/values/history.d.ts +26 -0
  246. package/dist/core/stdlib/values/history.d.ts.map +1 -0
  247. package/dist/core/stdlib/values/history.js +52 -0
  248. package/dist/core/stdlib/values/history.js.map +1 -0
  249. package/dist/core/stdlib/values/index.d.ts +1 -0
  250. package/dist/core/stdlib/values/index.d.ts.map +1 -1
  251. package/dist/core/stdlib/values/index.js +1 -0
  252. package/dist/core/stdlib/values/index.js.map +1 -1
  253. package/dist/core/stdlib/values/lookback.d.ts +4 -1
  254. package/dist/core/stdlib/values/lookback.d.ts.map +1 -1
  255. package/dist/core/stdlib/values/lookback.js +48 -45
  256. package/dist/core/stdlib/values/lookback.js.map +1 -1
  257. package/dist/core/stdlib/values/region.d.ts +6 -5
  258. package/dist/core/stdlib/values/region.d.ts.map +1 -1
  259. package/dist/core/stdlib/values/region.js +3 -3
  260. package/dist/core/stdlib/values/region.js.map +1 -1
  261. package/dist/core/stdlib/volatility/measures.d.ts.map +1 -1
  262. package/dist/core/stdlib/volatility/measures.js +6 -4
  263. package/dist/core/stdlib/volatility/measures.js.map +1 -1
  264. package/dist/core/version/version.generated.d.ts +1 -1
  265. package/dist/core/version/version.generated.js +1 -1
  266. package/package.json +13 -2
  267. package/spec/errors.json +380 -20
  268. package/src/adapters/charts/run.ts +6 -0
  269. package/src/adapters/charts/tables.ts +6 -19
  270. package/src/adapters/charts/undrawable.ts +51 -0
  271. package/src/core/backtest/drive.ts +66 -154
  272. package/src/core/backtest/index.ts +2 -0
  273. package/src/core/backtest/walk.ts +182 -0
  274. package/src/core/catalogue/catalogue.generated.ts +18 -1
  275. package/src/core/catalogue/types.ts +8 -2
  276. package/src/core/catalogue/values.generated.ts +16 -0
  277. package/src/core/check/assigned.ts +31 -0
  278. package/src/core/check/call-sites.ts +11 -4
  279. package/src/core/check/calls.ts +13 -4
  280. package/src/core/check/check.ts +14 -2
  281. package/src/core/check/checker.ts +39 -2
  282. package/src/core/check/constant.ts +57 -0
  283. package/src/core/check/deleted.ts +135 -0
  284. package/src/core/check/expressions.ts +1 -1
  285. package/src/core/check/library-output.ts +1 -0
  286. package/src/core/check/library-prose.generated.ts +10 -10
  287. package/src/core/check/library.ts +8 -0
  288. package/src/core/check/surface.ts +16 -0
  289. package/src/core/engine/bar-source.ts +113 -0
  290. package/src/core/engine/channels.ts +2 -2
  291. package/src/core/engine/engine.ts +29 -28
  292. package/src/core/engine/guard.ts +12 -1
  293. package/src/core/engine/host.ts +4 -2
  294. package/src/core/engine/index.ts +1 -0
  295. package/src/core/engine/library/binding.ts +2 -0
  296. package/src/core/engine/library/index.ts +11 -0
  297. package/src/core/engine/library/maths.ts +2 -2
  298. package/src/core/engine/library/objects.ts +1 -6
  299. package/src/core/engine/machine.ts +5 -5
  300. package/src/core/engine/memory.ts +2 -2
  301. package/src/core/engine/registers.ts +2 -2
  302. package/src/core/engine/request-body.ts +5 -7
  303. package/src/core/engine/request-plan.ts +3 -3
  304. package/src/core/engine/requests.ts +11 -8
  305. package/src/core/engine/series.ts +30 -6
  306. package/src/core/engine/session/record.ts +4 -4
  307. package/src/core/engine/values/index.ts +1 -0
  308. package/src/core/engine/values/value.ts +5 -0
  309. package/src/core/importer/calls.ts +274 -0
  310. package/src/core/importer/context.ts +197 -0
  311. package/src/core/importer/expressions.ts +247 -0
  312. package/src/core/importer/importer.ts +226 -0
  313. package/src/core/importer/index.ts +19 -0
  314. package/src/core/importer/lexer.ts +285 -0
  315. package/src/core/importer/names.ts +104 -0
  316. package/src/core/importer/orders.ts +307 -0
  317. package/src/core/importer/outputs.ts +245 -0
  318. package/src/core/importer/parser.ts +436 -0
  319. package/src/core/importer/presence.ts +164 -0
  320. package/src/core/importer/settle.ts +141 -0
  321. package/src/core/importer/statements.ts +331 -0
  322. package/src/core/importer/syntax.ts +144 -0
  323. package/src/core/importer/table.ts +191 -0
  324. package/src/core/importer/values.ts +241 -0
  325. package/src/core/index.ts +13 -0
  326. package/src/core/stdlib/averages/exponential.ts +3 -4
  327. package/src/core/stdlib/averages/gaussian.ts +52 -0
  328. package/src/core/stdlib/averages/shaped.ts +8 -21
  329. package/src/core/stdlib/calendar/civil.ts +5 -2
  330. package/src/core/stdlib/maths/arithmetic.ts +2 -1
  331. package/src/core/stdlib/maths/elementary.ts +20 -33
  332. package/src/core/stdlib/maths/hypot.ts +63 -0
  333. package/src/core/stdlib/maths/power.ts +57 -0
  334. package/src/core/stdlib/maths/transcendental.ts +160 -0
  335. package/src/core/stdlib/maths/trigonometric.ts +160 -0
  336. package/src/core/stdlib/series/conditions.ts +9 -12
  337. package/src/core/stdlib/series/statistics.ts +1 -0
  338. package/src/core/stdlib/values/history.ts +70 -0
  339. package/src/core/stdlib/values/index.ts +1 -0
  340. package/src/core/stdlib/values/lookback.ts +51 -47
  341. package/src/core/stdlib/values/region.ts +7 -5
  342. package/src/core/stdlib/volatility/measures.ts +6 -4
  343. package/src/core/version/version.generated.ts +1 -1
@@ -62,6 +62,10 @@ export function numberValue(x) {
62
62
  return ABSENT;
63
63
  return x === 0 ? 0 : x;
64
64
  }
65
+ /** Normalise numeric zero at a store or identity result, preserving every other tag. */
66
+ export function storedValue(value) {
67
+ return typeof value === 'number' && value === 0 ? 0 : value;
68
+ }
65
69
  /** The name of a value's tag, for a diagnostic that has to say what it found. */
66
70
  export function tagOf(value) {
67
71
  if (value === null)
@@ -1 +1 @@
1
- {"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../src/core/engine/values/value.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../src/core/engine/values/value.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Context } from './context.js';
2
+ import type { Arg, CallExpr, Place } from './syntax.js';
3
+ import type { Mapping } from './table.js';
4
+ import type { Out } from './values.js';
5
+ /** A call's arguments against a parameter list: by name, and what fitted none. */
6
+ export interface Bound {
7
+ readonly byName: ReadonlyMap<string, Arg>;
8
+ /** Arguments past the positional list, named by their position. */
9
+ readonly stray: readonly {
10
+ readonly arg: Arg;
11
+ readonly name: string;
12
+ }[];
13
+ }
14
+ export declare function bind(call: CallExpr, positional: readonly string[]): Bound;
15
+ /**
16
+ * Refuses the first argument that is not one of `known`, with OS9006. Returns
17
+ * whether the call may go on.
18
+ */
19
+ export declare function onlyKnown(ctx: Context, path: string, bound: Bound, known: readonly string[]): boolean;
20
+ /** OS9007, once per built-in: its first bars follow OpenScript's own rules. */
21
+ export declare function warmupNote(ctx: Context, at: Place, call: string, target: string): void;
22
+ /** The translated text of one argument, or undefined where the call left it out. */
23
+ export declare function argText(ctx: Context, bound: Bound, name: string): string | undefined;
24
+ /** A row whose arguments line up one to one, which is most of the table. */
25
+ export declare function generic(ctx: Context, call: CallExpr, row: Mapping, path: string): Out;
26
+ /** `ta.tr` read as a value, which is the call with `handle_na` false. */
27
+ export declare function trueRangeValue(): Out;
28
+ export declare function translateCall(ctx: Context, call: CallExpr): Out;
29
+ //# sourceMappingURL=calls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/core/importer/calls.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,kFAAkF;AAClF,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzE;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAezE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAYrG;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtF;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpF;AAsBD,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAUrF;AAWD,yEAAyE;AACzE,wBAAgB,cAAc,IAAI,GAAG,CAEpC;AAqGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,GAAG,CA8C/D"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Calls, written out as OpenScript text.
3
+ *
4
+ * A call to a function the script declares keeps its arguments, with a named
5
+ * argument's label following the parameter's new spelling where it was renamed.
6
+ * A call to a built-in is translated from its row in the table, one argument to
7
+ * one argument where they line up, and by a translator of its own where they do
8
+ * not: the highest and lowest of a window that default their source, a
9
+ * deviation whose `biased` flag is the negation of OpenScript's `sample`, a
10
+ * true range whose absent first bar is a flag, and the handful of conversions
11
+ * that are an expression rather than a call in OpenScript.
12
+ *
13
+ * A call that draws or trades is a statement, not a value, and its translator
14
+ * lives with the other statements; used as a value it is refused.
15
+ */
16
+ import { diagnosticFor } from '../diagnostics/index.js';
17
+ import { canonicalNumber } from '../emit/index.js';
18
+ import { levelCall, plotCall, translateInput } from './outputs.js';
19
+ import { neverAbsent } from './presence.js';
20
+ import { pathOf } from './syntax.js';
21
+ import { CALLS } from './table.js';
22
+ import { NOTHING, PREC, atom, translate, wrap } from './values.js';
23
+ export function bind(call, positional) {
24
+ const byName = new Map();
25
+ const stray = [];
26
+ let position = 0;
27
+ for (const arg of call.args) {
28
+ if (arg.label !== undefined) {
29
+ byName.set(arg.label, arg);
30
+ continue;
31
+ }
32
+ const name = positional[position];
33
+ if (name === undefined)
34
+ stray.push({ arg, name: `argument ${canonicalNumber(position + 1)}` });
35
+ else
36
+ byName.set(name, arg);
37
+ position += 1;
38
+ }
39
+ return { byName, stray };
40
+ }
41
+ /**
42
+ * Refuses the first argument that is not one of `known`, with OS9006. Returns
43
+ * whether the call may go on.
44
+ */
45
+ export function onlyKnown(ctx, path, bound, known) {
46
+ const first = bound.stray[0];
47
+ if (first !== undefined) {
48
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(first.arg.at), { argument: first.name, call: path }));
49
+ return false;
50
+ }
51
+ for (const [name, arg] of bound.byName) {
52
+ if (known.includes(name))
53
+ continue;
54
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(arg.at), { argument: name, call: path }));
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ /** OS9007, once per built-in: its first bars follow OpenScript's own rules. */
60
+ export function warmupNote(ctx, at, call, target) {
61
+ ctx.note(diagnosticFor('OS9007', ctx.span(at), { call, target }), `OS9007 ${call}`);
62
+ }
63
+ /** The translated text of one argument, or undefined where the call left it out. */
64
+ export function argText(ctx, bound, name) {
65
+ const arg = bound.byName.get(name);
66
+ return arg === undefined ? undefined : translate(ctx, arg.value).text;
67
+ }
68
+ /** Arguments by position up to the first one left out, and by name after it. */
69
+ function written(texts, labels) {
70
+ const parts = [];
71
+ let gap = false;
72
+ for (let i = 0; i < texts.length; i += 1) {
73
+ const text = texts[i];
74
+ if (text === undefined) {
75
+ gap = true;
76
+ continue;
77
+ }
78
+ if (!gap)
79
+ parts.push(text);
80
+ else {
81
+ const label = labels[i];
82
+ if (label === undefined)
83
+ return undefined;
84
+ parts.push(`${label} = ${text}`);
85
+ }
86
+ }
87
+ return parts;
88
+ }
89
+ /** A row whose arguments line up one to one, which is most of the table. */
90
+ export function generic(ctx, call, row, path) {
91
+ const bound = bind(call, row.params);
92
+ if (!onlyKnown(ctx, path, bound, row.params))
93
+ return NOTHING;
94
+ const parts = written(row.params.map((name) => argText(ctx, bound, name)), row.targets);
95
+ if (parts === undefined) {
96
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: 'an argument left out before another', call: path }));
97
+ return NOTHING;
98
+ }
99
+ if (row.difference === 'warmup')
100
+ warmupNote(ctx, call.callee.at, path, row.target);
101
+ return atom(`${row.target}(${parts.join(', ')})`);
102
+ }
103
+ function userCall(ctx, call, binding) {
104
+ const parts = call.args.map((arg) => {
105
+ const text = translate(ctx, arg.value).text;
106
+ if (arg.label === undefined)
107
+ return text;
108
+ return `${binding.labels?.get(arg.label) ?? arg.label} = ${text}`;
109
+ });
110
+ return atom(`${binding.output}(${parts.join(', ')})`);
111
+ }
112
+ /** `ta.tr` read as a value, which is the call with `handle_na` false. */
113
+ export function trueRangeValue() {
114
+ return { text: 'isNone(close[1]) ? none : trueRange()', prec: PREC.ternary };
115
+ }
116
+ function trueRangeCall(ctx, call, path) {
117
+ const bound = bind(call, ['handle_na']);
118
+ if (!onlyKnown(ctx, path, bound, ['handle_na']))
119
+ return NOTHING;
120
+ const flag = bound.byName.get('handle_na')?.value;
121
+ if (flag === undefined || (flag.kind === 'bool' && !flag.value))
122
+ return trueRangeValue();
123
+ if (flag.kind === 'bool')
124
+ return atom('trueRange()');
125
+ const handled = translate(ctx, flag);
126
+ return { text: `${wrap(handled, PREC.or)} or not isNone(close[1]) ? trueRange() : none`, prec: PREC.ternary };
127
+ }
128
+ function extreme(ctx, call, row, path) {
129
+ const one = call.args.length === 1 && call.args[0]?.label === undefined;
130
+ const bound = bind(call, one ? ['length'] : ['source', 'length']);
131
+ if (!onlyKnown(ctx, path, bound, ['source', 'length']))
132
+ return NOTHING;
133
+ const source = argText(ctx, bound, 'source') ?? (row.target === 'highest' ? 'high' : 'low');
134
+ const length = argText(ctx, bound, 'length');
135
+ if (length === undefined) {
136
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: 'length', call: path }));
137
+ return NOTHING;
138
+ }
139
+ warmupNote(ctx, call.callee.at, path, row.target);
140
+ return atom(`${row.target}(${source}, ${length})`);
141
+ }
142
+ function deviation(ctx, call, row, path) {
143
+ const bound = bind(call, row.params);
144
+ if (!onlyKnown(ctx, path, bound, row.params))
145
+ return NOTHING;
146
+ const source = argText(ctx, bound, 'source');
147
+ const length = argText(ctx, bound, 'length');
148
+ if (source === undefined || length === undefined) {
149
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: source === undefined ? 'source' : 'length', call: path }));
150
+ return NOTHING;
151
+ }
152
+ const biased = bound.byName.get('biased')?.value;
153
+ let sample = '';
154
+ if (biased !== undefined && !(biased.kind === 'bool' && biased.value)) {
155
+ sample = biased.kind === 'bool' ? ', sample = true' : `, sample = not ${wrap(translate(ctx, biased), PREC.unary)}`;
156
+ }
157
+ warmupNote(ctx, call.callee.at, path, row.target);
158
+ return atom(`${row.target}(${source}, ${length}${sample})`);
159
+ }
160
+ /** A condition handed to a counting built-in, which the source dialect never sees absent. */
161
+ function condition(ctx, call, row, path) {
162
+ const bound = bind(call, row.params);
163
+ if (!onlyKnown(ctx, path, bound, row.params))
164
+ return NOTHING;
165
+ const texts = row.params.map((name) => {
166
+ const arg = bound.byName.get(name);
167
+ if (arg === undefined)
168
+ return undefined;
169
+ const text = translate(ctx, arg.value).text;
170
+ return name === 'condition' && !neverAbsent(ctx, arg.value) ? `orElse(${text}, false)` : text;
171
+ });
172
+ const parts = written(texts, row.targets);
173
+ if (parts === undefined || texts[0] === undefined) {
174
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: 'condition', call: path }));
175
+ return NOTHING;
176
+ }
177
+ warmupNote(ctx, call.callee.at, path, row.target);
178
+ return atom(`${row.target}(${parts.join(', ')})`);
179
+ }
180
+ /** `math.max` and `math.min` take any number of arguments; OpenScript's take two. */
181
+ function extremes(ctx, call, row, path) {
182
+ const labelled = call.args.find((arg) => arg.label !== undefined);
183
+ if (labelled !== undefined || call.args.length < 2) {
184
+ const at = labelled?.at ?? call.at;
185
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(at), { argument: labelled?.label ?? 'a single argument', call: path }));
186
+ return NOTHING;
187
+ }
188
+ const texts = call.args.map((arg) => translate(ctx, arg.value).text);
189
+ let text = texts[0] ?? '';
190
+ for (const next of texts.slice(1))
191
+ text = `${row.target}(${text}, ${next})`;
192
+ return atom(text);
193
+ }
194
+ function fallback(ctx, call, row, path) {
195
+ const bound = bind(call, row.params);
196
+ if (!onlyKnown(ctx, path, bound, row.params))
197
+ return NOTHING;
198
+ const source = argText(ctx, bound, 'source');
199
+ if (source === undefined) {
200
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: 'source', call: path }));
201
+ return NOTHING;
202
+ }
203
+ return atom(`orElse(${source}, ${argText(ctx, bound, 'replacement') ?? '0'})`);
204
+ }
205
+ function rgb(ctx, call, row, path) {
206
+ const bound = bind(call, row.params);
207
+ if (!onlyKnown(ctx, path, bound, row.params))
208
+ return NOTHING;
209
+ const channels = ['red', 'green', 'blue'].map((name) => argText(ctx, bound, name));
210
+ if (channels.some((one) => one === undefined)) {
211
+ ctx.refuse(diagnosticFor('OS9006', ctx.span(call.at), { argument: 'a colour channel', call: path }));
212
+ return NOTHING;
213
+ }
214
+ const colour = `rgb(${channels.join(', ')})`;
215
+ const transp = argText(ctx, bound, 'transp');
216
+ return atom(transp === undefined ? colour : `fade(${colour}, ${transp})`);
217
+ }
218
+ export function translateCall(ctx, call) {
219
+ const path = pathOf(call.callee);
220
+ const root = path?.split('.')[0];
221
+ const binding = root === undefined ? undefined : ctx.lookup(root, call.callee.at);
222
+ if (path === undefined || (binding !== undefined && (path !== root || binding.kind !== 'function'))) {
223
+ ctx.refuse(diagnosticFor('OS9002', ctx.span(call.callee.at), { construct: 'a call on a value' }));
224
+ return NOTHING;
225
+ }
226
+ if (binding !== undefined)
227
+ return userCall(ctx, call, binding);
228
+ const row = CALLS.get(path);
229
+ if (row === undefined) {
230
+ ctx.refuse(diagnosticFor('OS9003', ctx.span(call.callee.at), { name: path }));
231
+ return NOTHING;
232
+ }
233
+ switch (row.special) {
234
+ case undefined:
235
+ return generic(ctx, call, row, path);
236
+ case 'trueRange':
237
+ return trueRangeCall(ctx, call, path);
238
+ case 'extreme':
239
+ return extreme(ctx, call, row, path);
240
+ case 'deviation':
241
+ return deviation(ctx, call, row, path);
242
+ case 'condition':
243
+ return condition(ctx, call, row, path);
244
+ case 'extremes':
245
+ return extremes(ctx, call, row, path);
246
+ case 'fallback':
247
+ return fallback(ctx, call, row, path);
248
+ case 'rgb':
249
+ return rgb(ctx, call, row, path);
250
+ case 'float': {
251
+ const bound = bind(call, row.params);
252
+ if (!onlyKnown(ctx, path, bound, row.params))
253
+ return NOTHING;
254
+ const arg = bound.byName.get('x');
255
+ return arg === undefined ? atom('none') : atom(`(${translate(ctx, arg.value).text})`);
256
+ }
257
+ case 'input':
258
+ return translateInput(ctx, call, path, false);
259
+ case 'plot':
260
+ return plotCall(ctx, call, path);
261
+ case 'hline':
262
+ return levelCall(ctx, call, path);
263
+ }
264
+ ctx.refuse(diagnosticFor('OS9002', ctx.span(call.callee.at), { construct: `${path} used as a value` }));
265
+ return NOTHING;
266
+ }
267
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../src/core/importer/calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * What the translators share while they work through one script.
3
+ *
4
+ * A translation is kept or refused per top level statement, never per line
5
+ * inside one: a block with one line missing is a block that means something
6
+ * the original did not, so the unit that is kept as a comment is the whole
7
+ * statement at the top level. `Node` is that unit, and everything a refusal or
8
+ * a warning needs to point at is recorded against it rather than decided on the
9
+ * spot, because a statement translated now can still be refused later: by the
10
+ * compiler, or because an earlier statement it reads was refused.
11
+ */
12
+ import type { Diagnostic } from '../diagnostics/index.js';
13
+ import type { SourceFile } from '../source/index.js';
14
+ import type { Span } from '../span/index.js';
15
+ import { Namer, Scope } from './names.js';
16
+ import type { Binding } from './names.js';
17
+ import type { Expr, Lines, Named, Place, Stmt } from './syntax.js';
18
+ export interface OutLine {
19
+ readonly depth: number;
20
+ readonly text: string;
21
+ }
22
+ /** A finding on a statement that is kept, and the key that makes it once per script where it is once per built-in. */
23
+ export interface Note {
24
+ readonly diagnostic: Diagnostic;
25
+ readonly once: string | undefined;
26
+ }
27
+ export interface Node {
28
+ readonly stmt: Stmt;
29
+ readonly lines: Lines;
30
+ /** Top level names the statement declares, so what reads them can follow it. */
31
+ readonly declares: readonly Named[];
32
+ /** Top level names it reads, in source order, with where. */
33
+ readonly reads: Named[];
34
+ output: OutLine[];
35
+ /** Why its translation was refused, if it was. */
36
+ refusal: Diagnostic | undefined;
37
+ /** Why the compiler refused the translation, if it did. */
38
+ failed: Diagnostic | undefined;
39
+ /** Why it reads a name a refused statement declared, recomputed on every pass. */
40
+ lost: Diagnostic | undefined;
41
+ readonly notes: Note[];
42
+ /** The declaration, which is placed first and is never kept as a comment. */
43
+ readonly declaration: boolean;
44
+ }
45
+ export declare function isKept(node: Node): boolean;
46
+ /** The first reason a node is not kept, in the order the reasons are found. */
47
+ export declare function reasonOf(node: Node): Diagnostic | undefined;
48
+ export type Version = 5 | 6;
49
+ export interface Reassignment {
50
+ readonly op: string;
51
+ readonly value: Expr;
52
+ }
53
+ /** Everything about the script the translators need before they start. */
54
+ export interface Facts {
55
+ readonly file: SourceFile;
56
+ readonly version: Version;
57
+ /** Every identifier the source writes. */
58
+ readonly used: ReadonlySet<string>;
59
+ /**
60
+ * Every reassignment the source makes, by name, anywhere in the file. A name
61
+ * with any is never a constant, and is present only if every value it is
62
+ * given is.
63
+ */
64
+ readonly reassigned: ReadonlyMap<string, readonly Reassignment[]>;
65
+ /**
66
+ * Every name the file declares at the top level, wherever. OpenScript lets a
67
+ * block or a function see one declared below it, so an inner declaration of
68
+ * the same name is renamed, which the source dialect's meaning allows.
69
+ */
70
+ readonly globals: ReadonlySet<string>;
71
+ /** The side each literal entry id opens, from the script's entry calls. */
72
+ readonly entries: ReadonlyMap<string, 'long' | 'short'>;
73
+ }
74
+ export declare class Context {
75
+ readonly namer: Namer;
76
+ readonly fileScope: Scope;
77
+ scope: Scope;
78
+ /** The statement being translated. */
79
+ node: Node | undefined;
80
+ /** Lines a statement needs evaluated before it, and whether it may have them. */
81
+ hoisted: OutLine[];
82
+ mayHoist: boolean;
83
+ /** Inside a ternary arm, where the source dialect evaluates lazily as OpenScript does. */
84
+ lazy: number;
85
+ depth: number;
86
+ /** The declaration's pyramiding, read as the source dialect reads it: 0 is 1. */
87
+ pyramiding: number;
88
+ /**
89
+ * Whether the declaration sizes orders in units. The source dialect counts a
90
+ * quantity written on an entry in contracts whatever the declaration says,
91
+ * and OpenScript counts it in the declaration's own unit.
92
+ */
93
+ qtyInUnits: boolean;
94
+ readonly titles: Map<string, Set<string>>;
95
+ readonly facts: Facts;
96
+ constructor(facts: Facts);
97
+ span(at: Place): Span;
98
+ /** Records the first reason the current statement cannot be translated. */
99
+ refuse(diagnostic: Diagnostic): void;
100
+ get refused(): boolean;
101
+ note(diagnostic: Diagnostic, once?: string): void;
102
+ /** Whether declaring `name` in the current scope needs a new spelling to keep it apart. */
103
+ hides(name: string): boolean;
104
+ /** The binding a source name has here, recording a read of a top level one. */
105
+ lookup(name: string, at: Place): Binding | undefined;
106
+ /** Enters a block scope for the length of `work`. */
107
+ within<T>(work: () => T): T;
108
+ /**
109
+ * Moves an expression to its own line before the current statement, and
110
+ * returns the name it is read under, or undefined where it cannot be moved.
111
+ */
112
+ hoist(text: string): string | undefined;
113
+ /** A title for a declared output that no other output of its kind has. */
114
+ title(kind: string, wanted: string): string;
115
+ }
116
+ /** A string literal in OpenScript's spelling of it (`language.md` 3.6). */
117
+ export declare function quoted(value: string): string;
118
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/importer/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { canonicalNumber } from '../emit/index.js';
2
+ import { Namer, Scope } from './names.js';
3
+ export function isKept(node) {
4
+ return node.refusal === undefined && node.failed === undefined && node.lost === undefined;
5
+ }
6
+ /** The first reason a node is not kept, in the order the reasons are found. */
7
+ export function reasonOf(node) {
8
+ return node.refusal ?? node.failed ?? node.lost;
9
+ }
10
+ export class Context {
11
+ namer;
12
+ fileScope = new Scope(undefined);
13
+ scope = this.fileScope;
14
+ /** The statement being translated. */
15
+ node;
16
+ /** Lines a statement needs evaluated before it, and whether it may have them. */
17
+ hoisted = [];
18
+ mayHoist = false;
19
+ /** Inside a ternary arm, where the source dialect evaluates lazily as OpenScript does. */
20
+ lazy = 0;
21
+ depth = 0;
22
+ /** The declaration's pyramiding, read as the source dialect reads it: 0 is 1. */
23
+ pyramiding = 1;
24
+ /**
25
+ * Whether the declaration sizes orders in units. The source dialect counts a
26
+ * quantity written on an entry in contracts whatever the declaration says,
27
+ * and OpenScript counts it in the declaration's own unit.
28
+ */
29
+ qtyInUnits = true;
30
+ titles = new Map();
31
+ facts;
32
+ constructor(facts) {
33
+ this.facts = facts;
34
+ this.namer = new Namer(facts.used);
35
+ }
36
+ span(at) {
37
+ return this.facts.file.spanAt(at.offset, at.length);
38
+ }
39
+ /** Records the first reason the current statement cannot be translated. */
40
+ refuse(diagnostic) {
41
+ if (this.node !== undefined && this.node.refusal === undefined)
42
+ this.node.refusal = diagnostic;
43
+ }
44
+ get refused() {
45
+ return this.node?.refusal !== undefined;
46
+ }
47
+ note(diagnostic, once) {
48
+ this.node?.notes.push({ diagnostic, once });
49
+ }
50
+ /** Whether declaring `name` in the current scope needs a new spelling to keep it apart. */
51
+ hides(name) {
52
+ return this.scope.find(name) !== undefined || (!this.scope.isGlobal && this.facts.globals.has(name));
53
+ }
54
+ /** The binding a source name has here, recording a read of a top level one. */
55
+ lookup(name, at) {
56
+ const found = this.scope.find(name);
57
+ if (found !== undefined && found.topLevel)
58
+ this.node?.reads.push({ name, at });
59
+ return found;
60
+ }
61
+ /** Enters a block scope for the length of `work`. */
62
+ within(work) {
63
+ const outer = this.scope;
64
+ this.scope = new Scope(outer);
65
+ try {
66
+ return work();
67
+ }
68
+ finally {
69
+ this.scope = outer;
70
+ }
71
+ }
72
+ /**
73
+ * Moves an expression to its own line before the current statement, and
74
+ * returns the name it is read under, or undefined where it cannot be moved.
75
+ */
76
+ hoist(text) {
77
+ if (!this.mayHoist || this.lazy > 0)
78
+ return undefined;
79
+ const name = this.namer.fresh('everyBar');
80
+ this.hoisted.push({ depth: this.depth, text: `${name} = ${text}` });
81
+ return name;
82
+ }
83
+ /** A title for a declared output that no other output of its kind has. */
84
+ title(kind, wanted) {
85
+ let seen = this.titles.get(kind);
86
+ if (seen === undefined) {
87
+ seen = new Set();
88
+ this.titles.set(kind, seen);
89
+ }
90
+ let title = wanted;
91
+ for (let n = 2; seen.has(title); n += 1)
92
+ title = `${wanted} ${canonicalNumber(n)}`;
93
+ seen.add(title);
94
+ return title;
95
+ }
96
+ }
97
+ const HEX = '0123456789abcdef';
98
+ /** A string literal in OpenScript's spelling of it (`language.md` 3.6). */
99
+ export function quoted(value) {
100
+ let out = '"';
101
+ for (const c of value) {
102
+ const code = c.codePointAt(0) ?? 0;
103
+ if (c === '"')
104
+ out += '\\"';
105
+ else if (c === '\\')
106
+ out += '\\\\';
107
+ else if (c === '\n')
108
+ out += '\\n';
109
+ else if (c === '\t')
110
+ out += '\\t';
111
+ else if (c === '\r')
112
+ out += '\\r';
113
+ else if (code < 0x20)
114
+ out += `\\u00${HEX[code >> 4] ?? '0'}${HEX[code & 15] ?? '0'}`;
115
+ else
116
+ out += c;
117
+ }
118
+ return `${out}"`;
119
+ }
120
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/importer/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Expressions in the source dialect, read by recursive descent.
3
+ *
4
+ * The precedence ladder is the source dialect's, and it is the same shape as
5
+ * OpenScript's (`language.md` 9.1): the ternary lowest, then `or`, `and`,
6
+ * equality, comparison, the additive and multiplicative operators, and the
7
+ * unary operators with `not` among them. So a tree read here prints back into
8
+ * OpenScript with parentheses only where the tree needs them, and never with a
9
+ * different grouping.
10
+ *
11
+ * What the reader does not accept it reports by throwing `Unreadable` with the
12
+ * place and a few words naming the form, and the statement reader turns that
13
+ * into a statement kept whole. It is the one exception in the importer, and it
14
+ * never leaves this module and the statement reader beside it.
15
+ */
16
+ import type { Token } from './lexer.js';
17
+ import type { Expr, Place } from './syntax.js';
18
+ /** A form the reader does not accept, and where it starts. */
19
+ export declare class Unreadable extends Error {
20
+ readonly at: Place;
21
+ readonly construct: string;
22
+ constructor(at: Place, construct: string);
23
+ }
24
+ /** The words the reader takes for a form it does not read, per bad token. */
25
+ export declare function badConstruct(token: Token): string;
26
+ export declare const UNREAD = "a statement in a form its reader does not accept";
27
+ export declare class Cursor {
28
+ index: number;
29
+ readonly tokens: readonly Token[];
30
+ constructor(tokens: readonly Token[]);
31
+ peek(ahead?: number): Token | undefined;
32
+ /** Whether the next token is this operator or word. */
33
+ sees(text: string, ahead?: number): boolean;
34
+ done(): boolean;
35
+ take(): Token;
36
+ expect(text: string): Token;
37
+ /** Refuse at the next token, or at the end of the line when there is none. */
38
+ fail(): never;
39
+ /** Zero width, just after the last token. */
40
+ endPlace(): Place;
41
+ }
42
+ export declare function placeOf(token: Token): Place;
43
+ export declare function expression(c: Cursor): Expr;
44
+ //# sourceMappingURL=expressions.d.ts.map