functionalscript 0.3.4 → 0.3.6

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 (457) hide show
  1. package/com/cpp/module.f.d.ts +10 -0
  2. package/com/cpp/module.f.js +107 -0
  3. package/com/cpp/test.f.d.ts +2 -0
  4. package/com/cpp/{test.f.ts → test.f.js} +9 -11
  5. package/com/cpp/testlib.f.d.ts +2 -0
  6. package/com/cpp/testlib.f.js +5 -0
  7. package/com/cs/module.f.d.ts +12 -0
  8. package/com/cs/module.f.js +80 -0
  9. package/com/cs/test.f.d.ts +2 -0
  10. package/com/cs/{test.f.ts → test.f.js} +9 -11
  11. package/com/cs/testlib.f.d.ts +2 -0
  12. package/com/cs/testlib.f.js +5 -0
  13. package/com/rust/module.f.d.ts +15 -0
  14. package/com/rust/module.f.js +169 -0
  15. package/com/rust/test.f.d.ts +2 -0
  16. package/com/rust/{test.f.ts → test.f.js} +7 -7
  17. package/com/rust/testlib.f.d.ts +2 -0
  18. package/com/rust/testlib.f.js +5 -0
  19. package/com/test/build.f.d.ts +20 -0
  20. package/com/test/build.f.js +58 -0
  21. package/com/types/module.f.d.ts +28 -0
  22. package/com/types/module.f.js +8 -0
  23. package/com/types/testlib.f.d.ts +44 -0
  24. package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
  25. package/commonjs/build/module.f.d.ts +6 -0
  26. package/commonjs/build/module.f.js +69 -0
  27. package/commonjs/build/test.f.d.ts +2 -0
  28. package/commonjs/build/test.f.js +96 -0
  29. package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
  30. package/commonjs/module/function/module.f.js +4 -0
  31. package/commonjs/module/module.f.d.ts +18 -0
  32. package/commonjs/module/module.f.js +12 -0
  33. package/commonjs/module.f.d.ts +6 -0
  34. package/commonjs/module.f.js +1 -0
  35. package/commonjs/package/dependencies/module.f.d.ts +7 -0
  36. package/commonjs/package/dependencies/module.f.js +13 -0
  37. package/commonjs/package/dependencies/test.f.d.ts +2 -0
  38. package/commonjs/package/dependencies/test.f.js +15 -0
  39. package/commonjs/package/module.f.d.ts +17 -0
  40. package/commonjs/package/module.f.js +18 -0
  41. package/commonjs/package/test.f.d.ts +2 -0
  42. package/commonjs/package/test.f.js +27 -0
  43. package/commonjs/path/module.f.d.ts +24 -0
  44. package/commonjs/path/module.f.js +114 -0
  45. package/commonjs/path/test.f.d.ts +25 -0
  46. package/commonjs/path/{test.f.ts → test.f.js} +123 -89
  47. package/crypto/prime_field/module.f.d.ts +43 -0
  48. package/crypto/prime_field/module.f.js +78 -0
  49. package/crypto/prime_field/test.f.d.ts +13 -0
  50. package/crypto/prime_field/test.f.js +149 -0
  51. package/crypto/secp/module.f.d.ts +68 -0
  52. package/crypto/secp/module.f.js +127 -0
  53. package/crypto/secp/test.f.d.ts +5 -0
  54. package/crypto/secp/test.f.js +72 -0
  55. package/crypto/sha2/module.f.d.ts +13 -0
  56. package/crypto/sha2/module.f.js +145 -0
  57. package/crypto/sha2/test.f.d.ts +9 -0
  58. package/crypto/sha2/test.f.js +82 -0
  59. package/dev/module.f.d.ts +1 -0
  60. package/dev/module.f.js +1 -0
  61. package/dev/test/module.f.d.ts +20 -0
  62. package/dev/test/module.f.js +75 -0
  63. package/dev/test.f.d.ts +9 -0
  64. package/dev/{test.f.ts → test.f.js} +22 -24
  65. package/djs/module.f.d.ts +17 -0
  66. package/djs/module.f.js +63 -0
  67. package/djs/parser/module.f.d.ts +12 -0
  68. package/djs/parser/module.f.js +333 -0
  69. package/djs/parser/test.f.d.ts +12 -0
  70. package/djs/parser/test.f.js +717 -0
  71. package/djs/serializer/module.f.d.ts +9 -0
  72. package/djs/serializer/module.f.js +81 -0
  73. package/djs/test/input.f.d.ts +2 -0
  74. package/djs/test/input.f.js +4 -0
  75. package/djs/test/m.f.d.ts +2 -0
  76. package/djs/test/m.f.js +1 -0
  77. package/djs/test.f.d.ts +12 -0
  78. package/djs/test.f.js +84 -0
  79. package/djs/tokenizer/module.f.d.ts +8 -0
  80. package/djs/tokenizer/module.f.js +60 -0
  81. package/djs/tokenizer/test.f.d.ts +7 -0
  82. package/djs/tokenizer/test.f.js +529 -0
  83. package/fsc/module.f.d.ts +5 -0
  84. package/fsc/module.f.js +75 -0
  85. package/fsc/test.f.d.ts +4 -0
  86. package/fsc/test.f.js +19 -0
  87. package/fsm/module.f.d.ts +13 -0
  88. package/fsm/module.f.js +59 -0
  89. package/fsm/test.f.d.ts +5 -0
  90. package/fsm/test.f.js +137 -0
  91. package/html/module.f.d.ts +13 -0
  92. package/html/module.f.js +58 -0
  93. package/html/test.f.d.ts +9 -0
  94. package/html/test.f.js +42 -0
  95. package/issues/test.f.d.ts +16 -0
  96. package/issues/test.f.js +70 -0
  97. package/js/tokenizer/module.f.d.ts +86 -0
  98. package/js/tokenizer/module.f.js +503 -0
  99. package/js/tokenizer/test.f.d.ts +9 -0
  100. package/js/tokenizer/test.f.js +905 -0
  101. package/json/module.f.d.ts +20 -0
  102. package/json/module.f.js +68 -0
  103. package/json/parser/module.f.d.ts +5 -0
  104. package/json/parser/module.f.js +155 -0
  105. package/json/parser/test.f.d.ts +5 -0
  106. package/json/parser/test.f.js +328 -0
  107. package/json/serializer/module.f.d.ts +7 -0
  108. package/json/serializer/module.f.js +21 -0
  109. package/json/serializer/test.f.d.ts +8 -0
  110. package/json/serializer/test.f.js +87 -0
  111. package/json/test.f.d.ts +8 -0
  112. package/json/test.f.js +61 -0
  113. package/json/tokenizer/module.f.d.ts +8 -0
  114. package/json/tokenizer/module.f.js +52 -0
  115. package/json/tokenizer/test.f.d.ts +6 -0
  116. package/json/tokenizer/test.f.js +419 -0
  117. package/nanvm-lib/tests/test.f.d.ts +27 -0
  118. package/nanvm-lib/tests/test.f.js +84 -0
  119. package/nodejs/version/module.f.d.ts +11 -0
  120. package/nodejs/version/module.f.js +16 -0
  121. package/nodejs/version/test.f.d.ts +2 -0
  122. package/nodejs/version/{test.f.ts → test.f.js} +13 -22
  123. package/package.json +9 -5
  124. package/text/ascii/module.f.d.ts +129 -0
  125. package/text/ascii/module.f.js +148 -0
  126. package/text/ascii/test.f.d.ts +4 -0
  127. package/text/ascii/test.f.js +14 -0
  128. package/text/module.f.d.ts +8 -0
  129. package/text/module.f.js +10 -0
  130. package/text/sgr/module.f.d.ts +8 -0
  131. package/text/sgr/module.f.js +8 -0
  132. package/text/test.f.d.ts +2 -0
  133. package/text/test.f.js +18 -0
  134. package/text/utf16/module.f.d.ts +9 -0
  135. package/text/utf16/module.f.js +66 -0
  136. package/text/utf16/test.f.d.ts +6 -0
  137. package/text/utf16/test.f.js +144 -0
  138. package/text/utf8/module.f.d.ts +6 -0
  139. package/text/utf8/module.f.js +112 -0
  140. package/text/utf8/test.f.d.ts +6 -0
  141. package/text/utf8/test.f.js +175 -0
  142. package/types/array/module.f.d.ts +21 -0
  143. package/types/array/module.f.js +23 -0
  144. package/types/array/test.f.d.ts +10 -0
  145. package/types/array/test.f.js +116 -0
  146. package/types/bigfloat/module.f.d.ts +3 -0
  147. package/types/bigfloat/module.f.js +66 -0
  148. package/types/bigfloat/test.f.d.ts +6 -0
  149. package/types/bigfloat/test.f.js +349 -0
  150. package/types/bigint/module.f.d.ts +54 -0
  151. package/types/bigint/{module.f.ts → module.f.js} +42 -65
  152. package/types/bigint/test.f.d.ts +16 -0
  153. package/types/bigint/test.f.js +199 -0
  154. package/types/bit_vec/module.f.d.ts +134 -0
  155. package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
  156. package/types/bit_vec/test.f.d.ts +22 -0
  157. package/types/bit_vec/test.f.js +210 -0
  158. package/types/btree/find/module.f.d.ts +20 -0
  159. package/types/btree/find/module.f.js +84 -0
  160. package/types/btree/find/test.f.d.ts +2 -0
  161. package/types/btree/find/test.f.js +152 -0
  162. package/types/btree/module.f.d.ts +4 -0
  163. package/types/btree/module.f.js +31 -0
  164. package/types/btree/remove/module.f.d.ts +4 -0
  165. package/types/btree/remove/module.f.js +174 -0
  166. package/types/btree/remove/test.f.d.ts +5 -0
  167. package/types/btree/remove/test.f.js +634 -0
  168. package/types/btree/set/module.f.d.ts +3 -0
  169. package/types/btree/set/module.f.js +103 -0
  170. package/types/btree/set/test.f.d.ts +2 -0
  171. package/types/btree/set/test.f.js +360 -0
  172. package/types/btree/test.f.d.ts +8 -0
  173. package/types/btree/test.f.js +75 -0
  174. package/types/btree/types/module.f.d.ts +11 -0
  175. package/types/btree/types/module.f.js +1 -0
  176. package/types/byte_set/module.f.d.ts +16 -0
  177. package/types/byte_set/module.f.js +28 -0
  178. package/types/byte_set/test.f.d.ts +12 -0
  179. package/types/byte_set/test.f.js +122 -0
  180. package/types/function/compare/module.f.d.ts +10 -0
  181. package/types/function/compare/module.f.js +7 -0
  182. package/types/function/compare/test.f.d.ts +2 -0
  183. package/types/function/compare/test.f.js +8 -0
  184. package/types/function/module.f.d.ts +28 -0
  185. package/types/function/module.f.js +19 -0
  186. package/types/function/operator/module.f.d.ts +20 -0
  187. package/types/function/operator/module.f.js +18 -0
  188. package/types/function/test.f.d.ts +2 -0
  189. package/types/function/test.f.js +12 -0
  190. package/types/list/module.f.d.ts +50 -0
  191. package/types/list/module.f.js +171 -0
  192. package/types/list/test.f.d.ts +22 -0
  193. package/types/list/test.f.js +395 -0
  194. package/types/map/module.f.d.ts +14 -0
  195. package/types/map/module.f.js +31 -0
  196. package/types/map/test.f.d.ts +5 -0
  197. package/types/map/test.f.js +114 -0
  198. package/types/nibble_set/module.f.d.ts +10 -0
  199. package/types/nibble_set/module.f.js +9 -0
  200. package/types/nibble_set/test.f.d.ts +12 -0
  201. package/types/nibble_set/test.f.js +90 -0
  202. package/types/nullable/module.f.d.ts +3 -0
  203. package/types/nullable/module.f.js +2 -0
  204. package/types/nullable/test.f.d.ts +2 -0
  205. package/types/nullable/test.f.js +12 -0
  206. package/types/number/module.f.d.ts +6 -0
  207. package/types/number/module.f.js +8 -0
  208. package/types/number/test.f.d.ts +11 -0
  209. package/types/number/test.f.js +124 -0
  210. package/types/object/module.f.d.ts +10 -0
  211. package/types/object/module.f.js +12 -0
  212. package/types/object/test.f.d.ts +5 -0
  213. package/types/object/test.f.js +17 -0
  214. package/types/range/module.f.d.ts +3 -0
  215. package/types/range/module.f.js +2 -0
  216. package/types/range/test.f.d.ts +2 -0
  217. package/types/range/test.f.js +18 -0
  218. package/types/range_map/module.f.d.ts +14 -0
  219. package/types/range_map/module.f.js +51 -0
  220. package/types/range_map/test.f.d.ts +6 -0
  221. package/types/range_map/test.f.js +176 -0
  222. package/types/result/module.f.d.ts +7 -0
  223. package/types/result/module.f.js +8 -0
  224. package/types/sorted_list/module.f.d.ts +16 -0
  225. package/types/sorted_list/module.f.js +56 -0
  226. package/types/sorted_list/test.f.d.ts +5 -0
  227. package/types/sorted_list/test.f.js +64 -0
  228. package/types/sorted_set/module.f.d.ts +7 -0
  229. package/types/sorted_set/module.f.js +14 -0
  230. package/types/sorted_set/test.f.d.ts +6 -0
  231. package/types/sorted_set/test.f.js +78 -0
  232. package/types/string/module.f.d.ts +6 -0
  233. package/types/string/module.f.js +11 -0
  234. package/types/string/test.f.d.ts +15 -0
  235. package/types/string/test.f.js +58 -0
  236. package/types/string_set/module.f.d.ts +9 -0
  237. package/types/string_set/module.f.js +22 -0
  238. package/types/string_set/test.f.d.ts +5 -0
  239. package/types/string_set/test.f.js +65 -0
  240. package/.github/FUNDING.yml +0 -12
  241. package/.github/dependabot.yml +0 -11
  242. package/.github/workflows/ci.yml +0 -88
  243. package/.github/workflows/npm-publish.yml +0 -53
  244. package/CHANGELOG.md +0 -29
  245. package/Cargo.lock +0 -18
  246. package/Cargo.toml +0 -7
  247. package/com/README.md +0 -3
  248. package/com/cpp/README.md +0 -80
  249. package/com/cpp/module.f.ts +0 -180
  250. package/com/cpp/nanocom.hpp +0 -195
  251. package/com/cpp/testlib.f.ts +0 -8
  252. package/com/cs/module.f.ts +0 -145
  253. package/com/cs/testlib.f.ts +0 -8
  254. package/com/proposals.md +0 -28
  255. package/com/rust/module.f.ts +0 -287
  256. package/com/rust/nanocom/Cargo.lock +0 -7
  257. package/com/rust/nanocom/Cargo.toml +0 -15
  258. package/com/rust/nanocom/README.md +0 -56
  259. package/com/rust/nanocom/src/class.rs +0 -6
  260. package/com/rust/nanocom/src/cobject.rs +0 -90
  261. package/com/rust/nanocom/src/guid.rs +0 -15
  262. package/com/rust/nanocom/src/hresult.rs +0 -7
  263. package/com/rust/nanocom/src/interface.rs +0 -9
  264. package/com/rust/nanocom/src/iunknown.rs +0 -13
  265. package/com/rust/nanocom/src/lib.rs +0 -20
  266. package/com/rust/nanocom/src/object.rs +0 -34
  267. package/com/rust/nanocom/src/ref.rs +0 -57
  268. package/com/rust/nanocom/src/vmt.rs +0 -7
  269. package/com/rust/nanocom/tests/it.rs +0 -186
  270. package/com/rust/nanocom/tests/itmod.rs +0 -195
  271. package/com/rust/testlib.f.ts +0 -8
  272. package/com/test/build.f.ts +0 -111
  273. package/com/test/build.ts +0 -45
  274. package/com/test/cpp/main.cpp +0 -74
  275. package/com/test/cs/Program.cs +0 -31
  276. package/com/test/cs/cs.csproj +0 -16
  277. package/com/test/rust/Cargo.toml +0 -12
  278. package/com/test/rust/src/lib.rs +0 -56
  279. package/com/types/module.f.ts +0 -62
  280. package/commonjs/README.md +0 -94
  281. package/commonjs/build/module.f.ts +0 -100
  282. package/commonjs/build/test.f.ts +0 -107
  283. package/commonjs/module/module.f.ts +0 -41
  284. package/commonjs/module.f.ts +0 -7
  285. package/commonjs/module.ts +0 -31
  286. package/commonjs/package/dependencies/module.f.ts +0 -22
  287. package/commonjs/package/dependencies/test.f.ts +0 -8
  288. package/commonjs/package/module.f.ts +0 -31
  289. package/commonjs/package/test.f.ts +0 -12
  290. package/commonjs/path/README.md +0 -17
  291. package/commonjs/path/module.f.ts +0 -171
  292. package/commonjs/test.ts +0 -64
  293. package/crypto/README.md +0 -3
  294. package/crypto/prime_field/module.f.ts +0 -114
  295. package/crypto/prime_field/test.f.ts +0 -95
  296. package/crypto/secp/module.f.ts +0 -182
  297. package/crypto/secp/test.f.ts +0 -68
  298. package/crypto/sha2/module.f.ts +0 -215
  299. package/crypto/sha2/test.f.ts +0 -83
  300. package/deno.json +0 -71
  301. package/dev/README.md +0 -8
  302. package/dev/index.ts +0 -3
  303. package/dev/module.f.ts +0 -1
  304. package/dev/module.ts +0 -195
  305. package/dev/test/module.f.ts +0 -135
  306. package/dev/test.ts +0 -53
  307. package/djs/README.md +0 -54
  308. package/djs/module.f.ts +0 -76
  309. package/djs/parser/module.f.ts +0 -509
  310. package/djs/parser/test.f.ts +0 -461
  311. package/djs/serializer/module.f.ts +0 -90
  312. package/djs/test.f.ts +0 -67
  313. package/djs/tokenizer/module.f.ts +0 -99
  314. package/djs/tokenizer/test.f.ts +0 -364
  315. package/doc/LANGUAGE.md +0 -255
  316. package/doc/README.md +0 -61
  317. package/doc/byte-code.md +0 -59
  318. package/doc/fa.md +0 -174
  319. package/doc/predefined.md +0 -143
  320. package/doc/proposals.md +0 -21
  321. package/doc/vm/README.md +0 -24
  322. package/doc/vm-rearchitecture.md +0 -129
  323. package/doc/vm.md +0 -150
  324. package/fsc/README.md +0 -111
  325. package/fsc/module.f.ts +0 -122
  326. package/fsc/test.f.ts +0 -21
  327. package/fsm/README.md +0 -113
  328. package/fsm/module.f.ts +0 -107
  329. package/fsm/test.f.ts +0 -139
  330. package/funding.json +0 -61
  331. package/html/README.md +0 -32
  332. package/html/module.f.ts +0 -109
  333. package/html/test.f.ts +0 -37
  334. package/issues/01-test-debug.md +0 -3
  335. package/issues/02-esm.md +0 -8
  336. package/issues/03-djs.md +0 -57
  337. package/issues/05-publish.md +0 -40
  338. package/issues/11-fs-load.md +0 -13
  339. package/issues/17-djs-extension.md +0 -6
  340. package/issues/README.md +0 -42
  341. package/issues/lang/1000-json.md +0 -50
  342. package/issues/lang/2110-default-export.md +0 -11
  343. package/issues/lang/2120-const.md +0 -14
  344. package/issues/lang/2130-default-import.md +0 -10
  345. package/issues/lang/2210-block-comment.md +0 -12
  346. package/issues/lang/2220-namespace-import.md +0 -25
  347. package/issues/lang/2310-undefined.md +0 -7
  348. package/issues/lang/2320-bigint.md +0 -7
  349. package/issues/lang/2330-property-accessor.md +0 -225
  350. package/issues/lang/2340-operators.md +0 -41
  351. package/issues/lang/2350-grouping.md +0 -11
  352. package/issues/lang/2360-built-in.md +0 -81
  353. package/issues/lang/2410-identifier-property.md +0 -9
  354. package/issues/lang/2420-line-comment.md +0 -10
  355. package/issues/lang/2430-trailing-comma.md +0 -13
  356. package/issues/lang/2440-shorthand.md +0 -8
  357. package/issues/lang/2450-destructuring.md +0 -12
  358. package/issues/lang/3110-function.md +0 -35
  359. package/issues/lang/3120-parameters.md +0 -9
  360. package/issues/lang/3130-body-const.md +0 -12
  361. package/issues/lang/3220-let.md +0 -11
  362. package/issues/lang/3240-export.md +0 -44
  363. package/issues/lang/3370-type-inference.md +0 -69
  364. package/issues/lang/3380-promise.md +0 -22
  365. package/issues/lang/3390-class.md +0 -3
  366. package/issues/lang/3410-expression.md +0 -12
  367. package/issues/lang/3420-one-parameter.md +0 -10
  368. package/issues/lang/3430-assignments.md +0 -23
  369. package/issues/lang/README.md +0 -193
  370. package/issues/test.f.ts +0 -58
  371. package/js/tokenizer/module.f.ts +0 -882
  372. package/js/tokenizer/test.f.ts +0 -617
  373. package/json/html/README.md +0 -49
  374. package/json/module.f.ts +0 -94
  375. package/json/parser/module.f.ts +0 -221
  376. package/json/parser/test.f.ts +0 -255
  377. package/json/serializer/module.f.ts +0 -74
  378. package/json/serializer/test.f.ts +0 -64
  379. package/json/test.f.ts +0 -48
  380. package/json/tokenizer/module.f.ts +0 -85
  381. package/json/tokenizer/test.f.ts +0 -290
  382. package/nanvm-lib/Cargo.toml +0 -6
  383. package/nanvm-lib/src/extension.rs +0 -130
  384. package/nanvm-lib/src/interface.rs +0 -133
  385. package/nanvm-lib/src/lib.rs +0 -7
  386. package/nanvm-lib/src/naive.rs +0 -236
  387. package/nanvm-lib/src/nanenum.rs +0 -236
  388. package/nanvm-lib/src/nullish.rs +0 -7
  389. package/nanvm-lib/src/sign.rs +0 -5
  390. package/nanvm-lib/src/simple.rs +0 -32
  391. package/nanvm-lib/tests/test.f.ts +0 -80
  392. package/nanvm-lib/tests/test.rs +0 -108
  393. package/nodejs/version/main.ts +0 -4
  394. package/nodejs/version/module.f.ts +0 -42
  395. package/text/README.md +0 -110
  396. package/text/ascii/module.f.ts +0 -219
  397. package/text/ascii/test.f.ts +0 -14
  398. package/text/module.f.ts +0 -30
  399. package/text/sgr/README.md +0 -3
  400. package/text/sgr/module.f.ts +0 -11
  401. package/text/test.f.ts +0 -19
  402. package/text/utf16/module.f.ts +0 -120
  403. package/text/utf16/test.f.ts +0 -107
  404. package/text/utf8/module.f.ts +0 -116
  405. package/text/utf8/test.f.ts +0 -125
  406. package/tsconfig.json +0 -104
  407. package/types/array/module.f.ts +0 -89
  408. package/types/array/test.f.ts +0 -88
  409. package/types/bigfloat/module.f.ts +0 -93
  410. package/types/bigfloat/test.f.ts +0 -218
  411. package/types/bigint/README.md +0 -35
  412. package/types/bigint/test.f.ts +0 -144
  413. package/types/bit_vec/README.md +0 -18
  414. package/types/bit_vec/test.f.ts +0 -129
  415. package/types/btree/README.md +0 -160
  416. package/types/btree/find/module.f.ts +0 -92
  417. package/types/btree/find/test.f.ts +0 -122
  418. package/types/btree/module.f.ts +0 -35
  419. package/types/btree/remove/module.f.ts +0 -151
  420. package/types/btree/remove/test.f.ts +0 -498
  421. package/types/btree/set/module.f.ts +0 -89
  422. package/types/btree/set/test.f.ts +0 -415
  423. package/types/btree/test.f.ts +0 -92
  424. package/types/btree/types/module.f.ts +0 -27
  425. package/types/byte_set/module.f.ts +0 -73
  426. package/types/byte_set/test.f.ts +0 -84
  427. package/types/function/compare/module.f.ts +0 -26
  428. package/types/function/compare/test.f.ts +0 -7
  429. package/types/function/module.f.ts +0 -43
  430. package/types/function/operator/module.f.ts +0 -65
  431. package/types/function/test.f.ts +0 -20
  432. package/types/list/module.f.ts +0 -350
  433. package/types/list/test.f.ts +0 -327
  434. package/types/map/module.f.ts +0 -65
  435. package/types/map/test.f.ts +0 -76
  436. package/types/nibble_set/module.f.ts +0 -34
  437. package/types/nibble_set/test.f.ts +0 -57
  438. package/types/nullable/module.f.ts +0 -9
  439. package/types/nullable/test.f.ts +0 -9
  440. package/types/number/module.f.ts +0 -20
  441. package/types/number/test.f.ts +0 -194
  442. package/types/object/module.f.ts +0 -30
  443. package/types/object/test.f.ts +0 -14
  444. package/types/range/module.f.ts +0 -10
  445. package/types/range/test.f.ts +0 -9
  446. package/types/range_map/module.f.ts +0 -70
  447. package/types/range_map/test.f.ts +0 -189
  448. package/types/result/module.f.ts +0 -20
  449. package/types/result/module.ts +0 -18
  450. package/types/sorted_list/module.f.ts +0 -83
  451. package/types/sorted_list/test.f.ts +0 -57
  452. package/types/sorted_set/module.f.ts +0 -36
  453. package/types/sorted_set/test.f.ts +0 -67
  454. package/types/string/module.f.ts +0 -26
  455. package/types/string/test.f.ts +0 -43
  456. package/types/string_set/module.f.ts +0 -37
  457. package/types/string_set/test.f.ts +0 -34
