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
@@ -1,287 +0,0 @@
1
- /**
2
- * This module generates Rust code for COM interop from a high-level type library definition.
3
- *
4
- * The module provides functions to define structs, traits, and implementations in Rust,
5
- * specifically tailored for `nanocom` interoperation.
6
- */
7
- import * as types from '../types/module.f.ts'
8
- const { paramList } = types
9
- import * as Text from '../../text/module.f.ts'
10
- import * as O from '../../types/object/module.f.ts'
11
- import * as list from '../../types/list/module.f.ts'
12
- const { flat, map, flatMap } = list
13
- const { entries } = Object
14
- import * as func from '../../types/function/module.f.ts'
15
- const { fn } = func
16
- import * as string from '../../types/string/module.f.ts'
17
- const { join } = string
18
-
19
- const rustField
20
- : (field: string) => string
21
- = field => `pub ${field},`
22
-
23
- const mapRustField = map(rustField)
24
-
25
- const rustStruct
26
- : (b: list.Thunk<string>) => (name: string) => Text.Block
27
- = b => name => [`#[repr(C)]`, `pub struct ${name} {`, mapRustField(b), `}`]
28
-
29
- const commaJoin = join(', ')
30
-
31
- const ref
32
- : (name: string) => string
33
- = name => `${name}::Ref`
34
-
35
- const obj
36
- : (name: string) => string
37
- = name => `&${name}::Object`
38
-
39
- const self = ['&self']
40
-
41
- const paramName
42
- : (p: types.Field) => string
43
- = ([n]) => n
44
-
45
- const callList
46
- : (p: types.FieldArray) => list.Thunk<string>
47
- = p => map(paramName)(paramList(p))
48
-
49
- const call
50
- : (p: types.FieldArray) => string
51
- = p => commaJoin(callList(p))
52
-
53
- const virtualCall
54
- : (p: types.FieldArray) => string
55
- = p => commaJoin(flat([['self'], callList(p)]))
56
-
57
- const super_ = 'super::'
58
-
59
- const assign
60
- : (m: types.Method) => string
61
- = ([n]) => `${n}: Self::${n},`
62
-
63
- const mapAssign = map(assign)
64
-
65
- const this_ = ['this: &Object']
66
-
67
- const rustType
68
- : (n: string) => string
69
- = n => `pub type ${n} = nanocom::${n}<Interface>;`
70
-
71
- type OptionalProperty<T> = T|{}
72
-
73
- type Where = {readonly where: readonly string[]}
74
-
75
- type WhereContent = OptionalProperty<Where> & {readonly content: Text.Block}
76
-
77
- const whereContent
78
- : (h: string) => (wh: WhereContent) => Text.Block
79
- = h => wh => {
80
- const w = 'where' in wh ? [
81
- h,
82
- `where`,
83
- mapComma(wh.where),
84
- '{'
85
- ]: [`${h} {`]
86
- const x = [
87
- wh.content,
88
- '}',
89
- ]
90
- return flat([w, x])
91
- }
92
-
93
- type Impl = {
94
- readonly param?: string
95
- readonly trait: string
96
- readonly type: string
97
- readonly where?: readonly string[]
98
- readonly content: Text.Block
99
- }
100
-
101
- const rustImpl
102
- : (impl: Impl) => Text.Block
103
- = i => {
104
- const p = 'param' in i ? `<${i.param}>` : ''
105
- const header = `impl${p} ${i.trait} for ${i.type}`
106
- return whereContent(header)(i)
107
- }
108
-
109
- type Trait = {
110
- readonly pub?: true
111
- readonly type: string
112
- readonly where?: readonly string[]
113
- readonly content: Text.Block
114
- }
115
-
116
- const comma: (s: string) => string = s => `${s},`
117
-
118
- const mapComma = map(comma)
119
-
120
- const trait
121
- : (t: Trait) => Text.Block
122
- = t => {
123
- const p = t.pub === true ? 'pub ' : ''
124
- const h = `${p}trait ${t.type}`
125
- return whereContent(h)(t)
126
- }
127
-
128
- const traitImpl
129
- : (t: Trait) => Text.Block
130
- = t => {
131
- const i = rustImpl({
132
- param: 'T',
133
- trait: t.type,
134
- type: 'T',
135
- where,
136
- content: [],
137
- })
138
- return flat([trait({ ...t, where }), i])
139
- }
140
-
141
- const where = ['Self: nanocom::Class<Interface = Interface>', 'nanocom::CObject<Self>: Ex']
142
-
143
- /**
144
- * Generates Rust code for the given type library.
145
- *
146
- * @param library - The library of type definitions to generate Rust code for.
147
- * @returns A block of Rust code representing the library.
148
- */
149
- export const rust = (library: types.Library): Text.Block => {
150
-
151
- const type
152
- : (p: string) => (o: (_: string) => string) => (t: types.Type) => string
153
- = p => {
154
- const f
155
- : (o: (_: string) => string) => (t: types.Type) => string
156
- = o => t => {
157
- if (typeof t === 'string') { return t }
158
- if (t.length === 2) { return `*const ${f(ref)(t[1])}` }
159
- const [id] = t
160
- const fullId = `${p}${id}`
161
- return 'interface' in library[id] ? o(fullId) : fullId
162
- }
163
- return f
164
- }
165
-
166
- const pf
167
- : (p: string) => (o: (_: string) => string) => (f: types.Field) => string
168
- = p => o => ([name, t]) => `${name}: ${type(p)(o)(t)}`
169
-
170
- const param = pf(super_)(obj)
171
-
172
- const mapParam = map(param)
173
-
174
- const mapField = map(pf('')(ref))
175
-
176
- const struct
177
- : (fa: types.FieldArray) => (name: string) => Text.Block
178
- = fn(entries)
179
- .then(mapField)
180
- .then(rustStruct)
181
- .result
182
-
183
- const func
184
- : (first: readonly string[]) => (p: types.FieldArray) => string
185
- = first => p => {
186
- const resultStr = '_' in p ? ` -> ${type(super_)(ref)(p._)}` : ''
187
- const params = commaJoin(flat([first, mapParam(paramList(p))]))
188
- return `(${params})${resultStr}`
189
- }
190
-
191
- const virtualFnType
192
- : (n: string) => (p: types.FieldArray) => string
193
- = n => p => `extern "system" fn${n}${func(this_)(p)}`
194
-
195
- const virtualFn
196
- : (m: types.Method) => string
197
- = ([n, p]) => `${n}: unsafe ${virtualFnType('')(p)}`
198
-
199
- const mapVirtualFn = map(virtualFn)
200
-
201
- const headerFn
202
- : (m: types.Method) => string
203
- = ([n, p]) => `fn ${n}${func(self)(p)}`
204
-
205
- const traitFn
206
- : (m: types.Method) => string
207
- = m => `${headerFn(m)};`
208
-
209
- const mapTraitFn = map(traitFn)
210
-
211
- const implFn
212
- : (m: types.Method) => Text.Block
213
- = m => {
214
- const [n, p] = m
215
- return [
216
- `${headerFn(m)} {`,
217
- [`unsafe { (self.interface().${n})(${virtualCall(p)}) }`],
218
- '}'
219
- ]
220
- }
221
-
222
- const flatMapImplFn = flatMap(implFn)
223
-
224
- const impl
225
- : (m: types.Method) => Text.Block
226
- = ([n, p]) => {
227
- const type = virtualFnType(` ${n}`)(p)
228
- return [
229
- `${type} {`,
230
- [`unsafe { nanocom::CObject::from_object_unchecked(this) }.${n}(${call(p)})`],
231
- '}'
232
- ]
233
- }
234
-
235
- const flatMapImpl = flatMap(impl)
236
-
237
- const interface_
238
- : (i: types.Interface) => (name: string) => Text.Block
239
- = ({ interface: i, guid }) => name => {
240
-
241
- const e = entries(i)
242
-
243
- return [
244
- `pub mod ${name} {`,
245
- [
246
- rustType('Object'),
247
- rustType('Ref'),
248
- rustType('Vmt'),
249
- ],
250
- rustStruct(mapVirtualFn(e))('Interface'),
251
- rustImpl({
252
- trait: 'nanocom::Interface',
253
- type: 'Interface',
254
- content: [`const GUID: nanocom::GUID = 0x${guid.replaceAll('-', '_')};`]
255
- }),
256
- trait({ pub: true, type: 'Ex', content: mapTraitFn(e) }),
257
- rustImpl({
258
- trait: 'Ex',
259
- type: 'Object',
260
- content: flatMapImplFn(e)
261
- }),
262
- traitImpl({
263
- pub: true,
264
- type: 'ClassEx',
265
- content: ['const VMT: Vmt = Vmt {',
266
- [ 'iunknown: nanocom::CObject::<Self>::IUNKNOWN,',
267
- 'interface: Interface {',
268
- mapAssign(e),
269
- '},',
270
- ],
271
- '};'
272
- ]
273
- }),
274
- traitImpl({
275
- type: 'PrivateClassEx',
276
- content: flatMapImpl(e)
277
- }),
278
- '}'
279
- ]
280
- }
281
-
282
- const def
283
- : (type: O.Entry<types.Definition>) => Text.Block
284
- = ([name, type]) => ('interface' in type ? interface_(type) : struct(type.struct))(name)
285
-
286
- return flat([['#![allow(non_snake_case)]'], flatMap(def)(entries(library))])
287
- }
@@ -1,7 +0,0 @@
1
- # This file is automatically @generated by Cargo.
2
- # It is not intended for manual editing.
3
- version = 3
4
-
5
- [[package]]
6
- name = "com"
7
- version = "0.1.0"
@@ -1,15 +0,0 @@
1
- [package]
2
- name = "nanocom"
3
- version = "0.2.1"
4
- edition = "2021"
5
- description = "Nano-COM, extremly small subset of cross-platform COM"
6
- authors = ["NatFoam"]
7
- license = "MIT"
8
- homepage = "https://github.com/functionalscript/functionalscript/tree/main/com/rust/nanocom"
9
- repository = "https://github.com/functionalscript/functionalscript"
10
- keywords = ["com", "xpcom", "abi"]
11
- categories = ["development-tools::ffi", "external-ffi-bindings", "api-bindings"]
12
-
13
- # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
14
-
15
- [dependencies]
@@ -1,56 +0,0 @@
1
- # Nano-COM
2
-
3
- See [Nano-COM](https://en.wikipedia.org/wiki/Component_Object_Model#Nano-COM_(a.k.a_XPCOM)).
4
-
5
- ## Function Stack
6
-
7
- - a public function.
8
- ```rust
9
- let o: Object<IMy> = ...;
10
- // calling a public function
11
- let i: u32 = o.B();
12
- ```
13
- ```rust
14
- trait IMyEx {
15
- // a definition
16
- fn B(&self) -> u32;
17
- }
18
- impl IMyEx for Object<IMy> {
19
- // an implementation of the public function
20
- fn B(&self) -> u32 {
21
- // calling a virtual function.
22
- unsafe { (self.interface().B()(self) }
23
- }
24
- }
25
- ```
26
- - a virtual function.
27
- ```rust
28
- #[repr(C)]
29
- pub struct IMy {
30
- // a definiton of the virtual function
31
- pub B: unsafe extern "stdcall" fn(this: &Object<IMy>) -> u32
32
- }
33
- trait IMyVmtFn: Class<Interface = IMy>
34
- where
35
- CObject<Self>: IMyEx
36
- {
37
- // an implementation of the virtual function
38
- extern "stdcall" fn B(this: &Object<IMy>) -> u32 {
39
- // calling a function implementation
40
- unsafe { Self::to_cobject(this) }.B()
41
- }
42
- }
43
- ```
44
- - a function implementation.
45
- ```rust
46
- trait IMyEx {
47
- // a definition
48
- fn B(&self) -> u32;
49
- }
50
- impl IMyEx for CObject<X> {
51
- // an implementation of the function.
52
- fn B(&self) -> u32 {
53
- self.value.0
54
- }
55
- }
56
- ```
@@ -1,6 +0,0 @@
1
- use crate::{Interface, Vmt};
2
-
3
- pub trait Class: Sized {
4
- type Interface: Interface;
5
- fn static_vmt() -> &'static Vmt<Self::Interface>;
6
- }
@@ -1,90 +0,0 @@
1
- use std::{
2
- ptr::null,
3
- sync::atomic::{AtomicU32, Ordering},
4
- };
5
-
6
- use crate::{guid::GuidEx, hresult::HRESULT, iunknown::IUnknown, Class, Object, Ref};
7
-
8
- #[repr(C)]
9
- pub struct CObject<T: Class> {
10
- object: Object<T::Interface>,
11
- counter: AtomicU32,
12
- pub value: T,
13
- }
14
-
15
- impl<T: Class> CObject<T> {
16
- pub const IUNKNOWN: IUnknown<T::Interface> = IUnknown {
17
- QueryInterface: Self::QueryInterface,
18
- AddRef: Self::AddRef,
19
- Release: Self::Release,
20
- };
21
-
22
- pub unsafe fn from_object_unchecked(this: &Object<T::Interface>) -> &CObject<T> {
23
- let p = this as *const Object<T::Interface> as *const CObject<T>;
24
- &*p
25
- }
26
-
27
- #[allow(non_snake_case)]
28
- extern "system" fn QueryInterface(
29
- this: &Object<T::Interface>,
30
- riid: &u128,
31
- ppv_object: &mut *const Object,
32
- ) -> HRESULT {
33
- let (p, r) = if *riid == <()>::PLATFORM_GUID || *riid == T::Interface::PLATFORM_GUID {
34
- Self::AddRef(this);
35
- (this.to_iunknown() as *const Object, HRESULT::S_OK)
36
- } else {
37
- (null(), HRESULT::E_NOINTERFACE)
38
- };
39
- *ppv_object = p;
40
- r
41
- }
42
-
43
- #[allow(non_snake_case)]
44
- extern "system" fn AddRef(this: &Object<T::Interface>) -> u32 {
45
- unsafe { Self::from_object_unchecked(this) }
46
- .counter
47
- .fetch_add(1, Ordering::Relaxed)
48
- + 1
49
- }
50
-
51
- #[allow(non_snake_case)]
52
- extern "system" fn Release(this: &Object<T::Interface>) -> u32 {
53
- let t = unsafe { Self::from_object_unchecked(this) };
54
- match t.counter.fetch_sub(1, Ordering::Relaxed) {
55
- 1 => {
56
- let m = t as *const CObject<T> as *mut CObject<T>;
57
- let _ = unsafe { Box::from_raw(m) };
58
- 0
59
- }
60
- x => x - 1,
61
- }
62
- }
63
- }
64
-
65
- pub trait CObjectEx: Class {
66
- fn to_cobject(self) -> Ref<Self::Interface> {
67
- let c = CObject {
68
- object: Object::new(Self::static_vmt()),
69
- counter: Default::default(),
70
- value: self,
71
- };
72
- let p = Box::into_raw(Box::new(c));
73
- let o = &unsafe { &*p }.object;
74
- o.into()
75
- }
76
- }
77
-
78
- impl<T: Class> CObjectEx for T {}
79
-
80
- impl<'a, T: Class> From<&'a CObject<T>> for &'a Object<T::Interface> {
81
- fn from(this: &'a CObject<T>) -> Self {
82
- &this.object
83
- }
84
- }
85
-
86
- impl<T: Class> From<&CObject<T>> for Ref<T::Interface> {
87
- fn from(this: &CObject<T>) -> Self {
88
- (&this.object).into()
89
- }
90
- }
@@ -1,15 +0,0 @@
1
- use crate::Interface;
2
-
3
- pub type GUID = u128;
4
-
5
- pub trait GuidEx: Interface {
6
- const PLATFORM_GUID: GUID = {
7
- let x = Self::GUID;
8
- (x >> 96)
9
- | ((x >> 48) & 0x00000_000_0000_0000_0000_FFFF_0000_0000)
10
- | ((x >> 16) & 0x0000_0000_0000_0000_FFFF_0000_0000_0000)
11
- | (((x as u64).swap_bytes() as u128) << 64)
12
- };
13
- }
14
-
15
- impl<T: Interface> GuidEx for T {}
@@ -1,7 +0,0 @@
1
- #[allow(non_camel_case_types)]
2
- #[repr(u32)]
3
- #[derive(Debug)]
4
- pub enum HRESULT {
5
- S_OK = 0,
6
- E_NOINTERFACE = 0x80004002,
7
- }
@@ -1,9 +0,0 @@
1
- use crate::guid::GUID;
2
-
3
- pub trait Interface: 'static {
4
- const GUID: GUID;
5
- }
6
-
7
- impl Interface for () {
8
- const GUID: GUID = 0x00000000_0000_0000_C000_000000000046;
9
- }
@@ -1,13 +0,0 @@
1
- use crate::{hresult::HRESULT, Object, GUID};
2
-
3
- #[allow(non_snake_case)]
4
- #[repr(C)]
5
- pub struct IUnknown<I: 'static> {
6
- pub QueryInterface: unsafe extern "system" fn(
7
- this: &Object<I>,
8
- riid: &GUID,
9
- ppv_object: &mut *const Object,
10
- ) -> HRESULT,
11
- pub AddRef: unsafe extern "system" fn(this: &Object<I>) -> u32,
12
- pub Release: unsafe extern "system" fn(this: &Object<I>) -> u32,
13
- }
@@ -1,20 +0,0 @@
1
- mod class;
2
- mod cobject;
3
- mod guid;
4
- mod hresult;
5
- mod interface;
6
- mod iunknown;
7
- mod object;
8
- mod r#ref;
9
- mod vmt;
10
-
11
- pub use crate::{
12
- class::Class,
13
- cobject::{CObject, CObjectEx},
14
- guid::GUID,
15
- interface::Interface,
16
- iunknown::IUnknown,
17
- object::Object,
18
- r#ref::Ref,
19
- vmt::Vmt,
20
- };
@@ -1,34 +0,0 @@
1
- use crate::{hresult::HRESULT, interface::Interface, iunknown::IUnknown, r#ref::Ref, vmt::Vmt};
2
- use std::ptr::null;
3
-
4
- #[repr(C)]
5
- pub struct Object<I: 'static = ()>(&'static Vmt<I>);
6
-
7
- impl<I> Object<I> {
8
- pub fn new(vmt: &'static Vmt<I>) -> Self {
9
- Self(vmt)
10
- }
11
- pub unsafe fn iunknown(&self) -> &'static IUnknown<I> {
12
- &self.0.iunknown
13
- }
14
- pub unsafe fn interface(&self) -> &'static I {
15
- &self.0.interface
16
- }
17
- pub fn to_iunknown(&self) -> &Object {
18
- let p = self as *const Object<I> as *const Object;
19
- unsafe { &*p }
20
- }
21
- pub fn query_interface<J: Interface>(&self) -> Result<Ref<J>, HRESULT> {
22
- let mut p = null();
23
- match unsafe { (self.0.iunknown.QueryInterface)(self, &J::GUID, &mut p) } {
24
- HRESULT::S_OK => {
25
- let r = p as *const Object<J>;
26
- Ok(unsafe { Ref::from_raw(r) })
27
- }
28
- e => Err(e),
29
- }
30
- }
31
- pub fn query_iunknown(&self) -> Ref {
32
- self.query_interface().unwrap()
33
- }
34
- }
@@ -1,57 +0,0 @@
1
- use std::{
2
- cmp::Eq,
3
- fmt::{Debug, Formatter},
4
- ops::Deref,
5
- };
6
-
7
- use crate::object::Object;
8
-
9
- #[repr(transparent)]
10
- pub struct Ref<I: 'static = ()>(*const Object<I>);
11
-
12
- impl<I: 'static> Ref<I> {
13
- pub unsafe fn from_raw(p: *const Object<I>) -> Ref<I> {
14
- Ref(p)
15
- }
16
- }
17
-
18
- impl<I> Deref for Ref<I> {
19
- type Target = Object<I>;
20
- fn deref(&self) -> &Self::Target {
21
- let p = self.0;
22
- unsafe { &*p }
23
- }
24
- }
25
-
26
- impl<I> Drop for Ref<I> {
27
- fn drop(&mut self) {
28
- unsafe { (self.iunknown().Release)(self) };
29
- }
30
- }
31
-
32
- impl<I> Clone for Ref<I> {
33
- fn clone(&self) -> Self {
34
- self.deref().into()
35
- }
36
- }
37
-
38
- impl<I> From<&Object<I>> for Ref<I> {
39
- fn from(this: &Object<I>) -> Self {
40
- unsafe { (this.iunknown().AddRef)(this) };
41
- Self(this)
42
- }
43
- }
44
-
45
- impl<I> Debug for Ref<I> {
46
- fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
47
- f.debug_tuple("Ref").field(&self.0).finish()
48
- }
49
- }
50
-
51
- impl<I> PartialEq for Ref<I> {
52
- fn eq(&self, other: &Self) -> bool {
53
- self.0 == other.0
54
- }
55
- }
56
-
57
- impl<I> Eq for Ref<I> {}
@@ -1,7 +0,0 @@
1
- use crate::iunknown::IUnknown;
2
-
3
- #[repr(C)]
4
- pub struct Vmt<I: 'static> {
5
- pub iunknown: IUnknown<I>,
6
- pub interface: I,
7
- }