package/doc/vm/README.md DELETED
@@ -1,24 +0,0 @@
1
- # VM
2
-
3
- Two options:
4
- - using instances
5
- - using types. In this case, if we need multiple VMs in the same process, we need multiple types.
6
-
7
- ## Rust Interface
8
-
9
- ```rust
10
- trait Any {
11
- }
12
-
13
- trait String {
14
- }
15
-
16
- trait Bigint {
17
- }
18
-
19
- trait Object {
20
- }
21
-
22
- trait Array {
23
- }
24
- ```
@@ -1,129 +0,0 @@
1
- # NaNVM Re-Architecture
2
-
3
- About a year ago (Nov 2023), the FunctionalScript team started a new project called [NaNVM](https://github.com/functionalscript/nanvm). We have limited resources (⌛💰) for the projects, so progress has been slow. Since then, we’ve implemented several components from scratch in Rust:
4
- - An interface and multiple implementations for [Memory Management](https://github.com/functionalscript/nanvm/tree/main/nanvm-lib/src/mem), such as a [global](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/mem/global.rs) memory manager using standard `alloc/dealloc`, a [local](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/mem/local.rs) manager with a reference counter, and a simple [arena](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/mem/arena.rs) implementation.
5
- - [All FS data types](https://github.com/functionalscript/nanvm/tree/main/nanvm-lib/src/js) in the VM, such as [string](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/js/js_string.rs), [bigint](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/js/js_bigint.rs), [array](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/js/js_array.rs), [object](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/js/js_object.rs), and [any](https://github.com/functionalscript/nanvm/blob/main/nanvm-lib/src/js/any.rs).
6
- - And, of course, we've implemented a parser for JSON and DJS in Rust, which works well. See [this article about DJS](https://medium.com/@sasha.gil/bridging-the-gap-from-json-to-javascript-without-dsls-fee273573f1b) for more information.
7
-
8
- All of this code is written in Rust. Rust excels at runtime performance and system-level programming. However, developers often struggle when working with high-level and business logic. Its verbosity and various memory management models make developing components like parsers in Rust slow and complex. It’s great for implementing a memory manager, a VM, or a big integer but less suited for tasks like implementing a parser efficiently (and yes, we are aware of third-party parser generators). That’s why we want to use a high-level language for this purpose. Of course, we don't need to search for one because we already have FunctionalScript and JavaScript as glue. Additionally, because of our limited resources, we aim to use only a few repositories. As a result, we plan to merge the NaNVM code into the [FunctionalScript repo](https://github.com/functionalscript/functionalscript).
9
-
10
- ## Stage 0: Current State
11
-
12
- Before we start rearchitecting the project, we should understand our current architecture. Here's the current module dependency graph for [nanvm_lib](https://github.com/functionalscript/nanvm/tree/main/nanvm-lib/src):
13
-
14
- ```mermaid
15
- flowchart TB
16
- app[Application] --> parser[Parser] --> js[VM] --> mem[Memory Manager]
17
- ```
18
-
19
- The parser is written in Rust using VM types, such as `JsString` and `JsBigInt`. The application can parse JSON and DJS files and output in any of these formats as a standalone module.
20
-
21
- ## Stage 1: Using a Third-Party JS Engine for Parsing
22
-
23
- Because FunctionalScript is a subset of JavaScript, we can use third-party JavaScript engines to bootstrap our parser, written on FunctionalScript, without circular dependencies. In Rust, we only need to implement a generic byte code deserializer that reads byte code and invokes VM API functions. We selected [Deno](https://deno.com/) and its [deno_core](https://crates.io/crates/deno_core/) package as a third-party JS engine because it's also written in Rust, has a crate and it's easy to integrate with our project.
24
-
25
- ```mermaid
26
- flowchart TB
27
- app[Application] --> deno(deno_core)
28
- app --> bcd[Byte Code Deserializer] --> js[VM] --> mem[Memory Manager]
29
- ```
30
-
31
- ### Requirements
32
- 1. To restore previous functionality, we still need a parser that can convert FunctionalScript or DJS into byte code,
33
- 2. We have to design byte code for FunctionalScript and implement its deserializer in Rust.
34
-
35
- ### Build Process
36
-
37
- To satisfy the first requirement, we need a parser written in FunctionalScript. The build process should then take the parser source code and embed it into the application. See [include_str](https://doc.rust-lang.org/std/macro.include_str.html) for more details.
38
-
39
- ```mermaid
40
- flowchart TB
41
- app[Application] --> deno(deno_core)
42
- app --> bcd[Byte Code Deserializer] --> js[VM] --> mem[Memory Manager]
43
- app --> fsp[(Functional Script Parser Source Code)]
44
- ```
45
-
46
- ### Run-Time Process
47
-
48
- 1. The application loads the parser source code from memory into the Deno engine.
49
- 2. The application executes the parser in the JS engine with the command-line parameters provided by the user.
50
- 3. After the parser generates the byte code, the application sends this byte code to the VM.
51
-
52
- This stage provides an interim solution to parse FunctionalScript using Deno while we develop the self-hosted parser.
53
-
54
- ## Stage 2: Moving the Deno into `dev-dependencies`
55
-
56
- Once our parser can parse itself and convert it into byte code, we can move the `deno_core` to development dependencies. This means that we need it only for build time. This transition eliminates the runtime dependency on Deno, streamlining deployment and reducing overhead in production environments.
57
-
58
- ### Build Process
59
-
60
- 1. Run the parser on itself using Deno and generate byte code for the parser.
61
- 2. Embed the generated byte code into our application ([include_bytes](https://doc.rust-lang.org/std/macro.include_bytes.html)).
62
-
63
- ### Run-Time Process
64
-
65
- ```mermaid
66
- flowchart TB
67
- app[Application] --> bcd[Byte Code Deserializer] --> js[VM] --> mem[Memory Manager]
68
- app --> fspbc[(Functional Script Parser Byte Code)]
69
- ```
70
-
71
- The application can do two things:
72
- 1. Convert FunctionalScript code into byte code using the parser source code and the VM.
73
- 2. Execute byte code using the VM.
74
-
75
- ## Byte code
76
-
77
- The byte code format is designed for fast and straightforward deserialization and doesn't depend on a particular VM implementation. This design ensures that the byte code remains portable and does not rely on a specific VM implementation, allowing flexibility in integrating with other environments, including content-addressable implementation of FunctionalScript.
78
-
79
- ### Requirements
80
-
81
- - **Simple deserialization**: `string` is UTF16, `number` and `bigint` in a binary format, `usize` is 32 bits.
82
- - **No imports**: byte code describes a standalone module without dependencies. A parser should resolve all imports.
83
- - **No syntax sugar**: a parser should convert all syntax sugar operations into basic commands.
84
- - **One unit is one byte**: Byte code can be serialized into a byte array or a file.
85
- - **Least significant byte first**: Our `bigint` implementation is LSB first, and most current CPU architectures are.
86
-
87
- ### Pseudo-Code for the byte code binary format
88
-
89
- We use syntax that looks like Rust to describe the binary format.
90
-
91
- ```rust
92
- struct Array<T> {
93
- len: u32,
94
- array: [T; self.len],
95
- }
96
-
97
- type String = Array<u16>;
98
-
99
- // LSB first.
100
- type BigUInt = Array<u64>;
101
-
102
- type Object = Array<(String, Any)>;
103
-
104
- type Tag = u8
105
-
106
- // This is the main structure for serialization.
107
- type Code = Array<u8>;
108
- ```
109
-
110
- ### Tags/commands for JSON and DJS.
111
-
112
- |format|any |Tag| |
113
- |------|--------------|---|-----------------------|
114
- |JSON |null | 00| |
115
- | |number | 01|u64 |
116
- | |false | 02| |
117
- | |true | 03| |
118
- | |string | 04|String |
119
- | |object | 05|Object |
120
- | |array | 06|Array<Any> |
121
- |DJS |reference | 07|u32 |
122
- | |bigint+ | 08|BigUInt |
123
- | |bigint- | 09|BigUInt |
124
-
125
- We will add new tags for FunctionalScript byte code in the future as they are not needed for Stage 1.
126
-
127
- ## Summary
128
-
129
- If you find this architecture promising and want to support the development of a standalone FunctionalScript VM, please consider [sponsoring the project ❤️](https://opencollective.com/functionalscript). Additionally, we welcome contributions and feedback from the open-source community to accelerate this initiative.
package/doc/vm.md DELETED
@@ -1,150 +0,0 @@
1
- # NaNVM
2
-
3
- https://en.wikipedia.org/wiki/Double-precision_floating-point_format
4
-
5
- https://anniecherkaev.com/the-secret-life-of-nan
6
- https://brionv.com/log/2018/05/17/javascript-engine-internals-nan-boxing/
7
-
8
-
9
- - 1 bit - sign (S)
10
- - 11 bit - exponent (E)
11
- - 52 bit - fraction (F)
12
-
13
- |SE |F |Value |
14
- |---|--------------|----------------|
15
- |000|00000_00000000|+000000_00000000|
16
- |...| | |
17
- |3FF|00000_00000000|+000000_00000001|
18
- |...| | |
19
- |434|00000_00000000|+200000_00000000|
20
- |...| | |
21
- |7FF|00000_00000000|+inf |
22
- |...| |NaN |
23
- |800|00000_00000000|-0.0 |
24
- |...| | |
25
- |BFF|00000_00000000|-000000_00000001|
26
- |...| | |
27
- |C34|00000_00000000|-200000_00000000|
28
- |...| | |
29
- |FFF|00000_00000000|-inf |
30
- |...| |NaN |
31
-
32
- integer range: `[-2^53; +2^53]`.
33
-
34
- ## 6-bit Id String
35
-
36
- |symbol |code |# |sum|
37
- |--------|--------------|--|---|
38
- |`$` |`\x24` | 1| 1|
39
- |`0`..`9`|`\x30`..`\x39`| A| B|
40
- |`A`..`Z`|`\x41`..`\x5A`|1A| 25|
41
- |`_` |`\x5F` | 1| 26|
42
- |`a`..`z`|`\x61`..`\x7A`|1A| 40|
43
-
44
- ## 7FF & FFF
45
-
46
- 53 bits.
47
-
48
- Other values:
49
-
50
- - `NaN`
51
- - `+Inf`: 0x7FF00000_00000000
52
- - `-Inf`: 0xFFF00000_00000000
53
- - pointer + null:
54
- - 32 bit for 32 bit platforms.
55
- - 48 bit for current AMD64 https://en.wikipedia.org/wiki/X86-64#Canonical_form_addresses and ARM64
56
- note: with alignments it can be further narrowed to 44-45 bit.
57
- - `true`
58
- - `false`
59
- - `undefined`
60
-
61
- Optimization for
62
- - string
63
- - bigInt
64
-
65
- Least used letters in English: Q, J, Z and X.
66
-
67
- ### Layout 52
68
-
69
- Starts with `0xFFF`
70
-
71
- | | | |type |
72
- |------|--|-------------|-----------|
73
- |`1111`|48|stringUInt48 |`string` |
74
- |`1110`|48|8 x 6 string | |
75
- |`1101`|48|7 x 7 stringA| |
76
- |`1100`|48|7 x 7 stringB| |
77
- |`1011`|48|6 x 8 string | |
78
- |`1010`|45|5 x 9 string | |
79
- |`1001`|48|4 x 12 string| |
80
- |`1000`|48|3 x 16 string| |
81
- |`0111`|32|2 x 16 string| |
82
- |`0110`|16|1 x 16 string| |
83
- |`0101`| 0|empty string | |
84
- |`0100`|48|ptr |? |
85
- |`0011`| 0|undefined |`undefined`|
86
- |`0010`|48|bigInt48 |`bigint` |
87
- |`0001`| 0|bool |`bool` |
88
- |`0000`| 0|-inf |`number` |
89
-
90
- ## Pointer Kind
91
-
92
- Alignment 8 bytes. 3 bits.
93
-
94
- | |type | |
95
- |----|----------|---------------|
96
- |00.0|`object` |object |
97
- |00.1| |array |
98
- |01.0|`string` |string |
99
- |01.1| | |
100
- |10.0|`function`|function |
101
- |10.1| |static function|
102
- |11.0|`bigint` |bigint |
103
- |11.1| | |
104
-
105
- ## Object
106
-
107
- ```rust
108
- struct Object {
109
- propertySet: PropertySet
110
- iterable: Func<Iterator>
111
- }
112
-
113
- struct Array {
114
- length: u32,
115
- array: [Value; self.length],
116
- }
117
- ```
118
-
119
- ## String
120
-
121
- ```rust
122
- struct String {
123
- length: u32,
124
- array: [u16; self.length],
125
- }
126
- ```
127
-
128
- ## Function
129
-
130
- ```rust
131
- struct Function {
132
- pointer: FunctionBody,
133
- array: [Value; length],
134
- }
135
- ```
136
-
137
- ## BigInt
138
-
139
- ```rust
140
- struct BigInt {
141
- length: u32,
142
- array: [u64; self.length],
143
- }
144
- ```
145
-
146
- ## Order of object properties
147
-
148
- See https://262.ecma-international.org/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys and https://262.ecma-international.org/6.0/#sec-object-type
149
-
150
- An integer index for Node.js, Deno and Bun means a value from `0` to `4294967294` including. 4_294_967_294 = 0xFFFF_FFFE. But an integer index in the ES6 standard is +0..2^53-1.
package/fsc/README.md DELETED
@@ -1,111 +0,0 @@
1
- # FunctionalScript Compiler
2
-
3
- ## Tokenizer
4
-
5
- - `!` - logicalNot
6
- - `!=` - nonStrictNotEqual
7
- - `!==` - notEqual
8
- - `"` - doubleStringBegin
9
- - `$` - idBegin
10
- - `%` - remainder
11
- - `%=` - remainder assignment
12
- - `&` - bitwiseAnd
13
- - `&&` - logicalAnd
14
- - `&&=` - logicalAndAssignment
15
- - `&=` - bitwiseAndAssignment
16
- - `'` - singleStringBegin
17
- - `(` - groupingBegin
18
- - `)` - groupingEnd
19
- - `*` - multiplication
20
- - `**` - exponential
21
- - `**=` - exponentialAssignment
22
- - `*/` - commentEnd
23
- - `*=` - multiplicationAssignment
24
- - `+` - addition
25
- - `++` - increment
26
- - `+=` - additionAssignment
27
- - `,` - comma
28
- - `-` - subtraction
29
- - `--` - decrement
30
- - `-=` - subtractionAssignment
31
- - `.` - dot
32
- - `...` - spread
33
- - `/` - division
34
- - `/*` - commentBegin
35
- - `//` - oneLineComment
36
- - `/=` - divisionAssignment
37
- - `0..9` - numberBegin
38
- - `:` - colon
39
- - `;` - semicolon
40
- - `<` - less
41
- - `<<` - leftShift
42
- - `<<=` - leftShiftAssignment
43
- - `<=` - lessEqual
44
- - `=` - assignment
45
- - `==` - nonStrictEqual ?
46
- - `===` - equal
47
- - `=>` - arrow
48
- - `>` - greater
49
- - `<=` - greaterEqual
50
- - `>>` - rightShift
51
- - `>>>` - unsignedRightShift
52
- - `>>>=` unsignedRightShiftAssignment
53
- - `?` - question
54
- - `?.` - optional chaining
55
- - `??` - nullish coalescing
56
- - `A..Z` - idBegin
57
- - `Infinity` - infinity
58
- - `NaN` - nan
59
- - `[` - propertyBegin
60
- - `]` - propertyEnd`
61
- - `^` - bitwiseXor
62
- - `^=` - bitwiseXorAssignment
63
- - `_` - idBegin
64
- - '`' - templateBegin
65
- - `a..z` - idBegin
66
- - `async` ?
67
- - `await` ?
68
- - `break`
69
- - `case`
70
- - `catch`
71
- - `class`
72
- - `const`
73
- - `continue`
74
- - `debugger`
75
- - `delete` ?
76
- - `do` ?
77
- - `else`
78
- - `export`
79
- - `false`
80
- - `function` ?
81
- - `globalThis` ?
82
- - `for`
83
- - `if`
84
- - `import`
85
- - `in`
86
- - `instanceof`
87
- - `let`
88
- - `new` ?
89
- - `null`
90
- - `of`
91
- - `return`
92
- - `super`
93
- - `switch`
94
- - `this` ?
95
- - `throw`
96
- - `true`
97
- - `try`
98
- - `typeof`
99
- - `undefined`
100
- - `var`
101
- - `void`
102
- - `while`
103
- - `yield`
104
- - `{` - objectBegin
105
- - `|` - bitwiseOr
106
- - `|=` - bitwiseOrAssignment
107
- - `||` - logicalOr
108
- - `||=` - logicalOrAssignment
109
- - `}` - objectEnd
110
- - `~` - bitwiseNot
111
- - `~=` - bitwiseNotAssignment
package/fsc/module.f.ts DELETED
@@ -1,122 +0,0 @@
1
- import * as operator from '../types/function/operator/module.f.ts'
2
- import {
3
- merge as rangeMapMerge,
4
- fromRange,
5
- get,
6
- type RangeMapArray,
7
- type RangeMerge,
8
- } from '../types/range_map/module.f.ts'
9
- import * as list from '../types/list/module.f.ts'
10
- const { reduce: listReduce } = list
11
- import { range as asciiRange } from '../text/ascii/module.f.ts'
12
- import { fn } from '../types/function/module.f.ts'
13
- import { one, type Range } from '../types/range/module.f.ts'
14
- const { toArray, map } = list
15
-
16
- const fromCharCode = String.fromCharCode
17
-
18
- type Result = readonly[readonly string[], ToResult]
19
-
20
- type ToResult = (codePoint: number) => Result
21
-
22
- type CreateToResult<T> = (state: T) => ToResult
23
-
24
- type State<T> = RangeMapArray<CreateToResult<T>>
25
-
26
- const unexpectedSymbol
27
- : ToResult
28
- = codePoint => [[`unexpected symbol ${codePoint}`], unexpectedSymbol]
29
-
30
- const def
31
- : <T>(state: T) => ToResult
32
- = () => unexpectedSymbol
33
-
34
- const union
35
- : <T>(a: CreateToResult<T>) => (b: CreateToResult<T>) => CreateToResult<T>
36
- = a => b => {
37
- if (a === def || a === b) { return b }
38
- if (b === def) { return a }
39
- throw [a, b]
40
- }
41
-
42
- const empty
43
- : readonly never[]
44
- = []
45
-
46
- const reduce = <T>(a: list.List<State<T>>): State<T> => {
47
- const merge
48
- : RangeMerge<CreateToResult<T>>
49
- = rangeMapMerge({
50
- union,
51
- equal: operator.strictEqual,
52
- })
53
- return toArray(listReduce(merge)(empty)(a))
54
- }
55
-
56
- const codePointRange = fromRange(def)
57
-
58
- const range = fn(asciiRange).then(codePointRange).result
59
-
60
- const rangeSet
61
- = (l: readonly string[]) => <T>(f: CreateToResult<T>): State<T> => {
62
-
63
- const codePointRange
64
- : (a: Range) => (f: CreateToResult<T>) => State<T>
65
- = fromRange(def)
66
-
67
- const g
68
- : (r: string) => State<T>
69
- = r => codePointRange(asciiRange(r))(f)
70
-
71
- return reduce(map(g)(l))
72
- }
73
-
74
- const create = <T>(a: list.List<State<T>>): CreateToResult<T> => {
75
- const i = reduce(a)
76
- const x
77
- : (v: number) => (i: State<T>) => (v: T) => ToResult
78
- = get(def)
79
- return v => c => x(c)(i)(v)(c)
80
- }
81
-
82
- export const terminal = -1
83
-
84
- const toInit
85
- : () => ToResult
86
- = () => () => [[], init]
87
-
88
- export const init
89
- : ToResult
90
- = create([
91
- codePointRange(one(terminal))(toInit),
92
- rangeSet(['\t', ' ', '\n', '\r'])(toInit),
93
- range('!')(() => () => [['!'], unexpectedSymbol]),
94
- range('"')(() => () => [['"'], unexpectedSymbol]),
95
- rangeSet(['$', '_', 'AZ', 'az'])(() => c => [[fromCharCode(c)], unexpectedSymbol]),
96
- range('%')(() => () => [['%'], unexpectedSymbol]),
97
- range('&')(() => () => [['&'], unexpectedSymbol]),
98
- range("'")(() => () => [["'"], unexpectedSymbol]),
99
- range('(')(() => () => [['('], unexpectedSymbol]),
100
- range(')')(() => () => [[')'], unexpectedSymbol]),
101
- range('*')(() => () => [['*'], unexpectedSymbol]),
102
- range('+')(() => () => [['+'], unexpectedSymbol]),
103
- range(',')(() => () => [[','], unexpectedSymbol]),
104
- range('-')(() => () => [['-'], unexpectedSymbol]),
105
- range('.')(() => () => [['.'], unexpectedSymbol]),
106
- range('/')(() => () => [['/'], unexpectedSymbol]),
107
- range('09')(() => a => [[fromCharCode(a)], unexpectedSymbol]),
108
- range(':')(() => () => [[':'], unexpectedSymbol]),
109
- range(';')(() => () => [[';'], unexpectedSymbol]),
110
- range('<')(() => () => [['<'], unexpectedSymbol]),
111
- range('=')(() => () => [['='], unexpectedSymbol]),
112
- range('>')(() => () => [['>'], unexpectedSymbol]),
113
- range('?')(() => () => [['?'], unexpectedSymbol]),
114
- range('[')(() => () => [['['], unexpectedSymbol]),
115
- range(']')(() => () => [[']'], unexpectedSymbol]),
116
- range('^')(() => () => [['^'], unexpectedSymbol]),
117
- range('`')(() => () => [['`'], unexpectedSymbol]),
118
- range('{')(() => () => [['{'], unexpectedSymbol]),
119
- range('|')(() => () => [['|'], unexpectedSymbol]),
120
- range('}')(() => () => [['}'], unexpectedSymbol]),
121
- range('~')(() => () => [['~'], unexpectedSymbol]),
122
- ])(undefined)
package/fsc/test.f.ts DELETED
@@ -1,21 +0,0 @@
1
- import * as _ from './module.f.ts'
2
- import * as ascii from '../text/ascii/module.f.ts'
3
- const { one } = ascii
4
- import * as j from '../json/module.f.ts'
5
- const { stringify } = j
6
- const s = stringify(i => i)
7
-
8
- /** @type {} */
9
- const f
10
- : (v: string) => string
11
- = v => {
12
- const n = one(v)
13
- return s(_.init(n)[0])
14
- }
15
-
16
- export default {
17
- a: () => {
18
- const x = f('1')
19
- if (x != '["1"]') { throw x }
20
- }
21
- }
package/fsm/README.md DELETED
@@ -1,113 +0,0 @@
1
- # FSM
2
-
3
- This module is about a [finite-state machine](https://en.wikipedia.org/wiki/Finite-state_machine). It's not about
4
- [Flying Spaghetti Monster](https://en.wikipedia.org/wiki/Flying_Spaghetti_Monster).
5
-
6
- ## FA Expression
7
-
8
- - `symbol(s)`
9
- - `next state`
10
-
11
- ## FA Rule
12
-
13
- - `init state`
14
- - `FA Epression`
15
-
16
- ## Example
17
-
18
- FunctionalScript Identifier
19
-
20
- ### Grammar (EBNF)
21
-
22
- ```
23
- id ::= `_$a..zA..Z` id2
24
- id2 ::= `_$a..zA..Z0..9` id2
25
- ```
26
-
27
- ### FA
28
-
29
- ```js
30
- const lowercaseAlpha = byteSet.range('a')('z')
31
- const uppercaseAlpha = byteSet.range('A')('Z')
32
- const alpha = byteSet.union(lowercaseAlpha)(uppercaseAlpha)
33
- const idSymbol = byteSet.union(byteSet.one('_'))(byteSet.one('$'))
34
- const idBegin = byteSet.union(alpha)(idSymbol)
35
-
36
- const digit = byteSet.range('0')('9')
37
- const idNext = byteSet.union(idBegin)(digit)
38
-
39
- const dot = byteSet('.')
40
-
41
- const grammar = [
42
- ['', digit, 'int'],
43
- ['int', digit, 'int'],
44
- //
45
- ['', digit, 'floatBegin'],
46
- ['floatBegin', digit, 'floatBegin'],
47
- ['floatBegin', dot, 'floatDot'],
48
- ['floatDot', digit, 'float'],
49
- ['float', digit, 'float'],
50
- //
51
- ['', idBegin, 'id'],
52
- ['id', idNext, 'id'],
53
- ]
54
- ```
55
-
56
- ```js
57
- const result = {
58
- "['']": {
59
- digit: "['floatBegin','int']",
60
- idBegin: "['id']"
61
- },
62
- "['floatBegin','int']": {
63
- digit: "['floatBegin','int']",
64
- dot: "['floatDot']",
65
- },
66
- "['floatDot']": {
67
- digit: "['float']"
68
- },
69
- "['float']": {
70
- digit: "['float']"
71
- },
72
- "['id']": {
73
- idNext: "['id']"
74
- }
75
- }
76
- ```
77
-
78
- ```js
79
- const result = [
80
- { // 0
81
- digit: 1,
82
- idBegin: 4
83
- },
84
- { // 1
85
- digit: 1,
86
- dot: 2,
87
- },
88
- { // 2
89
- digit: 3
90
- },
91
- { // 3
92
- digit: 3
93
- },
94
- { // 4
95
- idNext: 4
96
- }
97
- }
98
- ```
99
-
100
- ## How to Add a Property # 1
101
-
102
- ```js
103
- const a = { x: 5, y: 6 }
104
- const b = { ...a, z: 7 }
105
- ```
106
-
107
- ## How to Add a Property # 2
108
-
109
- ```js
110
- import map from './types/map/module.f.mjs'
111
- const a = map.fromEntries(Object.entries({ x: 5, y: 6 }))
112
- const b = map.setReplace('z')(7)(a)
113
- ```