@tellahq/rescript 10.1.0-alpha.2 → 10.1.4-republish-2

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 (668) hide show
  1. package/CHANGELOG.md +204 -2
  2. package/README.md +1 -1
  3. package/darwinarm64/bsb_helper.exe +0 -0
  4. package/darwinarm64/bsc.exe +0 -0
  5. package/darwinarm64/ninja.exe +0 -0
  6. package/darwinarm64/rescript.exe +0 -0
  7. package/docs/docson/build-schema.json +497 -516
  8. package/lib/4.06.1/bsb_helper.ml +6 -1
  9. package/lib/4.06.1/rescript.ml +1414 -1191
  10. package/lib/4.06.1/whole_compiler.ml +69844 -69069
  11. package/lib/es6/belt_internalBuckets.js +13 -13
  12. package/lib/es6/caml_float.js +5 -5
  13. package/lib/es6/caml_format.js +1 -1
  14. package/lib/es6/caml_int64.js +1 -1
  15. package/lib/es6/caml_obj.js +26 -6
  16. package/lib/es6/complex.js +4 -4
  17. package/lib/es6/js.js +3 -0
  18. package/lib/es6/js_promise2.js +16 -0
  19. package/lib/es6/jsxPPXReactSupport.js +26 -0
  20. package/lib/js/belt_internalBuckets.js +13 -13
  21. package/lib/js/caml_float.js +5 -5
  22. package/lib/js/caml_format.js +1 -1
  23. package/lib/js/caml_int64.js +1 -1
  24. package/lib/js/caml_obj.js +26 -6
  25. package/lib/js/complex.js +4 -4
  26. package/lib/js/js.js +3 -0
  27. package/lib/js/js_promise2.js +14 -0
  28. package/lib/js/jsxPPXReactSupport.js +24 -0
  29. package/package.json +2 -1
  30. package/scripts/buildNinjaBinary.js +29 -0
  31. package/scripts/install.js +7 -3
  32. package/scripts/installUtils.js +9 -1
  33. package/scripts/rescript_arg.js +2 -4
  34. package/scripts/rescript_format.js +73 -39
  35. package/win32/refmt.exe +0 -0
  36. package/darwin/bsb_helper.exe +0 -0
  37. package/darwin/bsc.exe +0 -0
  38. package/darwin/ninja.COPYING +0 -202
  39. package/darwin/ninja.exe +0 -0
  40. package/darwin/rescript.exe +0 -0
  41. package/darwinarm64/ninja.COPYING +0 -202
  42. package/freebsd/ninja.COPYING +0 -202
  43. package/lib/ocaml/arg.cmi +0 -0
  44. package/lib/ocaml/arg.cmt +0 -0
  45. package/lib/ocaml/arg.cmti +0 -0
  46. package/lib/ocaml/arg.ml +0 -359
  47. package/lib/ocaml/arg.mli +0 -185
  48. package/lib/ocaml/array.cmi +0 -0
  49. package/lib/ocaml/array.cmt +0 -0
  50. package/lib/ocaml/array.cmti +0 -0
  51. package/lib/ocaml/array.ml +0 -307
  52. package/lib/ocaml/array.mli +0 -275
  53. package/lib/ocaml/arrayLabels.cmi +0 -0
  54. package/lib/ocaml/arrayLabels.cmt +0 -0
  55. package/lib/ocaml/arrayLabels.cmti +0 -0
  56. package/lib/ocaml/arrayLabels.ml +0 -307
  57. package/lib/ocaml/arrayLabels.mli +0 -276
  58. package/lib/ocaml/belt.cmi +0 -0
  59. package/lib/ocaml/belt.cmt +0 -0
  60. package/lib/ocaml/belt.ml +0 -352
  61. package/lib/ocaml/belt_Array.cmi +0 -0
  62. package/lib/ocaml/belt_Array.cmt +0 -0
  63. package/lib/ocaml/belt_Array.cmti +0 -0
  64. package/lib/ocaml/belt_Array.ml +0 -525
  65. package/lib/ocaml/belt_Array.mli +0 -707
  66. package/lib/ocaml/belt_Float.cmi +0 -0
  67. package/lib/ocaml/belt_Float.cmt +0 -0
  68. package/lib/ocaml/belt_Float.cmti +0 -0
  69. package/lib/ocaml/belt_Float.ml +0 -50
  70. package/lib/ocaml/belt_Float.mli +0 -106
  71. package/lib/ocaml/belt_HashMap.cmi +0 -0
  72. package/lib/ocaml/belt_HashMap.cmt +0 -0
  73. package/lib/ocaml/belt_HashMap.cmti +0 -0
  74. package/lib/ocaml/belt_HashMap.ml +0 -226
  75. package/lib/ocaml/belt_HashMap.mli +0 -436
  76. package/lib/ocaml/belt_HashMapInt.cmi +0 -0
  77. package/lib/ocaml/belt_HashMapInt.cmt +0 -0
  78. package/lib/ocaml/belt_HashMapInt.cmti +0 -0
  79. package/lib/ocaml/belt_HashMapInt.ml +0 -206
  80. package/lib/ocaml/belt_HashMapInt.mli +0 -50
  81. package/lib/ocaml/belt_HashMapString.cmi +0 -0
  82. package/lib/ocaml/belt_HashMapString.cmt +0 -0
  83. package/lib/ocaml/belt_HashMapString.cmti +0 -0
  84. package/lib/ocaml/belt_HashMapString.ml +0 -206
  85. package/lib/ocaml/belt_HashMapString.mli +0 -50
  86. package/lib/ocaml/belt_HashSet.cmi +0 -0
  87. package/lib/ocaml/belt_HashSet.cmt +0 -0
  88. package/lib/ocaml/belt_HashSet.cmti +0 -0
  89. package/lib/ocaml/belt_HashSet.ml +0 -196
  90. package/lib/ocaml/belt_HashSet.mli +0 -125
  91. package/lib/ocaml/belt_HashSetInt.cmi +0 -0
  92. package/lib/ocaml/belt_HashSetInt.cmt +0 -0
  93. package/lib/ocaml/belt_HashSetInt.cmti +0 -0
  94. package/lib/ocaml/belt_HashSetInt.ml +0 -155
  95. package/lib/ocaml/belt_HashSetInt.mli +0 -74
  96. package/lib/ocaml/belt_HashSetString.cmi +0 -0
  97. package/lib/ocaml/belt_HashSetString.cmt +0 -0
  98. package/lib/ocaml/belt_HashSetString.cmti +0 -0
  99. package/lib/ocaml/belt_HashSetString.ml +0 -156
  100. package/lib/ocaml/belt_HashSetString.mli +0 -74
  101. package/lib/ocaml/belt_Id.cmi +0 -0
  102. package/lib/ocaml/belt_Id.cmt +0 -0
  103. package/lib/ocaml/belt_Id.cmti +0 -0
  104. package/lib/ocaml/belt_Id.ml +0 -133
  105. package/lib/ocaml/belt_Id.mli +0 -171
  106. package/lib/ocaml/belt_Int.cmi +0 -0
  107. package/lib/ocaml/belt_Int.cmt +0 -0
  108. package/lib/ocaml/belt_Int.cmti +0 -0
  109. package/lib/ocaml/belt_Int.ml +0 -50
  110. package/lib/ocaml/belt_Int.mli +0 -103
  111. package/lib/ocaml/belt_List.cmi +0 -0
  112. package/lib/ocaml/belt_List.cmt +0 -0
  113. package/lib/ocaml/belt_List.cmti +0 -0
  114. package/lib/ocaml/belt_List.ml +0 -803
  115. package/lib/ocaml/belt_List.mli +0 -844
  116. package/lib/ocaml/belt_Map.cmi +0 -0
  117. package/lib/ocaml/belt_Map.cmt +0 -0
  118. package/lib/ocaml/belt_Map.cmti +0 -0
  119. package/lib/ocaml/belt_Map.ml +0 -170
  120. package/lib/ocaml/belt_Map.mli +0 -496
  121. package/lib/ocaml/belt_MapDict.cmi +0 -0
  122. package/lib/ocaml/belt_MapDict.cmt +0 -0
  123. package/lib/ocaml/belt_MapDict.cmti +0 -0
  124. package/lib/ocaml/belt_MapDict.ml +0 -278
  125. package/lib/ocaml/belt_MapDict.mli +0 -268
  126. package/lib/ocaml/belt_MapInt.cmi +0 -0
  127. package/lib/ocaml/belt_MapInt.cmt +0 -0
  128. package/lib/ocaml/belt_MapInt.cmti +0 -0
  129. package/lib/ocaml/belt_MapInt.ml +0 -169
  130. package/lib/ocaml/belt_MapInt.mli +0 -187
  131. package/lib/ocaml/belt_MapString.cmi +0 -0
  132. package/lib/ocaml/belt_MapString.cmt +0 -0
  133. package/lib/ocaml/belt_MapString.cmti +0 -0
  134. package/lib/ocaml/belt_MapString.ml +0 -169
  135. package/lib/ocaml/belt_MapString.mli +0 -187
  136. package/lib/ocaml/belt_MutableMap.cmi +0 -0
  137. package/lib/ocaml/belt_MutableMap.cmt +0 -0
  138. package/lib/ocaml/belt_MutableMap.cmti +0 -0
  139. package/lib/ocaml/belt_MutableMap.ml +0 -241
  140. package/lib/ocaml/belt_MutableMap.mli +0 -145
  141. package/lib/ocaml/belt_MutableMapInt.cmi +0 -0
  142. package/lib/ocaml/belt_MutableMapInt.cmt +0 -0
  143. package/lib/ocaml/belt_MutableMapInt.cmti +0 -0
  144. package/lib/ocaml/belt_MutableMapInt.ml +0 -172
  145. package/lib/ocaml/belt_MutableMapInt.mli +0 -135
  146. package/lib/ocaml/belt_MutableMapString.cmi +0 -0
  147. package/lib/ocaml/belt_MutableMapString.cmt +0 -0
  148. package/lib/ocaml/belt_MutableMapString.cmti +0 -0
  149. package/lib/ocaml/belt_MutableMapString.ml +0 -172
  150. package/lib/ocaml/belt_MutableMapString.mli +0 -135
  151. package/lib/ocaml/belt_MutableQueue.cmi +0 -0
  152. package/lib/ocaml/belt_MutableQueue.cmt +0 -0
  153. package/lib/ocaml/belt_MutableQueue.cmti +0 -0
  154. package/lib/ocaml/belt_MutableQueue.ml +0 -222
  155. package/lib/ocaml/belt_MutableQueue.mli +0 -116
  156. package/lib/ocaml/belt_MutableSet.cmi +0 -0
  157. package/lib/ocaml/belt_MutableSet.cmt +0 -0
  158. package/lib/ocaml/belt_MutableSet.cmti +0 -0
  159. package/lib/ocaml/belt_MutableSet.ml +0 -371
  160. package/lib/ocaml/belt_MutableSet.mli +0 -617
  161. package/lib/ocaml/belt_MutableSetInt.cmi +0 -0
  162. package/lib/ocaml/belt_MutableSetInt.cmt +0 -0
  163. package/lib/ocaml/belt_MutableSetInt.cmti +0 -0
  164. package/lib/ocaml/belt_MutableSetInt.ml +0 -342
  165. package/lib/ocaml/belt_MutableSetInt.mli +0 -124
  166. package/lib/ocaml/belt_MutableSetString.cmi +0 -0
  167. package/lib/ocaml/belt_MutableSetString.cmt +0 -0
  168. package/lib/ocaml/belt_MutableSetString.cmti +0 -0
  169. package/lib/ocaml/belt_MutableSetString.ml +0 -342
  170. package/lib/ocaml/belt_MutableSetString.mli +0 -124
  171. package/lib/ocaml/belt_MutableStack.cmi +0 -0
  172. package/lib/ocaml/belt_MutableStack.cmt +0 -0
  173. package/lib/ocaml/belt_MutableStack.cmti +0 -0
  174. package/lib/ocaml/belt_MutableStack.ml +0 -106
  175. package/lib/ocaml/belt_MutableStack.mli +0 -63
  176. package/lib/ocaml/belt_Option.cmi +0 -0
  177. package/lib/ocaml/belt_Option.cmt +0 -0
  178. package/lib/ocaml/belt_Option.cmti +0 -0
  179. package/lib/ocaml/belt_Option.ml +0 -93
  180. package/lib/ocaml/belt_Option.mli +0 -270
  181. package/lib/ocaml/belt_Range.cmi +0 -0
  182. package/lib/ocaml/belt_Range.cmt +0 -0
  183. package/lib/ocaml/belt_Range.cmti +0 -0
  184. package/lib/ocaml/belt_Range.ml +0 -76
  185. package/lib/ocaml/belt_Range.mli +0 -114
  186. package/lib/ocaml/belt_Result.cmi +0 -0
  187. package/lib/ocaml/belt_Result.cmt +0 -0
  188. package/lib/ocaml/belt_Result.cmti +0 -0
  189. package/lib/ocaml/belt_Result.ml +0 -75
  190. package/lib/ocaml/belt_Result.mli +0 -205
  191. package/lib/ocaml/belt_Set.cmi +0 -0
  192. package/lib/ocaml/belt_Set.cmt +0 -0
  193. package/lib/ocaml/belt_Set.cmti +0 -0
  194. package/lib/ocaml/belt_Set.cppo.ml +0 -205
  195. package/lib/ocaml/belt_Set.cppo.mli +0 -153
  196. package/lib/ocaml/belt_Set.ml +0 -164
  197. package/lib/ocaml/belt_Set.mli +0 -523
  198. package/lib/ocaml/belt_SetDict.cmi +0 -0
  199. package/lib/ocaml/belt_SetDict.cmt +0 -0
  200. package/lib/ocaml/belt_SetDict.cmti +0 -0
  201. package/lib/ocaml/belt_SetDict.ml +0 -237
  202. package/lib/ocaml/belt_SetDict.mli +0 -567
  203. package/lib/ocaml/belt_SetInt.cmi +0 -0
  204. package/lib/ocaml/belt_SetInt.cmt +0 -0
  205. package/lib/ocaml/belt_SetInt.cmti +0 -0
  206. package/lib/ocaml/belt_SetInt.ml +0 -201
  207. package/lib/ocaml/belt_SetInt.mli +0 -151
  208. package/lib/ocaml/belt_SetString.cmi +0 -0
  209. package/lib/ocaml/belt_SetString.cmt +0 -0
  210. package/lib/ocaml/belt_SetString.cmti +0 -0
  211. package/lib/ocaml/belt_SetString.ml +0 -201
  212. package/lib/ocaml/belt_SetString.mli +0 -151
  213. package/lib/ocaml/belt_SortArray.cmi +0 -0
  214. package/lib/ocaml/belt_SortArray.cmt +0 -0
  215. package/lib/ocaml/belt_SortArray.cmti +0 -0
  216. package/lib/ocaml/belt_SortArray.ml +0 -322
  217. package/lib/ocaml/belt_SortArray.mli +0 -146
  218. package/lib/ocaml/belt_SortArrayInt.cmi +0 -0
  219. package/lib/ocaml/belt_SortArrayInt.cmt +0 -0
  220. package/lib/ocaml/belt_SortArrayInt.cmti +0 -0
  221. package/lib/ocaml/belt_SortArrayInt.ml +0 -263
  222. package/lib/ocaml/belt_SortArrayInt.mli +0 -93
  223. package/lib/ocaml/belt_SortArrayString.cmi +0 -0
  224. package/lib/ocaml/belt_SortArrayString.cmt +0 -0
  225. package/lib/ocaml/belt_SortArrayString.cmti +0 -0
  226. package/lib/ocaml/belt_SortArrayString.ml +0 -263
  227. package/lib/ocaml/belt_SortArrayString.mli +0 -93
  228. package/lib/ocaml/belt_internalAVLset.cmt +0 -0
  229. package/lib/ocaml/belt_internalAVLset.cmti +0 -0
  230. package/lib/ocaml/belt_internalAVLset.ml +0 -665
  231. package/lib/ocaml/belt_internalAVLset.mli +0 -124
  232. package/lib/ocaml/belt_internalAVLtree.cmt +0 -0
  233. package/lib/ocaml/belt_internalAVLtree.cmti +0 -0
  234. package/lib/ocaml/belt_internalAVLtree.ml +0 -762
  235. package/lib/ocaml/belt_internalAVLtree.mli +0 -215
  236. package/lib/ocaml/belt_internalBuckets.cmt +0 -0
  237. package/lib/ocaml/belt_internalBuckets.cmti +0 -0
  238. package/lib/ocaml/belt_internalBuckets.ml +0 -218
  239. package/lib/ocaml/belt_internalBuckets.mli +0 -57
  240. package/lib/ocaml/belt_internalBucketsType.cmt +0 -0
  241. package/lib/ocaml/belt_internalBucketsType.cmti +0 -0
  242. package/lib/ocaml/belt_internalBucketsType.ml +0 -59
  243. package/lib/ocaml/belt_internalBucketsType.mli +0 -46
  244. package/lib/ocaml/belt_internalMapInt.cmt +0 -0
  245. package/lib/ocaml/belt_internalMapInt.ml +0 -227
  246. package/lib/ocaml/belt_internalMapString.cmt +0 -0
  247. package/lib/ocaml/belt_internalMapString.ml +0 -227
  248. package/lib/ocaml/belt_internalSetBuckets.cmt +0 -0
  249. package/lib/ocaml/belt_internalSetBuckets.cmti +0 -0
  250. package/lib/ocaml/belt_internalSetBuckets.ml +0 -157
  251. package/lib/ocaml/belt_internalSetBuckets.mli +0 -47
  252. package/lib/ocaml/belt_internalSetInt.cmt +0 -0
  253. package/lib/ocaml/belt_internalSetInt.ml +0 -129
  254. package/lib/ocaml/belt_internalSetString.cmt +0 -0
  255. package/lib/ocaml/belt_internalSetString.ml +0 -129
  256. package/lib/ocaml/belt_internals.cmti +0 -0
  257. package/lib/ocaml/belt_internals.mli +0 -79
  258. package/lib/ocaml/buffer.cmi +0 -0
  259. package/lib/ocaml/buffer.cmt +0 -0
  260. package/lib/ocaml/buffer.cmti +0 -0
  261. package/lib/ocaml/buffer.ml +0 -250
  262. package/lib/ocaml/buffer.mli +0 -149
  263. package/lib/ocaml/bytes.cmi +0 -0
  264. package/lib/ocaml/bytes.cmt +0 -0
  265. package/lib/ocaml/bytes.cmti +0 -0
  266. package/lib/ocaml/bytes.ml +0 -431
  267. package/lib/ocaml/bytes.mli +0 -430
  268. package/lib/ocaml/bytesLabels.cmi +0 -0
  269. package/lib/ocaml/bytesLabels.cmt +0 -0
  270. package/lib/ocaml/bytesLabels.cmti +0 -0
  271. package/lib/ocaml/bytesLabels.ml +0 -428
  272. package/lib/ocaml/bytesLabels.mli +0 -276
  273. package/lib/ocaml/callback.cmi +0 -0
  274. package/lib/ocaml/callback.cmt +0 -0
  275. package/lib/ocaml/callback.cmti +0 -0
  276. package/lib/ocaml/callback.ml +0 -20
  277. package/lib/ocaml/callback.mli +0 -34
  278. package/lib/ocaml/camlinternalLazy.cmi +0 -0
  279. package/lib/ocaml/camlinternalLazy.cmt +0 -0
  280. package/lib/ocaml/camlinternalLazy.cmti +0 -0
  281. package/lib/ocaml/camlinternalLazy.ml +0 -89
  282. package/lib/ocaml/camlinternalLazy.mli +0 -27
  283. package/lib/ocaml/camlinternalMod.cmi +0 -0
  284. package/lib/ocaml/camlinternalMod.cmt +0 -0
  285. package/lib/ocaml/camlinternalMod.cmti +0 -0
  286. package/lib/ocaml/camlinternalMod.ml +0 -21
  287. package/lib/ocaml/camlinternalMod.mli +0 -25
  288. package/lib/ocaml/char.cmi +0 -0
  289. package/lib/ocaml/char.cmt +0 -0
  290. package/lib/ocaml/char.cmti +0 -0
  291. package/lib/ocaml/char.ml +0 -76
  292. package/lib/ocaml/char.mli +0 -72
  293. package/lib/ocaml/complex.cmi +0 -0
  294. package/lib/ocaml/complex.cmt +0 -0
  295. package/lib/ocaml/complex.cmti +0 -0
  296. package/lib/ocaml/complex.ml +0 -87
  297. package/lib/ocaml/complex.mli +0 -86
  298. package/lib/ocaml/digest.cmi +0 -0
  299. package/lib/ocaml/digest.cmt +0 -0
  300. package/lib/ocaml/digest.cmti +0 -0
  301. package/lib/ocaml/digest.ml +0 -66
  302. package/lib/ocaml/digest.mli +0 -68
  303. package/lib/ocaml/dom.cmi +0 -0
  304. package/lib/ocaml/dom.cmt +0 -0
  305. package/lib/ocaml/dom.ml +0 -296
  306. package/lib/ocaml/dom_storage.cmi +0 -0
  307. package/lib/ocaml/dom_storage.cmt +0 -0
  308. package/lib/ocaml/dom_storage.ml +0 -22
  309. package/lib/ocaml/dom_storage2.cmi +0 -0
  310. package/lib/ocaml/dom_storage2.cmt +0 -0
  311. package/lib/ocaml/dom_storage2.ml +0 -11
  312. package/lib/ocaml/filename.cmi +0 -0
  313. package/lib/ocaml/filename.cmt +0 -0
  314. package/lib/ocaml/filename.cmti +0 -0
  315. package/lib/ocaml/filename.ml +0 -233
  316. package/lib/ocaml/filename.mli +0 -134
  317. package/lib/ocaml/genlex.cmi +0 -0
  318. package/lib/ocaml/genlex.cmt +0 -0
  319. package/lib/ocaml/genlex.cmti +0 -0
  320. package/lib/ocaml/genlex.ml +0 -201
  321. package/lib/ocaml/genlex.mli +0 -73
  322. package/lib/ocaml/hashmap.cppo.ml +0 -214
  323. package/lib/ocaml/hashmap.cppo.mli +0 -54
  324. package/lib/ocaml/hashset.cppo.ml +0 -165
  325. package/lib/ocaml/hashset.cppo.mli +0 -77
  326. package/lib/ocaml/hashtbl.cmi +0 -0
  327. package/lib/ocaml/hashtbl.cmt +0 -0
  328. package/lib/ocaml/hashtbl.cmti +0 -0
  329. package/lib/ocaml/hashtbl.ml +0 -541
  330. package/lib/ocaml/hashtbl.mli +0 -411
  331. package/lib/ocaml/hashtblLabels.cmi +0 -0
  332. package/lib/ocaml/hashtblLabels.cmt +0 -0
  333. package/lib/ocaml/hashtblLabels.ml +0 -130
  334. package/lib/ocaml/int32.cmi +0 -0
  335. package/lib/ocaml/int32.cmt +0 -0
  336. package/lib/ocaml/int32.cmti +0 -0
  337. package/lib/ocaml/int32.ml +0 -64
  338. package/lib/ocaml/int32.mli +0 -186
  339. package/lib/ocaml/int64.cmi +0 -0
  340. package/lib/ocaml/int64.cmt +0 -0
  341. package/lib/ocaml/int64.cmti +0 -0
  342. package/lib/ocaml/int64.ml +0 -72
  343. package/lib/ocaml/int64.mli +0 -197
  344. package/lib/ocaml/internal_map.cppo.ml +0 -230
  345. package/lib/ocaml/internal_set.cppo.ml +0 -134
  346. package/lib/ocaml/js.cmi +0 -0
  347. package/lib/ocaml/js.cmt +0 -0
  348. package/lib/ocaml/js.ml +0 -313
  349. package/lib/ocaml/js_OO.cmi +0 -0
  350. package/lib/ocaml/js_OO.cmt +0 -0
  351. package/lib/ocaml/js_OO.ml +0 -180
  352. package/lib/ocaml/js_array.cmi +0 -0
  353. package/lib/ocaml/js_array.cmt +0 -0
  354. package/lib/ocaml/js_array.ml +0 -970
  355. package/lib/ocaml/js_array2.cmi +0 -0
  356. package/lib/ocaml/js_array2.cmt +0 -0
  357. package/lib/ocaml/js_array2.ml +0 -1065
  358. package/lib/ocaml/js_bigint.cmi +0 -0
  359. package/lib/ocaml/js_bigint.cmt +0 -0
  360. package/lib/ocaml/js_bigint.ml +0 -3
  361. package/lib/ocaml/js_cast.cmi +0 -0
  362. package/lib/ocaml/js_cast.cmt +0 -0
  363. package/lib/ocaml/js_cast.cmti +0 -0
  364. package/lib/ocaml/js_cast.ml +0 -29
  365. package/lib/ocaml/js_cast.mli +0 -45
  366. package/lib/ocaml/js_console.cmi +0 -0
  367. package/lib/ocaml/js_console.cmt +0 -0
  368. package/lib/ocaml/js_console.ml +0 -51
  369. package/lib/ocaml/js_date.cmi +0 -0
  370. package/lib/ocaml/js_date.cmt +0 -0
  371. package/lib/ocaml/js_date.ml +0 -1263
  372. package/lib/ocaml/js_dict.cmi +0 -0
  373. package/lib/ocaml/js_dict.cmt +0 -0
  374. package/lib/ocaml/js_dict.cmti +0 -0
  375. package/lib/ocaml/js_dict.ml +0 -114
  376. package/lib/ocaml/js_dict.mli +0 -152
  377. package/lib/ocaml/js_exn.cmi +0 -0
  378. package/lib/ocaml/js_exn.cmt +0 -0
  379. package/lib/ocaml/js_exn.cmti +0 -0
  380. package/lib/ocaml/js_exn.ml +0 -102
  381. package/lib/ocaml/js_exn.mli +0 -79
  382. package/lib/ocaml/js_float.cmi +0 -0
  383. package/lib/ocaml/js_float.cmt +0 -0
  384. package/lib/ocaml/js_float.ml +0 -294
  385. package/lib/ocaml/js_global.cmi +0 -0
  386. package/lib/ocaml/js_global.cmt +0 -0
  387. package/lib/ocaml/js_global.ml +0 -185
  388. package/lib/ocaml/js_int.cmi +0 -0
  389. package/lib/ocaml/js_int.cmt +0 -0
  390. package/lib/ocaml/js_int.ml +0 -158
  391. package/lib/ocaml/js_json.cmi +0 -0
  392. package/lib/ocaml/js_json.cmt +0 -0
  393. package/lib/ocaml/js_json.cmti +0 -0
  394. package/lib/ocaml/js_json.ml +0 -195
  395. package/lib/ocaml/js_json.mli +0 -244
  396. package/lib/ocaml/js_list.cmi +0 -0
  397. package/lib/ocaml/js_list.cmt +0 -0
  398. package/lib/ocaml/js_list.cmti +0 -0
  399. package/lib/ocaml/js_list.ml +0 -174
  400. package/lib/ocaml/js_list.mli +0 -72
  401. package/lib/ocaml/js_map.cmi +0 -0
  402. package/lib/ocaml/js_map.cmt +0 -0
  403. package/lib/ocaml/js_map.ml +0 -3
  404. package/lib/ocaml/js_mapperRt.cmi +0 -0
  405. package/lib/ocaml/js_mapperRt.cmt +0 -0
  406. package/lib/ocaml/js_mapperRt.cmti +0 -0
  407. package/lib/ocaml/js_mapperRt.ml +0 -50
  408. package/lib/ocaml/js_mapperRt.mli +0 -44
  409. package/lib/ocaml/js_math.cmi +0 -0
  410. package/lib/ocaml/js_math.cmt +0 -0
  411. package/lib/ocaml/js_math.ml +0 -626
  412. package/lib/ocaml/js_null.cmi +0 -0
  413. package/lib/ocaml/js_null.cmt +0 -0
  414. package/lib/ocaml/js_null.cmti +0 -0
  415. package/lib/ocaml/js_null.ml +0 -57
  416. package/lib/ocaml/js_null.mli +0 -87
  417. package/lib/ocaml/js_null_undefined.cmi +0 -0
  418. package/lib/ocaml/js_null_undefined.cmt +0 -0
  419. package/lib/ocaml/js_null_undefined.cmti +0 -0
  420. package/lib/ocaml/js_null_undefined.ml +0 -50
  421. package/lib/ocaml/js_null_undefined.mli +0 -85
  422. package/lib/ocaml/js_obj.cmi +0 -0
  423. package/lib/ocaml/js_obj.cmt +0 -0
  424. package/lib/ocaml/js_obj.ml +0 -100
  425. package/lib/ocaml/js_option.cmi +0 -0
  426. package/lib/ocaml/js_option.cmt +0 -0
  427. package/lib/ocaml/js_option.cmti +0 -0
  428. package/lib/ocaml/js_option.ml +0 -203
  429. package/lib/ocaml/js_option.mli +0 -52
  430. package/lib/ocaml/js_promise.cmi +0 -0
  431. package/lib/ocaml/js_promise.cmt +0 -0
  432. package/lib/ocaml/js_promise.ml +0 -100
  433. package/lib/ocaml/js_re.cmi +0 -0
  434. package/lib/ocaml/js_re.cmt +0 -0
  435. package/lib/ocaml/js_re.ml +0 -184
  436. package/lib/ocaml/js_result.cmi +0 -0
  437. package/lib/ocaml/js_result.cmt +0 -0
  438. package/lib/ocaml/js_result.cmti +0 -0
  439. package/lib/ocaml/js_result.ml +0 -28
  440. package/lib/ocaml/js_result.mli +0 -28
  441. package/lib/ocaml/js_set.cmi +0 -0
  442. package/lib/ocaml/js_set.cmt +0 -0
  443. package/lib/ocaml/js_set.ml +0 -3
  444. package/lib/ocaml/js_string.cmi +0 -0
  445. package/lib/ocaml/js_string.cmt +0 -0
  446. package/lib/ocaml/js_string.ml +0 -914
  447. package/lib/ocaml/js_string2.cmi +0 -0
  448. package/lib/ocaml/js_string2.cmt +0 -0
  449. package/lib/ocaml/js_string2.ml +0 -912
  450. package/lib/ocaml/js_typed_array.cmi +0 -0
  451. package/lib/ocaml/js_typed_array.cmt +0 -0
  452. package/lib/ocaml/js_typed_array.cppo.ml +0 -429
  453. package/lib/ocaml/js_typed_array.ml +0 -1405
  454. package/lib/ocaml/js_typed_array2.cmi +0 -0
  455. package/lib/ocaml/js_typed_array2.cmt +0 -0
  456. package/lib/ocaml/js_typed_array2.cppo.ml +0 -296
  457. package/lib/ocaml/js_typed_array2.ml +0 -1269
  458. package/lib/ocaml/js_types.cmi +0 -0
  459. package/lib/ocaml/js_types.cmt +0 -0
  460. package/lib/ocaml/js_types.cmti +0 -0
  461. package/lib/ocaml/js_types.ml +0 -118
  462. package/lib/ocaml/js_types.mli +0 -78
  463. package/lib/ocaml/js_undefined.cmi +0 -0
  464. package/lib/ocaml/js_undefined.cmt +0 -0
  465. package/lib/ocaml/js_undefined.cmti +0 -0
  466. package/lib/ocaml/js_undefined.ml +0 -59
  467. package/lib/ocaml/js_undefined.mli +0 -92
  468. package/lib/ocaml/js_vector.cmi +0 -0
  469. package/lib/ocaml/js_vector.cmt +0 -0
  470. package/lib/ocaml/js_vector.cmti +0 -0
  471. package/lib/ocaml/js_vector.ml +0 -143
  472. package/lib/ocaml/js_vector.mli +0 -92
  473. package/lib/ocaml/js_weakmap.cmi +0 -0
  474. package/lib/ocaml/js_weakmap.cmt +0 -0
  475. package/lib/ocaml/js_weakmap.ml +0 -3
  476. package/lib/ocaml/js_weakset.cmi +0 -0
  477. package/lib/ocaml/js_weakset.cmt +0 -0
  478. package/lib/ocaml/js_weakset.ml +0 -3
  479. package/lib/ocaml/jsx.cmi +0 -0
  480. package/lib/ocaml/jsx.cmt +0 -0
  481. package/lib/ocaml/jsx.ml +0 -39
  482. package/lib/ocaml/jsxDOM.cmi +0 -0
  483. package/lib/ocaml/jsxDOM.cmt +0 -0
  484. package/lib/ocaml/jsxDOM.ml +0 -2087
  485. package/lib/ocaml/jsxDOMStyle.cmi +0 -0
  486. package/lib/ocaml/jsxDOMStyle.cmt +0 -0
  487. package/lib/ocaml/jsxDOMStyle.ml +0 -777
  488. package/lib/ocaml/jsxEvent.cmi +0 -0
  489. package/lib/ocaml/jsxEvent.cmt +0 -0
  490. package/lib/ocaml/jsxEvent.ml +0 -358
  491. package/lib/ocaml/lazy.cmi +0 -0
  492. package/lib/ocaml/lazy.cmt +0 -0
  493. package/lib/ocaml/lazy.cmti +0 -0
  494. package/lib/ocaml/lazy.ml +0 -70
  495. package/lib/ocaml/lazy.mli +0 -95
  496. package/lib/ocaml/lexing.cmi +0 -0
  497. package/lib/ocaml/lexing.cmt +0 -0
  498. package/lib/ocaml/lexing.cmti +0 -0
  499. package/lib/ocaml/lexing.ml +0 -230
  500. package/lib/ocaml/lexing.mli +0 -172
  501. package/lib/ocaml/list.cmi +0 -0
  502. package/lib/ocaml/list.cmt +0 -0
  503. package/lib/ocaml/list.cmti +0 -0
  504. package/lib/ocaml/list.ml +0 -485
  505. package/lib/ocaml/list.mli +0 -347
  506. package/lib/ocaml/listLabels.cmi +0 -0
  507. package/lib/ocaml/listLabels.cmt +0 -0
  508. package/lib/ocaml/listLabels.cmti +0 -0
  509. package/lib/ocaml/listLabels.ml +0 -485
  510. package/lib/ocaml/listLabels.mli +0 -353
  511. package/lib/ocaml/map.cmi +0 -0
  512. package/lib/ocaml/map.cmt +0 -0
  513. package/lib/ocaml/map.cmti +0 -0
  514. package/lib/ocaml/map.cppo.ml +0 -174
  515. package/lib/ocaml/map.cppo.mli +0 -191
  516. package/lib/ocaml/map.ml +0 -480
  517. package/lib/ocaml/map.mli +0 -315
  518. package/lib/ocaml/mapLabels.cmi +0 -0
  519. package/lib/ocaml/mapLabels.cmt +0 -0
  520. package/lib/ocaml/mapLabels.ml +0 -480
  521. package/lib/ocaml/mapm.cppo.ml +0 -177
  522. package/lib/ocaml/mapm.cppo.mli +0 -138
  523. package/lib/ocaml/moreLabels.cmi +0 -0
  524. package/lib/ocaml/moreLabels.cmt +0 -0
  525. package/lib/ocaml/moreLabels.cmti +0 -0
  526. package/lib/ocaml/moreLabels.ml +0 -22
  527. package/lib/ocaml/moreLabels.mli +0 -198
  528. package/lib/ocaml/node.cmi +0 -0
  529. package/lib/ocaml/node.cmt +0 -0
  530. package/lib/ocaml/node.ml +0 -84
  531. package/lib/ocaml/node_buffer.cmi +0 -0
  532. package/lib/ocaml/node_buffer.cmt +0 -0
  533. package/lib/ocaml/node_buffer.ml +0 -47
  534. package/lib/ocaml/node_child_process.cmi +0 -0
  535. package/lib/ocaml/node_child_process.cmt +0 -0
  536. package/lib/ocaml/node_child_process.ml +0 -50
  537. package/lib/ocaml/node_fs.cmi +0 -0
  538. package/lib/ocaml/node_fs.cmt +0 -0
  539. package/lib/ocaml/node_fs.ml +0 -153
  540. package/lib/ocaml/node_module.cmi +0 -0
  541. package/lib/ocaml/node_module.cmt +0 -0
  542. package/lib/ocaml/node_module.ml +0 -29
  543. package/lib/ocaml/node_path.cmi +0 -0
  544. package/lib/ocaml/node_path.cmt +0 -0
  545. package/lib/ocaml/node_path.ml +0 -71
  546. package/lib/ocaml/node_process.cmi +0 -0
  547. package/lib/ocaml/node_process.cmt +0 -0
  548. package/lib/ocaml/node_process.cmti +0 -0
  549. package/lib/ocaml/node_process.ml +0 -59
  550. package/lib/ocaml/node_process.mli +0 -48
  551. package/lib/ocaml/obj.cmi +0 -0
  552. package/lib/ocaml/obj.cmt +0 -0
  553. package/lib/ocaml/obj.cmti +0 -0
  554. package/lib/ocaml/obj.ml +0 -29
  555. package/lib/ocaml/obj.mli +0 -62
  556. package/lib/ocaml/parsing.cmi +0 -0
  557. package/lib/ocaml/parsing.cmt +0 -0
  558. package/lib/ocaml/parsing.cmti +0 -0
  559. package/lib/ocaml/parsing.ml +0 -212
  560. package/lib/ocaml/parsing.mli +0 -105
  561. package/lib/ocaml/pervasives.cmi +0 -0
  562. package/lib/ocaml/pervasives.cmt +0 -0
  563. package/lib/ocaml/pervasives.cmti +0 -0
  564. package/lib/ocaml/pervasives.ml +0 -297
  565. package/lib/ocaml/pervasives.mli +0 -771
  566. package/lib/ocaml/printexc.cmi +0 -0
  567. package/lib/ocaml/printexc.cmt +0 -0
  568. package/lib/ocaml/printexc.cmti +0 -0
  569. package/lib/ocaml/printexc.ml +0 -79
  570. package/lib/ocaml/printexc.mli +0 -57
  571. package/lib/ocaml/queue.cmi +0 -0
  572. package/lib/ocaml/queue.cmt +0 -0
  573. package/lib/ocaml/queue.cmti +0 -0
  574. package/lib/ocaml/queue.ml +0 -132
  575. package/lib/ocaml/queue.mli +0 -82
  576. package/lib/ocaml/random.cmi +0 -0
  577. package/lib/ocaml/random.cmt +0 -0
  578. package/lib/ocaml/random.cmti +0 -0
  579. package/lib/ocaml/random.ml +0 -273
  580. package/lib/ocaml/random.mli +0 -102
  581. package/lib/ocaml/set.cmi +0 -0
  582. package/lib/ocaml/set.cmt +0 -0
  583. package/lib/ocaml/set.cmti +0 -0
  584. package/lib/ocaml/set.ml +0 -526
  585. package/lib/ocaml/set.mli +0 -266
  586. package/lib/ocaml/setLabels.cmi +0 -0
  587. package/lib/ocaml/setLabels.cmt +0 -0
  588. package/lib/ocaml/setLabels.ml +0 -526
  589. package/lib/ocaml/setm.cppo.ml +0 -346
  590. package/lib/ocaml/setm.cppo.mli +0 -126
  591. package/lib/ocaml/sort.cmi +0 -0
  592. package/lib/ocaml/sort.cmt +0 -0
  593. package/lib/ocaml/sort.cmti +0 -0
  594. package/lib/ocaml/sort.cppo.ml +0 -267
  595. package/lib/ocaml/sort.cppo.mli +0 -96
  596. package/lib/ocaml/sort.ml +0 -99
  597. package/lib/ocaml/sort.mli +0 -44
  598. package/lib/ocaml/stack.cmi +0 -0
  599. package/lib/ocaml/stack.cmt +0 -0
  600. package/lib/ocaml/stack.cmti +0 -0
  601. package/lib/ocaml/stack.ml +0 -44
  602. package/lib/ocaml/stack.mli +0 -63
  603. package/lib/ocaml/stdLabels.cmi +0 -0
  604. package/lib/ocaml/stdLabels.cmt +0 -0
  605. package/lib/ocaml/stdLabels.cmti +0 -0
  606. package/lib/ocaml/stdLabels.ml +0 -24
  607. package/lib/ocaml/stdLabels.mli +0 -29
  608. package/lib/ocaml/stream.cmi +0 -0
  609. package/lib/ocaml/stream.cmt +0 -0
  610. package/lib/ocaml/stream.cmti +0 -0
  611. package/lib/ocaml/stream.ml +0 -213
  612. package/lib/ocaml/stream.mli +0 -108
  613. package/lib/ocaml/string.cmi +0 -0
  614. package/lib/ocaml/string.cmt +0 -0
  615. package/lib/ocaml/string.cmti +0 -0
  616. package/lib/ocaml/string.ml +0 -190
  617. package/lib/ocaml/string.mli +0 -286
  618. package/lib/ocaml/stringLabels.cmi +0 -0
  619. package/lib/ocaml/stringLabels.cmt +0 -0
  620. package/lib/ocaml/stringLabels.cmti +0 -0
  621. package/lib/ocaml/stringLabels.ml +0 -190
  622. package/lib/ocaml/stringLabels.mli +0 -241
  623. package/lib/ocaml/sys.cmi +0 -0
  624. package/lib/ocaml/sys.cmt +0 -0
  625. package/lib/ocaml/sys.cmti +0 -0
  626. package/lib/ocaml/sys.ml +0 -135
  627. package/lib/ocaml/sys.mli +0 -333
  628. package/lib/ocaml/uchar.cmi +0 -0
  629. package/lib/ocaml/uchar.cmt +0 -0
  630. package/lib/ocaml/uchar.cmti +0 -0
  631. package/lib/ocaml/uchar.ml +0 -58
  632. package/lib/ocaml/uchar.mli +0 -98
  633. package/linux/bsb_helper.exe +0 -0
  634. package/linux/bsc.exe +0 -0
  635. package/linux/ninja.COPYING +0 -202
  636. package/linux/ninja.exe +0 -0
  637. package/linux/rescript.exe +0 -0
  638. package/openbsd/.keep +0 -0
  639. package/scripts/LICENSE.ml +0 -27
  640. package/scripts/buckle_lto.js +0 -55
  641. package/scripts/build_sorted.ml +0 -233
  642. package/scripts/caml_oo_curry_gen.ml +0 -71
  643. package/scripts/checkUnused.js +0 -63
  644. package/scripts/ciTest.js +0 -172
  645. package/scripts/cover.sh +0 -3
  646. package/scripts/curry_gen.ml +0 -167
  647. package/scripts/dbg +0 -13
  648. package/scripts/dedupe.js +0 -44
  649. package/scripts/doc_gen.js +0 -117
  650. package/scripts/js_internal_gen.js +0 -135
  651. package/scripts/jsconfig.json +0 -12
  652. package/scripts/littlecase.js +0 -21
  653. package/scripts/ninja.js +0 -1980
  654. package/scripts/pack.js +0 -107
  655. package/scripts/prebuilt.js +0 -99
  656. package/scripts/release.js +0 -41
  657. package/scripts/repl.js +0 -151
  658. package/scripts/shake.js +0 -138
  659. package/scripts/tasks.js +0 -149
  660. package/scripts/test.sh +0 -3
  661. package/scripts/tmp.js +0 -98
  662. package/scripts/validate.js +0 -41
  663. package/vendor/ninja.tar.gz +0 -0
  664. package/win32/bsb_helper.exe +0 -0
  665. package/win32/bsc.exe +0 -0
  666. package/win32/ninja.COPYING +0 -202
  667. package/win32/ninja.exe +0 -0
  668. package/win32/rescript.exe +0 -0
package/scripts/ninja.js DELETED
@@ -1,1980 +0,0 @@
1
- #!/usr/bin/env node
2
- //@ts-check
3
-
4
- var fs = require("fs");
5
- var path = require("path");
6
- var cp = require("child_process");
7
- var semver = require("semver");
8
-
9
- var jscompDir = path.join(__dirname, "..", "jscomp");
10
- var runtimeDir = path.join(jscompDir, "runtime");
11
- var othersDir = path.join(jscompDir, "others");
12
- var testDir = path.join(jscompDir, "test");
13
-
14
- var jsDir = path.join(__dirname, "..", "lib", "js");
15
-
16
- var runtimeFiles = fs.readdirSync(runtimeDir, "ascii");
17
- var runtimeMlFiles = runtimeFiles.filter(
18
- x => !x.startsWith("bs_stdlib_mini") && x.endsWith(".ml") && x !== "js.ml"
19
- );
20
- var runtimeMliFiles = runtimeFiles.filter(
21
- x => !x.startsWith("bs_stdlib_mini") && x.endsWith(".mli") && x !== "js.mli"
22
- );
23
- var runtimeSourceFiles = runtimeMlFiles.concat(runtimeMliFiles);
24
- var runtimeJsFiles = [...new Set(runtimeSourceFiles.map(baseName))];
25
-
26
- var commonBsFlags = `-no-keep-locs -no-alias-deps -bs-no-version-header -bs-no-check-div-by-zero -nostdlib `;
27
- var js_package = pseudoTarget("js_pkg");
28
- var runtimeTarget = pseudoTarget("runtime");
29
- var othersTarget = pseudoTarget("others");
30
- var stdlibTarget = pseudoTarget("$stdlib");
31
- var my_target = require("./bin_path").absolutePath;
32
- var bsc_exe = require("./bin_path").bsc_exe;
33
-
34
- var vendorNinjaPath = require("./bin_path").ninja_exe;
35
-
36
- // Let's enforce a Node version >= 16 to make sure M1 users don't trip up on
37
- // cryptic issues caused by mismatching assembly architectures Node 16 ships
38
- // with a native arm64 binary, and will set process.arch to "arm64" (instead of
39
- // Rosetta emulated "x86")
40
- if (semver.lt(process.version, "16.0.0")) {
41
- console.error("Requires node version 16 or above... Abort.");
42
- process.exit(1);
43
- }
44
-
45
- exports.vendorNinjaPath = vendorNinjaPath;
46
- /**
47
- * By default we use vendored,
48
- * we produce two ninja files which won't overlap
49
- * one is build.ninja which use vendored config
50
- * the other is env.ninja which use binaries from environment
51
- *
52
- * In dev mode, files generated for vendor config
53
- *
54
- * build.ninja
55
- * compiler.ninja
56
- * snapshot.ninja
57
- * runtime/build.ninja
58
- * others/build.ninja
59
- * $stdlib/build.ninja
60
- * test/build.ninja
61
- *
62
- * files generated for env config
63
- *
64
- * env.ninja
65
- * compilerEnv.ninja (no snapshot since env can not provide snapshot)
66
- * runtime/env.ninja
67
- * others/env.ninja
68
- * $stdlib/env.ninja
69
- * test/env.ninja
70
- *
71
- * In release mode:
72
- *
73
- * release.ninja
74
- * runtime/release.ninja
75
- * others/release.ninja
76
- * $stdlib/release.ninja
77
- *
78
- * Like that our snapshot is so robust that
79
- * we don't do snapshot in CI, we don't
80
- * need do test build in CI either
81
- *
82
- */
83
-
84
- /**
85
- * @type {string}
86
- */
87
- var versionString = undefined;
88
-
89
- /**
90
- *
91
- * @returns {string}
92
- */
93
- var getVersionString = () => {
94
- if (versionString === undefined) {
95
- var searcher = "version";
96
- try {
97
- var output = cp.execSync(`ocamldep.opt -version`, {
98
- encoding: "ascii",
99
- });
100
- versionString = output
101
- .substring(output.indexOf(searcher) + searcher.length)
102
- .trim();
103
- } catch (err) {
104
- //
105
- console.error(`This error probably came from that you don't have our vendored ocaml installed
106
- If this is the first time you clone the repo
107
- try this
108
- git submodule init && git submodule update
109
- node ./scripts/buildocaml.js
110
- `);
111
- console.error(err.message);
112
- process.exit(err.status);
113
- }
114
- }
115
- return versionString;
116
- };
117
-
118
- /**
119
- *
120
- * @param {string} ninjaCwd
121
- */
122
- function ruleCC(ninjaCwd) {
123
- return `
124
- rule cc
125
- command = $bsc -bs-cmi -bs-cmj $bsc_flags -I ${ninjaCwd} $in
126
- description = $in -> $out
127
- rule cc_cmi
128
- command = $bsc -bs-read-cmi -bs-cmi -bs-cmj $bsc_flags -I ${ninjaCwd} $in
129
- description = $in -> $out
130
- `;
131
- }
132
- /**
133
- * Fixed since it is already vendored
134
- */
135
- var cppoMonoFile = `../vendor/cppo/cppo_bin.ml`;
136
- /**
137
- *
138
- * @param {string} name
139
- * @param {string} content
140
- */
141
- function writeFileAscii(name, content) {
142
- fs.writeFile(name, content, "ascii", throwIfError);
143
- }
144
-
145
- /**
146
- *
147
- * @param {string} name
148
- * @param {string} content
149
- */
150
- function writeFileSync(name, content) {
151
- return fs.writeFileSync(name, content, "ascii");
152
- }
153
- /**
154
- *
155
- * @param {NodeJS.ErrnoException} err
156
- */
157
- function throwIfError(err) {
158
- if (err !== null) {
159
- throw err;
160
- }
161
- }
162
- /**
163
- *
164
- * @typedef { {kind : "file" , name : string} | {kind : "pseudo" , name : string}} Target
165
- * @typedef {{key : string, value : string}} Override
166
- * @typedef { Target[]} Targets
167
- * @typedef {Map<string,TargetSet>} DepsMap
168
- */
169
-
170
- class TargetSet {
171
- /**
172
- *
173
- * @param {Targets} xs
174
- */
175
- constructor(xs = []) {
176
- this.data = xs;
177
- }
178
- /**
179
- *
180
- * @param {Target} x
181
- */
182
- add(x) {
183
- var data = this.data;
184
- var found = false;
185
- for (var i = 0; i < data.length; ++i) {
186
- var cur = data[i];
187
- if (cur.kind === x.kind && cur.name === x.name) {
188
- found = true;
189
- break;
190
- }
191
- }
192
- if (!found) {
193
- this.data.push(x);
194
- }
195
- return this;
196
- }
197
- /**
198
- * @returns {Targets} a copy
199
- *
200
- */
201
- toSortedArray() {
202
- var newData = this.data.concat();
203
- newData.sort((x, y) => {
204
- var kindx = x.kind;
205
- var kindy = y.kind;
206
- if (kindx > kindy) {
207
- return 1;
208
- } else if (kindx < kindy) {
209
- return -1;
210
- } else {
211
- if (x.name > y.name) {
212
- return 1;
213
- } else if (x.name < y.name) {
214
- return -1;
215
- } else {
216
- return 0;
217
- }
218
- }
219
- });
220
- return newData;
221
- }
222
- /**
223
- *
224
- * @param {(item:Target)=>void} callback
225
- */
226
- forEach(callback) {
227
- this.data.forEach(callback);
228
- }
229
- }
230
-
231
- /**
232
- *
233
- * @param {string} target
234
- * @param {string} dependency
235
- * @param {DepsMap} depsMap
236
- */
237
- function updateDepsKVByFile(target, dependency, depsMap) {
238
- var singleTon = fileTarget(dependency);
239
- if (depsMap.has(target)) {
240
- depsMap.get(target).add(singleTon);
241
- } else {
242
- depsMap.set(target, new TargetSet([singleTon]));
243
- }
244
- }
245
-
246
- /**
247
- *
248
- * @param {string} s
249
- */
250
- function uncapitalize(s) {
251
- if (s.length === 0) {
252
- return s;
253
- }
254
- return s[0].toLowerCase() + s.slice(1);
255
- }
256
- /**
257
- *
258
- * @param {string} target
259
- * @param {string[]} dependencies
260
- * @param {DepsMap} depsMap
261
- */
262
- function updateDepsKVsByFile(target, dependencies, depsMap) {
263
- var targets = fileTargets(dependencies);
264
- if (depsMap.has(target)) {
265
- var s = depsMap.get(target);
266
- for (var i = 0; i < targets.length; ++i) {
267
- s.add(targets[i]);
268
- }
269
- } else {
270
- depsMap.set(target, new TargetSet(targets));
271
- }
272
- }
273
-
274
- /**
275
- *
276
- * @param {string} target
277
- * @param {string[]} modules
278
- * @param {DepsMap} depsMap
279
- */
280
- function updateDepsKVsByModule(target, modules, depsMap) {
281
- if (depsMap.has(target)) {
282
- let s = depsMap.get(target);
283
- for (let module of modules) {
284
- let filename = uncapitalize(module);
285
- let filenameAsCmi = filename + ".cmi";
286
- let filenameAsCmj = filename + ".cmj";
287
- if (target.endsWith(".cmi")) {
288
- if (depsMap.has(filenameAsCmi) || depsMap.has(filenameAsCmj)) {
289
- s.add(fileTarget(filenameAsCmi));
290
- }
291
- } else if (target.endsWith(".cmj")) {
292
- if (depsMap.has(filenameAsCmj)) {
293
- s.add(fileTarget(filenameAsCmj));
294
- } else if (depsMap.has(filenameAsCmi)) {
295
- s.add(fileTarget(filenameAsCmi));
296
- }
297
- }
298
- }
299
- }
300
- }
301
- /**
302
- *
303
- * @param {string[]}sources
304
- * @return {DepsMap}
305
- */
306
- function createDepsMapWithTargets(sources) {
307
- /**
308
- * @type {DepsMap}
309
- */
310
- let depsMap = new Map();
311
- for (let source of sources) {
312
- let target = sourceToTarget(source);
313
- depsMap.set(target, new TargetSet([]));
314
- }
315
- depsMap.forEach((set, name) => {
316
- let cmiFile;
317
- if (
318
- name.endsWith(".cmj") &&
319
- depsMap.has((cmiFile = replaceExt(name, ".cmi")))
320
- ) {
321
- set.add(fileTarget(cmiFile));
322
- }
323
- });
324
- return depsMap;
325
- }
326
-
327
- /**
328
- *
329
- * @param {Target} file
330
- * @param {string} cwd
331
- */
332
- function targetToString(file, cwd) {
333
- switch (file.kind) {
334
- case "file":
335
- return path.join(cwd, file.name);
336
- case "pseudo":
337
- return file.name;
338
- default:
339
- throw Error;
340
- }
341
- }
342
- /**
343
- *
344
- * @param {Targets} files
345
- * @param {string} cwd
346
- *
347
- * @returns {string} return a string separated with whitespace
348
- */
349
- function targetsToString(files, cwd) {
350
- return files.map(x => targetToString(x, cwd)).join(" ");
351
- }
352
- /**
353
- *
354
- * @param {Targets} outputs
355
- * @param {Targets} inputs
356
- * @param {Targets} deps
357
- * @param {Override[]} overrides
358
- * @param {string} rule
359
- * @param {string} cwd
360
- * @return {string}
361
- */
362
- function ninjaBuild(outputs, inputs, rule, deps, cwd, overrides) {
363
- var fileOutputs = targetsToString(outputs, cwd);
364
- var fileInputs = targetsToString(inputs, cwd);
365
- var stmt = `o ${fileOutputs} : ${rule} ${fileInputs}`;
366
- // deps.push(pseudoTarget('../lib/bsc'))
367
- if (deps.length > 0) {
368
- var fileDeps = targetsToString(deps, cwd);
369
- stmt += ` | ${fileDeps}`;
370
- }
371
- if (overrides.length > 0) {
372
- stmt +=
373
- `\n` +
374
- overrides
375
- .map(x => {
376
- return ` ${x.key} = ${x.value}`;
377
- })
378
- .join("\n");
379
- }
380
- return stmt;
381
- }
382
-
383
- /**
384
- *
385
- * @param {Target} outputs
386
- * @param {Targets} inputs
387
- * @param {string} cwd
388
- */
389
- function phony(outputs, inputs, cwd) {
390
- return ninjaBuild([outputs], inputs, "phony", [], cwd, []);
391
- }
392
-
393
- /**
394
- *
395
- * @param {string | string[]} outputs
396
- * @param {string | string[]} inputs
397
- * @param {string | string[]} fileDeps
398
- * @param {string} rule
399
- * @param {string} cwd
400
- * @param {[string,string][]} overrides
401
- * @param {Target | Targets} extraDeps
402
- */
403
- function ninjaQuickBuild(
404
- outputs,
405
- inputs,
406
- rule,
407
- cwd,
408
- overrides,
409
- fileDeps,
410
- extraDeps
411
- ) {
412
- var os = Array.isArray(outputs)
413
- ? fileTargets(outputs)
414
- : [fileTarget(outputs)];
415
- var is = Array.isArray(inputs) ? fileTargets(inputs) : [fileTarget(inputs)];
416
- var ds = Array.isArray(fileDeps)
417
- ? fileTargets(fileDeps)
418
- : [fileTarget(fileDeps)];
419
- var dds = Array.isArray(extraDeps) ? extraDeps : [extraDeps];
420
-
421
- return ninjaBuild(
422
- os,
423
- is,
424
- rule,
425
- ds.concat(dds),
426
- cwd,
427
- overrides.map(x => {
428
- return { key: x[0], value: x[1] };
429
- })
430
- );
431
- }
432
-
433
- /**
434
- * @typedef { (string | string []) } Strings
435
- * @typedef { [string,string]} KV
436
- * @typedef { [Strings, Strings, string, string, KV[], Strings, (Target|Targets)] } BuildList
437
- * @param {BuildList[]} xs
438
- * @returns {string}
439
- */
440
- function ninjaQuickBuidList(xs) {
441
- return xs
442
- .map(x => ninjaQuickBuild(x[0], x[1], x[2], x[3], x[4], x[5], x[6]))
443
- .join("\n");
444
- }
445
-
446
- /**
447
- * @typedef { [string,string,string?]} CppoInput
448
- * @param {CppoInput[]} xs
449
- * @param {string} cwd
450
- * @returns {string}
451
- */
452
- function cppoList(cwd, xs) {
453
- return xs
454
- .map(x => {
455
- /**
456
- * @type {KV[]}
457
- */
458
- var variables;
459
- if (x[2]) {
460
- variables = [["type", `-D ${x[2]}`]];
461
- } else {
462
- variables = [];
463
- }
464
- var extraDeps = pseudoTarget(cppoFile);
465
- return ninjaQuickBuild(
466
- x[0],
467
- x[1],
468
- cppoRuleName,
469
- cwd,
470
- variables,
471
- [],
472
- extraDeps
473
- );
474
- })
475
- .join("\n");
476
- }
477
- /**
478
- *
479
- * @param {string} cwd
480
- * @param {string[]} xs
481
- * @returns {string}
482
- */
483
- function mllList(cwd, xs) {
484
- return xs
485
- .map(x => {
486
- var output = baseName(x) + ".ml";
487
- return ninjaQuickBuild(output, x, mllRuleName, cwd, [], [], []);
488
- })
489
- .join("\n");
490
- }
491
-
492
- /**
493
- *
494
- * @param {string} cwd
495
- * @param {string[]} xs
496
- * @returns {string}
497
- */
498
- function mlyList(cwd, xs) {
499
- return xs
500
- .map(x => {
501
- var output = baseName(x) + ".ml";
502
- return ninjaQuickBuild(output, x, mlyRuleName, cwd, [], [], []);
503
- })
504
- .join("\n");
505
- }
506
- /**
507
- *
508
- * @param {string} name
509
- * @returns {Target}
510
- */
511
- function fileTarget(name) {
512
- return { kind: "file", name };
513
- }
514
-
515
- /**
516
- *
517
- * @param {string} name
518
- * @returns {Target}
519
- */
520
- function pseudoTarget(name) {
521
- return { kind: "pseudo", name };
522
- }
523
-
524
- /**
525
- *
526
- * @param {string[]} args
527
- * @returns {Targets}
528
- */
529
- function fileTargets(args) {
530
- return args.map(name => fileTarget(name));
531
- }
532
-
533
- /**
534
- *
535
- * @param {string[]} outputs
536
- * @param {string[]} inputs
537
- * @param {DepsMap} depsMap
538
- * @param {Override[]} overrides
539
- * @param {Targets} extraDeps
540
- * @param {string} rule
541
- * @param {string} cwd
542
- */
543
- function buildStmt(outputs, inputs, rule, depsMap, cwd, overrides, extraDeps) {
544
- var os = outputs.map(fileTarget);
545
- var is = inputs.map(fileTarget);
546
- var deps = new TargetSet();
547
- for (var i = 0; i < outputs.length; ++i) {
548
- var curDeps = depsMap.get(outputs[i]);
549
- if (curDeps !== undefined) {
550
- curDeps.forEach(x => deps.add(x));
551
- }
552
- }
553
- extraDeps.forEach(x => deps.add(x));
554
- return ninjaBuild(os, is, rule, deps.toSortedArray(), cwd, overrides);
555
- }
556
-
557
- /**
558
- *
559
- * @param {string} x
560
- */
561
- function replaceCmj(x) {
562
- return x.trim().replace("cmx", "cmj");
563
- }
564
-
565
- /**
566
- *
567
- * @param {string} y
568
- */
569
- function sourceToTarget(y) {
570
- if (y.endsWith(".ml") || y.endsWith(".re") || y.endsWith(".res")) {
571
- return replaceExt(y, ".cmj");
572
- } else if (y.endsWith(".mli") || y.endsWith(".rei") || y.endsWith(".resi")) {
573
- return replaceExt(y, ".cmi");
574
- }
575
- return y;
576
- }
577
- /**
578
- *
579
- * @param {string[]} files
580
- * @param {string} dir
581
- * @param {DepsMap} depsMap
582
- * @return {Promise<void>}
583
- * Note `bsdep.exe` does not need post processing and -one-line flag
584
- * By default `ocamldep.opt` only list dependencies in its args
585
- */
586
- function ocamlDepForBscAsync(files, dir, depsMap) {
587
- return new Promise((resolve, reject) => {
588
- cp.exec(
589
- `ocamldep.opt -allow-approx -one-line -native ${files.join(" ")}`,
590
- {
591
- cwd: dir,
592
- encoding: "ascii",
593
- },
594
- function (error, stdout, stderr) {
595
- if (error !== null) {
596
- return reject(error);
597
- } else {
598
- var pairs = stdout.split("\n").map(x => x.split(":"));
599
- pairs.forEach(x => {
600
- var deps;
601
- let source = replaceCmj(x[0]);
602
- if (x[1] !== undefined && (deps = x[1].trim())) {
603
- deps = deps.split(" ");
604
- updateDepsKVsByFile(
605
- source,
606
- deps.map(x => replaceCmj(x)),
607
- depsMap
608
- );
609
- }
610
- });
611
- return resolve();
612
- }
613
- }
614
- );
615
- });
616
- }
617
-
618
- /**
619
- *
620
- * @param {string[]} files
621
- * @param {string} dir
622
- * @param {DepsMap} depsMap
623
- * @return { Promise<void> []}
624
- * Note `bsdep.exe` does not need post processing and -one-line flag
625
- * By default `ocamldep.opt` only list dependencies in its args
626
- */
627
- function depModulesForBscAsync(files, dir, depsMap) {
628
- let ocamlFiles = files.filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
629
- let reFiles = files.filter(x => x.endsWith(".re") || x.endsWith(".rei"));
630
- let resFiles = files.filter(x => x.endsWith(".res") || x.endsWith(".resi"));
631
- /**
632
- *
633
- * @param {(value:void) =>void} resolve
634
- * @param {(value:any)=>void} reject
635
- */
636
- let cb = (resolve, reject) => {
637
- /**
638
- * @param {any} error
639
- * @param {string} stdout
640
- * @param {string} stderr
641
- */
642
- let fn = function (error, stdout, stderr) {
643
- if (error !== null) {
644
- return reject(error);
645
- } else {
646
- var pairs = stdout.split("\n").map(x => x.split(":"));
647
- pairs.forEach(x => {
648
- var modules;
649
- let source = sourceToTarget(x[0].trim());
650
- if (x[1] !== undefined && (modules = x[1].trim())) {
651
- modules = modules.split(" ");
652
- updateDepsKVsByModule(source, modules, depsMap);
653
- }
654
- });
655
- return resolve();
656
- }
657
- };
658
- return fn;
659
- };
660
- let config = {
661
- cwd: dir,
662
- encoding: "ascii",
663
- };
664
- return [
665
- new Promise((resolve, reject) => {
666
- cp.exec(
667
- `${bsc_exe} -modules -bs-syntax-only ${resFiles.join(
668
- " "
669
- )} ${reFiles.join(" ")} ${ocamlFiles.join(" ")}`,
670
- config,
671
- cb(resolve, reject)
672
- );
673
- }),
674
- ];
675
- }
676
-
677
- /**
678
- * @typedef {('HAS_ML' | 'HAS_MLI' | 'HAS_BOTH' | 'HAS_RE' | 'HAS_RES' | 'HAS_REI' | 'HAS_RESI' | 'HAS_BOTH_RE' | 'HAS_BOTH_RES')} FileInfo
679
- * @param {string[]} sourceFiles
680
- * @returns {Map<string, FileInfo>}
681
- * We make a set to ensure that `sourceFiles` are not duplicated
682
- */
683
- function collectTarget(sourceFiles) {
684
- /**
685
- * @type {Map<string,FileInfo>}
686
- */
687
- var allTargets = new Map();
688
- sourceFiles.forEach(x => {
689
- var { ext, name } = path.parse(x);
690
- var existExt = allTargets.get(name);
691
- if (existExt === undefined) {
692
- if (ext === ".ml") {
693
- allTargets.set(name, "HAS_ML");
694
- } else if (ext === ".mli") {
695
- allTargets.set(name, "HAS_MLI");
696
- } else if (ext === ".re") {
697
- allTargets.set(name, "HAS_RE");
698
- } else if (ext === ".res") {
699
- allTargets.set(name, "HAS_RES");
700
- } else if (ext === ".rei") {
701
- allTargets.set(name, "HAS_REI");
702
- } else if (ext === ".resi") {
703
- allTargets.set(name, "HAS_RESI");
704
- }
705
- } else {
706
- switch (existExt) {
707
- case "HAS_ML":
708
- if (ext === ".mli") {
709
- allTargets.set(name, "HAS_BOTH");
710
- }
711
- break;
712
- case "HAS_RE":
713
- if (ext === ".rei") {
714
- allTargets.set(name, "HAS_BOTH_RE");
715
- }
716
- break;
717
- case "HAS_RES":
718
- if (ext === ".resi") {
719
- allTargets.set(name, "HAS_BOTH_RES");
720
- }
721
- break;
722
- case "HAS_MLI":
723
- if (ext === ".ml") {
724
- allTargets.set(name, "HAS_BOTH");
725
- }
726
- break;
727
- case "HAS_REI":
728
- if (ext === ".re") {
729
- allTargets.set(name, "HAS_BOTH_RE");
730
- }
731
- break;
732
- case "HAS_RESI":
733
- if (ext === ".res") {
734
- allTargets.set(name, "HAS_BOTH_RES");
735
- }
736
- break;
737
- case "HAS_BOTH_RE":
738
- case "HAS_BOTH":
739
- case "HAS_BOTH_RES":
740
- break;
741
- }
742
- }
743
- });
744
- return allTargets;
745
- }
746
-
747
- /**
748
- *
749
- * @param {Map<string, FileInfo>} allTargets
750
- * @param {string[]} collIn
751
- * @returns {string[]} A new copy which is
752
- *
753
- */
754
- function scanFileTargets(allTargets, collIn) {
755
- var coll = collIn.concat();
756
- allTargets.forEach((ext, mod) => {
757
- switch (ext) {
758
- case "HAS_MLI":
759
- case "HAS_REI":
760
- case "HAS_RESI":
761
- coll.push(`${mod}.cmi`);
762
- break;
763
- case "HAS_BOTH_RES":
764
- case "HAS_BOTH_RE":
765
- case "HAS_BOTH":
766
- coll.push(`${mod}.cmi`, `${mod}.cmj`);
767
- break;
768
- case "HAS_RE":
769
- case "HAS_RES":
770
- case "HAS_ML":
771
- coll.push(`${mod}.cmi`, `${mod}.cmj`);
772
- break;
773
- }
774
- });
775
- return coll;
776
- }
777
-
778
- /**
779
- *
780
- * @param {DepsMap} depsMap
781
- * @param {Map<string,string>} allTargets
782
- * @param {string} cwd
783
- * @param {Targets} extraDeps
784
- * @return {string[]}
785
- */
786
- function generateNinja(depsMap, allTargets, cwd, extraDeps = []) {
787
- /**
788
- * @type {string[]}
789
- */
790
- var build_stmts = [];
791
- allTargets.forEach((x, mod) => {
792
- let ouptput_cmj = mod + ".cmj";
793
- let output_cmi = mod + ".cmi";
794
- let input_ml = mod + ".ml";
795
- let input_mli = mod + ".mli";
796
- let input_re = mod + ".re";
797
- let input_res = mod + ".res";
798
- let input_rei = mod + ".rei";
799
- let input_resi = mod + ".resi";
800
- /**
801
- * @type {Override[]}
802
- */
803
- var overrides = [];
804
- // if (mod.endsWith("Labels")) {
805
- // overrides.push({ key: "bsc_flags", value: "$bsc_flags -nolabels" });
806
- // }
807
-
808
- /**
809
- *
810
- * @param {string[]} outputs
811
- * @param {string[]} inputs
812
- *
813
- */
814
- let mk = (outputs, inputs, rule = "cc") => {
815
- return build_stmts.push(
816
- buildStmt(outputs, inputs, rule, depsMap, cwd, overrides, extraDeps)
817
- );
818
- };
819
- switch (x) {
820
- case "HAS_BOTH":
821
- mk([ouptput_cmj], [input_ml], "cc_cmi");
822
- mk([output_cmi], [input_mli]);
823
- break;
824
- case "HAS_BOTH_RE":
825
- mk([ouptput_cmj], [input_re], "cc_cmi");
826
- mk([output_cmi], [input_rei], "cc");
827
- break;
828
- case "HAS_BOTH_RES":
829
- mk([ouptput_cmj], [input_res], "cc_cmi");
830
- mk([output_cmi], [input_resi], "cc");
831
- break;
832
- case "HAS_RE":
833
- mk([output_cmi, ouptput_cmj], [input_re], "cc");
834
- break;
835
- case "HAS_RES":
836
- mk([output_cmi, ouptput_cmj], [input_res], "cc");
837
- break;
838
- case "HAS_ML":
839
- mk([output_cmi, ouptput_cmj], [input_ml]);
840
- break;
841
- case "HAS_REI":
842
- mk([output_cmi], [input_rei], "cc");
843
- break;
844
- case "HAS_RESI":
845
- mk([output_cmi], [input_resi], "cc");
846
- break;
847
- case "HAS_MLI":
848
- mk([output_cmi], [input_mli]);
849
- break;
850
- }
851
- });
852
- return build_stmts;
853
- }
854
-
855
- var COMPILIER = bsc_exe;
856
- var BSC_COMPILER = `bsc = ${COMPILIER}`;
857
-
858
- async function runtimeNinja(devmode = true) {
859
- var ninjaCwd = "runtime";
860
- var compilerTarget = pseudoTarget("$bsc");
861
- var externalDeps = devmode ? [compilerTarget] : [];
862
- var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
863
- var templateRuntimeRules = `
864
- bsc_no_open_flags = ${commonBsFlags} -bs-cross-module-opt -make-runtime -nopervasives -unsafe -w +50 -warn-error A
865
- bsc_flags = $bsc_no_open_flags -open Bs_stdlib_mini
866
- ${ruleCC(ninjaCwd)}
867
- ${ninjaQuickBuidList([
868
- [
869
- "bs_stdlib_mini.cmi",
870
- "bs_stdlib_mini.mli",
871
- "cc",
872
- ninjaCwd,
873
- [["bsc_flags", "-nostdlib -nopervasives"]],
874
- [],
875
- externalDeps,
876
- ],
877
- [
878
- ["js.cmj", "js.cmi"],
879
- "js.ml",
880
- "cc",
881
- ninjaCwd,
882
- [["bsc_flags", "$bsc_no_open_flags"]],
883
- [],
884
- externalDeps,
885
- ],
886
- ])}
887
- `;
888
- /**
889
- * @type {DepsMap}
890
- */
891
- var depsMap = new Map();
892
- var allTargets = collectTarget([...runtimeMliFiles, ...runtimeMlFiles]);
893
- var manualDeps = ["bs_stdlib_mini.cmi", "js.cmj", "js.cmi"];
894
- var allFileTargetsInRuntime = scanFileTargets(allTargets, manualDeps);
895
- allTargets.forEach((ext, mod) => {
896
- switch (ext) {
897
- case "HAS_MLI":
898
- case "HAS_BOTH":
899
- updateDepsKVsByFile(mod + ".cmi", manualDeps, depsMap);
900
- break;
901
- case "HAS_ML":
902
- updateDepsKVsByFile(mod + ".cmj", manualDeps, depsMap);
903
- break;
904
- }
905
- });
906
- // FIXME: in dev mode, it should not rely on reading js file
907
- // since it may cause a bootstrapping issues
908
- try {
909
- await Promise.all([
910
- runJSCheckAsync(depsMap),
911
- ocamlDepForBscAsync(runtimeSourceFiles, runtimeDir, depsMap),
912
- ]);
913
- var stmts = generateNinja(depsMap, allTargets, ninjaCwd, externalDeps);
914
- stmts.push(
915
- phony(runtimeTarget, fileTargets(allFileTargetsInRuntime), ninjaCwd)
916
- );
917
- writeFileAscii(
918
- path.join(runtimeDir, ninjaOutput),
919
- templateRuntimeRules + stmts.join("\n") + "\n"
920
- );
921
- } catch (e) {
922
- console.log(e);
923
- }
924
- }
925
-
926
- var dTypeString = "TYPE_STRING";
927
-
928
- var dTypeInt = "TYPE_INT";
929
-
930
- var dTypeFunctor = "TYPE_FUNCTOR";
931
-
932
- var dTypeLocalIdent = "TYPE_LOCAL_IDENT";
933
-
934
- var dTypeIdent = "TYPE_IDENT";
935
-
936
- var dTypePoly = "TYPE_POLY";
937
-
938
- var cppoRuleName = `cppo`;
939
- var cppoFile = `./bin/cppo.exe`;
940
-
941
- var cppoRule = (flags = "") => `
942
- rule ${cppoRuleName}
943
- command = ${cppoFile} -V OCAML:${getVersionString()} ${flags} $type $in -o $out
944
- generator = true
945
- `;
946
-
947
- var mllRuleName = `mll`;
948
- var mllRule = `
949
- rule ${mllRuleName}
950
- command = $ocamllex $in
951
- generator = true
952
- `;
953
-
954
- var mlyRuleName = `mly`;
955
- var mlyRule = `
956
- rule ${mlyRuleName}
957
- command = $ocamlyacc -v --strict $in
958
- generator = true
959
- `;
960
- async function othersNinja(devmode = true) {
961
- var compilerTarget = pseudoTarget("$bsc");
962
- var externalDeps = [
963
- compilerTarget,
964
- fileTarget("belt_internals.cmi"),
965
- fileTarget("js.cmi"),
966
- ];
967
- var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
968
- var ninjaCwd = "others";
969
-
970
- var templateOthersRules = `
971
- bsc_primitive_flags = ${commonBsFlags} -bs-cross-module-opt -make-runtime -nopervasives -unsafe -w +50 -warn-error A
972
- bsc_flags = $bsc_primitive_flags -open Belt_internals
973
- ${ruleCC(ninjaCwd)}
974
- ${ninjaQuickBuidList([
975
- [
976
- ["belt.cmj", "belt.cmi"],
977
- "belt.ml",
978
- "cc",
979
- ninjaCwd,
980
- [["bsc_flags", "$bsc_primitive_flags"]],
981
- [],
982
- [compilerTarget],
983
- ],
984
- [
985
- ["js.cmj", "js.cmi"],
986
- "js.ml",
987
- "cc",
988
- ninjaCwd,
989
- [["bsc_flags", "$bsc_primitive_flags"]],
990
- [],
991
- [compilerTarget],
992
- ],
993
- [
994
- ["belt_internals.cmi"],
995
- "belt_internals.mli",
996
- "cc",
997
- ninjaCwd,
998
- [["bsc_flags", "$bsc_primitive_flags"]],
999
- [],
1000
- [compilerTarget],
1001
- ],
1002
- [
1003
- ["node.cmj", "node.cmi"],
1004
- "node.ml",
1005
- "cc",
1006
- ninjaCwd,
1007
- [], // depends on belt_internals
1008
- [],
1009
- [compilerTarget, fileTarget("js.cmi"), fileTarget("belt_internals.cmi")], // need js.cm*
1010
- ],
1011
- ])}
1012
- `;
1013
- var othersDirFiles = fs.readdirSync(othersDir, "ascii");
1014
- var jsPrefixSourceFiles = othersDirFiles.filter(
1015
- x =>
1016
- x.startsWith("js") &&
1017
- (x.endsWith(".ml") || x.endsWith(".mli")) &&
1018
- !x.includes(".cppo") &&
1019
- !x.includes(".pp") &&
1020
- !x.includes("#") &&
1021
- x !== "js.ml"
1022
- );
1023
- var othersFiles = othersDirFiles.filter(
1024
- x =>
1025
- !x.startsWith("js") &&
1026
- x !== "belt.ml" &&
1027
- x !== "belt_internals.mli" &&
1028
- x !== "node.ml" &&
1029
- (x.endsWith(".ml") || x.endsWith(".mli")) &&
1030
- !x.includes("#") &&
1031
- !x.includes(".cppo") // we have node ..
1032
- );
1033
- var jsTargets = collectTarget(jsPrefixSourceFiles);
1034
- var allJsTargets = scanFileTargets(jsTargets, []);
1035
- let jsDepsMap = new Map();
1036
- let depsMap = new Map();
1037
- await Promise.all([
1038
- ocamlDepForBscAsync(jsPrefixSourceFiles, othersDir, jsDepsMap),
1039
- ocamlDepForBscAsync(othersFiles, othersDir, depsMap),
1040
- ]);
1041
- var jsOutput = generateNinja(jsDepsMap, jsTargets, ninjaCwd, externalDeps);
1042
- jsOutput.push(phony(js_package, fileTargets(allJsTargets), ninjaCwd));
1043
-
1044
- // Note compiling belt.ml still try to read
1045
- // belt_xx.cmi we need enforce the order to
1046
- // avoid data race issues
1047
- var beltPackage = fileTarget("belt.cmi");
1048
- var nodePackage = fileTarget("node.cmi");
1049
- var beltTargets = collectTarget(othersFiles);
1050
- depsMap.forEach((s, k) => {
1051
- if (k.startsWith("belt")) {
1052
- s.add(beltPackage);
1053
- } else if (k.startsWith("node")) {
1054
- s.add(nodePackage);
1055
- }
1056
- s.add(js_package);
1057
- });
1058
- var allOthersTarget = scanFileTargets(beltTargets, []);
1059
- var beltOutput = generateNinja(depsMap, beltTargets, ninjaCwd, externalDeps);
1060
- beltOutput.push(phony(othersTarget, fileTargets(allOthersTarget), ninjaCwd));
1061
- // ninjaBuild([`belt_HashSetString.ml`,])
1062
- writeFileAscii(
1063
- path.join(othersDir, ninjaOutput),
1064
- templateOthersRules +
1065
- jsOutput.join("\n") +
1066
- "\n" +
1067
- beltOutput.join("\n") +
1068
- "\n"
1069
- );
1070
- }
1071
- /**
1072
- *
1073
- * @param {boolean} devmode
1074
- * generate build.ninja/release.ninja for stdlib-402
1075
- */
1076
- async function stdlibNinja(devmode = true) {
1077
- var stdlibVersion = "stdlib-406";
1078
- var ninjaCwd = stdlibVersion;
1079
- var stdlibDir = path.join(jscompDir, stdlibVersion);
1080
- var compilerTarget = pseudoTarget("$bsc");
1081
- var externalDeps = [compilerTarget, othersTarget];
1082
- var ninjaOutput = devmode ? "build.ninja" : "release.ninja";
1083
- var bsc_flags = "bsc_flags";
1084
- /**
1085
- * @type [string,string][]
1086
- */
1087
- var bsc_builtin_overrides = [[bsc_flags, `$${bsc_flags} -nopervasives`]];
1088
- // It is interesting `-w -a` would generate not great code sometimes
1089
- // deprecations diabled due to string_of_float
1090
- var warnings = "-w -9-3-106 -warn-error A";
1091
- var templateStdlibRules = `
1092
- ${bsc_flags} = ${commonBsFlags} -bs-cross-module-opt -make-runtime ${warnings} -I others
1093
- ${ruleCC(ninjaCwd)}
1094
- ${ninjaQuickBuidList([
1095
- // we make it still depends on external
1096
- // to enjoy free ride on dev config for compiler-deps
1097
-
1098
- [
1099
- "pervasives.cmj",
1100
- "pervasives.ml",
1101
- "cc_cmi",
1102
- ninjaCwd,
1103
- bsc_builtin_overrides,
1104
- "pervasives.cmi",
1105
- externalDeps,
1106
- ],
1107
- [
1108
- "pervasives.cmi",
1109
- "pervasives.mli",
1110
- "cc",
1111
- ninjaCwd,
1112
- bsc_builtin_overrides,
1113
- [],
1114
- externalDeps,
1115
- ],
1116
- ])}
1117
- `;
1118
- var stdlibDirFiles = fs.readdirSync(stdlibDir, "ascii");
1119
- var sources = stdlibDirFiles.filter(x => {
1120
- return (
1121
- !x.startsWith("pervasives") && (x.endsWith(".ml") || x.endsWith(".mli"))
1122
- );
1123
- });
1124
- let depsMap = new Map();
1125
- await ocamlDepForBscAsync(sources, stdlibDir, depsMap);
1126
- var targets = collectTarget(sources);
1127
- var allTargets = scanFileTargets(targets, [
1128
- "pervasives.cmi",
1129
- "pervasives.cmj",
1130
- ]);
1131
- targets.forEach((ext, mod) => {
1132
- switch (ext) {
1133
- case "HAS_MLI":
1134
- case "HAS_BOTH":
1135
- updateDepsKVByFile(mod + ".cmi", "pervasives.cmj", depsMap);
1136
- break;
1137
- case "HAS_ML":
1138
- updateDepsKVByFile(mod + ".cmj", "pervasives.cmj", depsMap);
1139
- break;
1140
- }
1141
- });
1142
- var output = generateNinja(depsMap, targets, ninjaCwd, externalDeps);
1143
- output.push(phony(stdlibTarget, fileTargets(allTargets), ninjaCwd));
1144
-
1145
- writeFileAscii(
1146
- path.join(stdlibDir, ninjaOutput),
1147
- templateStdlibRules + output.join("\n") + "\n"
1148
- );
1149
- }
1150
-
1151
- /**
1152
- *
1153
- * @param {string} text
1154
- */
1155
- function getDeps(text) {
1156
- /**
1157
- * @type {string[]}
1158
- */
1159
- var deps = [];
1160
- text.replace(
1161
- /(\/\*[\w\W]*?\*\/|\/\/[^\n]*|[.$]r)|\brequire\s*\(\s*["']([^"']*)["']\s*\)/g,
1162
- function (_, ignore, id) {
1163
- if (!ignore) deps.push(id);
1164
- return ""; // TODO: examine the regex
1165
- }
1166
- );
1167
- return deps;
1168
- }
1169
-
1170
- /**
1171
- *
1172
- * @param {string} x
1173
- * @param {string} newExt
1174
- * @example
1175
- *
1176
- * ```js
1177
- * replaceExt('xx.cmj', '.a') // return 'xx.a'
1178
- * ```
1179
- *
1180
- */
1181
- function replaceExt(x, newExt) {
1182
- let index = x.lastIndexOf(".");
1183
- if (index < 0) {
1184
- return x;
1185
- }
1186
- return x.slice(0, index) + newExt;
1187
- }
1188
- /**
1189
- *
1190
- * @param {string} x
1191
- */
1192
- function baseName(x) {
1193
- return x.substr(0, x.indexOf("."));
1194
- }
1195
-
1196
- /**
1197
- *
1198
- * @returns {Promise<void>}
1199
- */
1200
- async function testNinja() {
1201
- var ninjaOutput = "build.ninja";
1202
- var ninjaCwd = `test`;
1203
- var templateTestRules = `
1204
- bsc_flags = -bs-no-version-header -bs-cross-module-opt -make-runtime-test -bs-package-output commonjs:jscomp/test -w -3-6-26-27-29-30-32..40-44-45-52-60-9-106+104 -warn-error A -I runtime -I $stdlib -I others
1205
- ${ruleCC(ninjaCwd)}
1206
-
1207
-
1208
- ${mllRule}
1209
- ${mllList(ninjaCwd, [
1210
- "arith_lexer.mll",
1211
- "number_lexer.mll",
1212
- "simple_lexer_test.mll",
1213
- ])}
1214
- `;
1215
- var testDirFiles = fs.readdirSync(testDir, "ascii");
1216
- var sources = testDirFiles.filter(x => {
1217
- return (
1218
- x.endsWith(".re") ||
1219
- x.endsWith(".rei") ||
1220
- x.endsWith(".resi") ||
1221
- x.endsWith(".res") ||
1222
- ((x.endsWith(".ml") || x.endsWith(".mli")) && !x.endsWith("bspack.ml"))
1223
- );
1224
- });
1225
-
1226
- let depsMap = createDepsMapWithTargets(sources);
1227
- await Promise.all(depModulesForBscAsync(sources, testDir, depsMap));
1228
- var targets = collectTarget(sources);
1229
- var output = generateNinja(depsMap, targets, ninjaCwd, [
1230
- runtimeTarget,
1231
- stdlibTarget,
1232
- pseudoTarget("$bsc"),
1233
- ]);
1234
- output.push(
1235
- phony(
1236
- pseudoTarget("test"),
1237
- fileTargets(scanFileTargets(targets, [])),
1238
- ninjaCwd
1239
- )
1240
- );
1241
- writeFileAscii(
1242
- path.join(testDir, ninjaOutput),
1243
- templateTestRules + output.join("\n") + "\n"
1244
- );
1245
- }
1246
-
1247
- /**
1248
- *
1249
- * @param {DepsMap} depsMap
1250
- */
1251
- function runJSCheckAsync(depsMap) {
1252
- return new Promise(resolve => {
1253
- var count = 0;
1254
- var tasks = runtimeJsFiles.length;
1255
- var updateTick = () => {
1256
- count++;
1257
- if (count === tasks) {
1258
- resolve(count);
1259
- }
1260
- };
1261
- runtimeJsFiles.forEach(name => {
1262
- var jsFile = path.join(jsDir, name + ".js");
1263
- fs.readFile(jsFile, "utf8", function (err, fileContent) {
1264
- if (err === null) {
1265
- var deps = getDeps(fileContent).map(x => path.parse(x).name + ".cmj");
1266
- fs.exists(path.join(runtimeDir, name + ".mli"), exist => {
1267
- if (exist) {
1268
- deps.push(name + ".cmi");
1269
- }
1270
- updateDepsKVsByFile(`${name}.cmj`, deps, depsMap);
1271
- updateTick();
1272
- });
1273
- } else {
1274
- // file non exist or reading error ignore
1275
- updateTick();
1276
- }
1277
- });
1278
- });
1279
- });
1280
- }
1281
-
1282
- function checkEffect() {
1283
- var jsPaths = runtimeJsFiles.map(x => path.join(jsDir, x + ".js"));
1284
- var effect = jsPaths
1285
- .map(x => {
1286
- return {
1287
- file: x,
1288
- content: fs.readFileSync(x, "utf8"),
1289
- };
1290
- })
1291
- .map(({ file, content: x }) => {
1292
- if (/No side effect|This output is empty/.test(x)) {
1293
- return {
1294
- file,
1295
- effect: "pure",
1296
- };
1297
- } else if (/Not a pure module/.test(x)) {
1298
- return {
1299
- file,
1300
- effect: "false",
1301
- };
1302
- } else {
1303
- return {
1304
- file,
1305
- effect: "unknown",
1306
- };
1307
- }
1308
- })
1309
- .filter(({ effect }) => effect !== "pure")
1310
- .map(({ file, effect }) => {
1311
- return { file: path.basename(file), effect };
1312
- });
1313
-
1314
- var black_list = new Set([
1315
- "caml_int32.js",
1316
- "caml_int64.js",
1317
- "caml_lexer.js",
1318
- "caml_parser.js",
1319
- ]);
1320
-
1321
- var assert = require("assert");
1322
- // @ts-ignore
1323
- assert(
1324
- effect.length === black_list.size &&
1325
- effect.every(x => black_list.has(x.file))
1326
- );
1327
-
1328
- console.log(effect);
1329
- }
1330
-
1331
- /**
1332
- *
1333
- * @param {string[]} domain
1334
- * @param {Map<string,Set<string>>} dependency_graph
1335
- * @returns {string[]}
1336
- */
1337
- function sortFilesByDeps(domain, dependency_graph) {
1338
- /**
1339
- * @type{string[]}
1340
- */
1341
- var result = [];
1342
- var workList = new Set(domain);
1343
- /**
1344
- *
1345
- * @param {Set<string>} visiting
1346
- * @param {string[]} path
1347
- * @param {string} current
1348
- */
1349
- var visit = function (visiting, path, current) {
1350
- if (visiting.has(current)) {
1351
- throw new Error(`cycle: ${path.concat(current).join(" ")}`);
1352
- }
1353
- if (workList.has(current)) {
1354
- visiting.add(current);
1355
- var next = dependency_graph.get(current);
1356
- if (next !== undefined && next.size > 0) {
1357
- next.forEach(x => {
1358
- visit(visiting, path.concat(current), x);
1359
- });
1360
- }
1361
- visiting.delete(current);
1362
- workList.delete(current);
1363
- result.push(current);
1364
- }
1365
- };
1366
- while (workList.size > 0) {
1367
- visit(new Set(), [], workList.values().next().value);
1368
- }
1369
- return result;
1370
- }
1371
-
1372
- function updateRelease() {
1373
- runtimeNinja(false);
1374
- stdlibNinja(false);
1375
- othersNinja(false);
1376
- }
1377
-
1378
- function updateDev() {
1379
- writeFileAscii(
1380
- path.join(jscompDir, "build.ninja"),
1381
- `
1382
- subninja compiler.ninja
1383
- stdlib = stdlib-406
1384
- ${BSC_COMPILER}
1385
- ocamllex = ocamllex.opt
1386
- subninja runtime/build.ninja
1387
- subninja others/build.ninja
1388
- subninja $stdlib/build.ninja
1389
- subninja test/build.ninja
1390
- o all: phony runtime others $stdlib test
1391
- `
1392
- );
1393
- writeFileAscii(
1394
- path.join(jscompDir, "..", "lib", "build.ninja"),
1395
- `
1396
- ocamlopt = ocamlopt.opt
1397
- ext = exe
1398
- INCL= "4.06.1+BS"
1399
- include body.ninja
1400
- `
1401
- );
1402
-
1403
- preprocessorNinjaSync(); // This is needed so that ocamldep makes sense
1404
- nativeNinja();
1405
- runtimeNinja();
1406
- stdlibNinja(true);
1407
- if (fs.existsSync(bsc_exe)) {
1408
- testNinja();
1409
- }
1410
- othersNinja();
1411
- }
1412
- exports.updateDev = updateDev;
1413
- exports.updateRelease = updateRelease;
1414
-
1415
- /**
1416
- *
1417
- * @param {string} dir
1418
- */
1419
- function readdirSync(dir) {
1420
- return fs.readdirSync(dir, "ascii");
1421
- }
1422
- /**
1423
- * @type {string[]}
1424
- */
1425
- var black_list = [];
1426
- /**
1427
- *
1428
- * @param {string} dir
1429
- */
1430
- function test(dir) {
1431
- return readdirSync(path.join(jscompDir, dir))
1432
- .filter(x => {
1433
- return (
1434
- (x.endsWith(".ml") || x.endsWith(".mli")) &&
1435
- !(x.endsWith(".cppo.ml") || x.endsWith(".cppo.mli")) &&
1436
- !(x.endsWith(".pp.ml") || x.endsWith(".pp.mli")) &&
1437
- !black_list.some(name => x.includes(name))
1438
- );
1439
- })
1440
- .map(x => path.join(dir, x));
1441
- }
1442
-
1443
- /**
1444
- *
1445
- * @param {Set<string>} xs
1446
- * @returns {string}
1447
- */
1448
- function setSortedToStringAsNativeDeps(xs) {
1449
- var arr = Array.from(xs).sort();
1450
- // it relies on we have -opaque, so that .cmx is dummy file
1451
- return arr.join(" ").replace(/\.cmx/g, ".cmi");
1452
- }
1453
-
1454
- /**
1455
- * Built cppo.exe refmt.exe etc for dev purpose
1456
- */
1457
- function preprocessorNinjaSync() {
1458
- var napkinFiles = fs
1459
- .readdirSync(path.join(jscompDir, "..", "syntax", "src"), "ascii")
1460
- .filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
1461
- var napkinCliFiles = fs
1462
- .readdirSync(path.join(jscompDir, "..", "syntax", "cli"), "ascii")
1463
- .filter(x => x.endsWith(".ml") || x.endsWith(".mli"));
1464
- var buildNapkinFiles = napkinFiles
1465
- .map(file => `o napkin/${file} : copy ../syntax/src/${file}`)
1466
- .join("\n");
1467
- var buildNapkinCliFiles = napkinCliFiles
1468
- .map(file => `o napkin/${file} : copy ../syntax/cli/${file}`)
1469
- .join("\n");
1470
- var cppoNative = `
1471
- ocamlopt = ocamlopt.opt
1472
- ocamllex = ocamllex.opt
1473
- ocamlc = ocamlc.opt
1474
- ocamlmklib = ocamlmklib
1475
- ocaml = ocaml
1476
- ocamlyacc = ocamlyacc
1477
- rule link
1478
- command = $ocamlopt -g $flags $libs $in -o $out
1479
- rule bytelink
1480
- command = $ocamlc -g $flags $libs $in -o $out
1481
- o ${cppoFile}: link ${cppoMonoFile}
1482
- libs = unix.cmxa str.cmxa
1483
- generator = true
1484
- ${cppoRule()}
1485
- ${cppoList("ext", [
1486
- ["hash_set_string.ml", "hash_set.cppo.ml", dTypeString],
1487
- ["hash_set_int.ml", "hash_set.cppo.ml", dTypeInt],
1488
- ["hash_set_ident.ml", "hash_set.cppo.ml", dTypeIdent],
1489
- ["hash_set.ml", "hash_set.cppo.ml", dTypeFunctor],
1490
- ["hash_set_poly.ml", "hash_set.cppo.ml", dTypePoly],
1491
- ["vec_int.ml", "vec.cppo.ml", dTypeInt],
1492
- ["vec.ml", "vec.cppo.ml", dTypeFunctor],
1493
- ["set_string.ml", "set.cppo.ml", dTypeString],
1494
- ["set_int.ml", "set.cppo.ml", dTypeInt],
1495
- ["set_ident.ml", "set.cppo.ml", dTypeIdent],
1496
- ["map_string.ml", "map.cppo.ml", dTypeString],
1497
- ["map_int.ml", "map.cppo.ml", dTypeInt],
1498
- ["map_ident.ml", "map.cppo.ml", dTypeIdent],
1499
- [
1500
- "ordered_hash_map_local_ident.ml",
1501
- "ordered_hash_map.cppo.ml",
1502
- dTypeLocalIdent,
1503
- ],
1504
- ["hash_string.ml", "hash.cppo.ml", dTypeString],
1505
- ["hash_int.ml", "hash.cppo.ml", dTypeInt],
1506
- ["hash_ident.ml", "hash.cppo.ml", dTypeIdent],
1507
- ["hash.ml", "hash.cppo.ml", dTypeFunctor],
1508
- ["ext_string.ml", "ext_string.pp.ml"],
1509
- ["ext_string.mli", "ext_string.pp.mli"],
1510
- ["ext_sys.ml", "ext_sys.pp.ml"],
1511
- ])}
1512
- ${cppoList("stubs", [["bs_hash_stubs.ml", "bs_hash_stubs.pp.ml"]])}
1513
- ${cppoList("ml", [
1514
- ["cmt_format.ml", "cmt_format.pp.ml"],
1515
- ["pprintast.ml", "pprintast.pp.ml"],
1516
- ])}
1517
- ${cppoList("common", [["js_config.ml", "js_config.pp.ml"]])}
1518
- ${cppoList("frontend", [["external_ffi_types.ml", "external_ffi_types.pp.ml"]])}
1519
- ${cppoList("core", [
1520
- ["lam_compile_main.ml", "lam_compile_main.pp.ml"],
1521
- ["bs_cmi_load.ml", "bs_cmi_load.pp.ml"],
1522
- ["bs_conditional_initial.ml", "bs_conditional_initial.pp.ml"],
1523
- ["js_cmj_load.ml", "js_cmj_load.pp.ml"],
1524
- ["js_name_of_module_id.ml", "js_name_of_module_id.pp.ml"],
1525
- ["js_pass_debug.ml", "js_pass_debug.pp.ml"],
1526
- ["lam_pass_lets_dce.ml", "lam_pass_lets_dce.pp.ml"],
1527
- ["lam_util.ml", "lam_util.pp.ml"],
1528
- ])}
1529
- ${cppoList("others", [
1530
- ["belt_HashSetString.ml", "hashset.cppo.ml", dTypeString],
1531
- ["belt_HashSetString.mli", "hashset.cppo.mli", dTypeString],
1532
- ["belt_HashSetInt.ml", "hashset.cppo.ml", dTypeInt],
1533
- ["belt_HashSetInt.mli", "hashset.cppo.mli", dTypeInt],
1534
- ["belt_HashMapString.ml", "hashmap.cppo.ml", dTypeString],
1535
- ["belt_HashMapString.mli", "hashmap.cppo.mli", dTypeString],
1536
- ["belt_HashMapInt.ml", "hashmap.cppo.ml", dTypeInt],
1537
- ["belt_HashMapInt.mli", "hashmap.cppo.mli", dTypeInt],
1538
- ["belt_MapString.ml", "map.cppo.ml", dTypeString],
1539
- ["belt_MapString.mli", "map.cppo.mli", dTypeString],
1540
- ["belt_MapInt.ml", "map.cppo.ml", dTypeInt],
1541
- ["belt_MapInt.mli", "map.cppo.mli", dTypeInt],
1542
- ["belt_SetString.ml", "belt_Set.cppo.ml", dTypeString],
1543
- ["belt_SetString.mli", "belt_Set.cppo.mli", dTypeString],
1544
- ["belt_SetInt.ml", "belt_Set.cppo.ml", dTypeInt],
1545
- ["belt_SetInt.mli", "belt_Set.cppo.mli", dTypeInt],
1546
- ["belt_MutableMapString.ml", "mapm.cppo.ml", dTypeString],
1547
- ["belt_MutableMapString.mli", "mapm.cppo.mli", dTypeString],
1548
- ["belt_MutableMapInt.ml", "mapm.cppo.ml", dTypeInt],
1549
- ["belt_MutableMapInt.mli", "mapm.cppo.mli", dTypeInt],
1550
- ["belt_MutableSetString.ml", "setm.cppo.ml", dTypeString],
1551
- ["belt_MutableSetString.mli", "setm.cppo.mli", dTypeString],
1552
- ["belt_MutableSetInt.ml", "setm.cppo.ml", dTypeInt],
1553
- ["belt_MutableSetInt.mli", "setm.cppo.mli", dTypeInt],
1554
- ["belt_SortArrayString.ml", "sort.cppo.ml", dTypeString],
1555
- ["belt_SortArrayString.mli", "sort.cppo.mli", dTypeString],
1556
- ["belt_SortArrayInt.ml", "sort.cppo.ml", dTypeInt],
1557
- ["belt_SortArrayInt.mli", "sort.cppo.mli", dTypeInt],
1558
- ["belt_internalMapString.ml", "internal_map.cppo.ml", dTypeString],
1559
- ["belt_internalMapInt.ml", "internal_map.cppo.ml", dTypeInt],
1560
- ["belt_internalSetString.ml", "internal_set.cppo.ml", dTypeString],
1561
- ["belt_internalSetInt.ml", "internal_set.cppo.ml", dTypeInt],
1562
- ["js_typed_array.ml", "js_typed_array.cppo.ml", ""],
1563
- ["js_typed_array2.ml", "js_typed_array2.cppo.ml", ""],
1564
- ])}
1565
-
1566
- ${mllRule}
1567
- ${mllList("ext", ["ext_json_parse.mll"])}
1568
- ${mllList("ml", ["lexer.mll"])}
1569
- rule copy
1570
- command = cp $in $out
1571
- description = $in -> $out
1572
- ${buildNapkinFiles}
1573
- ${buildNapkinCliFiles}
1574
- `;
1575
- var cppoNinjaFile = "cppoVendor.ninja";
1576
- writeFileSync(path.join(jscompDir, cppoNinjaFile), cppoNative);
1577
- cp.execFileSync(vendorNinjaPath, ["-f", cppoNinjaFile, "--verbose", "-v"], {
1578
- cwd: jscompDir,
1579
- stdio: [0, 1, 2],
1580
- encoding: "utf8",
1581
- });
1582
- }
1583
-
1584
- var sourceDirs = [
1585
- "bsb",
1586
- "bsb_helper",
1587
- "common",
1588
- "core",
1589
- "depends",
1590
- "frontend",
1591
- "gentype",
1592
- "js_parser",
1593
- "ext",
1594
- "main",
1595
- "ml",
1596
- "ounit",
1597
- "ounit_tests",
1598
- "outcome_printer",
1599
- "napkin",
1600
- "stubs",
1601
- "super_errors",
1602
- ];
1603
- /**
1604
- *
1605
- * @param {string[]} dirs
1606
- */
1607
- function makeLibs(dirs) {
1608
- return dirs.map(x => `${x}/${x}.cmxa`).join(" ");
1609
- }
1610
- var compiler_libs = ["ml"];
1611
- var bsc_libs = [
1612
- "stubs",
1613
- "ext",
1614
- ...compiler_libs,
1615
- "js_parser",
1616
- "napkin",
1617
- "common",
1618
- "frontend",
1619
- "depends",
1620
- "gentype",
1621
- "super_errors",
1622
- "outcome_printer",
1623
- "core",
1624
- ];
1625
-
1626
- var bsb_helper_libs = ["stubs", "ext", "common", "bsb_helper"];
1627
-
1628
- var rescript_libs = ["stubs", "ext", "common", "bsb"];
1629
-
1630
- var cmjdumps_libs = [
1631
- "stubs",
1632
- ...compiler_libs,
1633
- "ext",
1634
- "common",
1635
- "frontend",
1636
- "depends",
1637
- "core",
1638
- ];
1639
-
1640
- var cmij_libs = [
1641
- "stubs",
1642
- "ext",
1643
- ...compiler_libs,
1644
- "common",
1645
- "frontend",
1646
- "depends",
1647
- "core",
1648
- ];
1649
-
1650
- var tests_libs = [
1651
- "stubs",
1652
- "ext",
1653
- ...compiler_libs,
1654
- "ounit",
1655
- "common",
1656
- "frontend",
1657
- "depends",
1658
- "bsb",
1659
- "bsb_helper",
1660
- "core",
1661
- "ounit_tests",
1662
- ];
1663
- /**
1664
- * Note don't run `ninja -t clean -g`
1665
- * Since it will remove generated ml file which has
1666
- * an effect on depfile
1667
- */
1668
- function nativeNinja() {
1669
- var ninjaOutput = "compiler.ninja";
1670
-
1671
- var includes = sourceDirs.map(x => `-I ${x}`).join(" ");
1672
-
1673
- var flags = "-w A-4-9-40..42-30-48-50-44-45";
1674
- var minor_version = +getVersionString().split(".")[1];
1675
- if (minor_version > 12) {
1676
- flags += "-69-70"; // we should turn -69 on except for vendored files
1677
- }
1678
- if (minor_version > 7) {
1679
- flags += "-3-67 -error-style short";
1680
- }
1681
- var templateNative = `
1682
- ocamlopt = ocamlopt.opt
1683
- ocamllex = ocamllex.opt
1684
- ocamlc = ocamlc.opt
1685
- ocamlmklib = ocamlmklib
1686
- ocaml = ocaml
1687
- ocamlyacc = ocamlyacc
1688
- subninja cppoVendor.ninja
1689
-
1690
- rule optc
1691
- command = $ocamlopt -bin-annot -strict-sequence -safe-string -opaque ${includes} -g -linscan ${flags} -warn-error A -absname -c $in
1692
- description = $out : $in
1693
- rule archive
1694
- command = $ocamlopt -a $in -o $out
1695
- description = arcive -> $out
1696
- rule link
1697
- command = $ocamlopt -g $flags $libs $in -o $out
1698
- description = linking -> $out
1699
- rule mk_bsversion
1700
- command = node $in
1701
- generator = true
1702
- rule gcc
1703
- command = $ocamlopt -ccopt -fPIC -ccopt -O2 -ccopt -o -ccopt $out -c $in
1704
- o stubs/ext_basic_hash_stubs.o : gcc stubs/ext_basic_hash_stubs.c
1705
- rule ocamlmklib
1706
- command = $ocamlmklib -v $in -o $name && touch $out
1707
-
1708
- rule mk_keywords
1709
- command = $ocaml $in
1710
- generator = true
1711
- o ext/js_reserved_map.ml: mk_keywords ../scripts/build_sorted.ml keywords.list
1712
-
1713
- o stubs/libbs_hash.a stubs/dllbs_hash.so: ocamlmklib stubs/ext_basic_hash_stubs.o
1714
- name = stubs/bs_hash
1715
- rule stubslib
1716
- command = $ocamlopt -a $ml -o $out -cclib $clib
1717
- o stubs/stubs.cmxa : stubslib stubs/bs_hash_stubs.cmx stubs/libbs_hash.a
1718
- ml = stubs/bs_hash_stubs.cmx
1719
- clib = stubs/libbs_hash.a
1720
-
1721
- rule p4of
1722
- command = node ../ocaml-tree/wasm.js $flags -i $i -o $out
1723
- generator = true
1724
- o core/js_fold.ml: p4of core/j.ml
1725
- flags = -fold
1726
- o core/js_record_iter.ml: p4of core/j.ml
1727
- flags = -record-iter
1728
- o core/js_record_map.ml: p4of core/j.ml
1729
- flags = -record-map
1730
- o core/js_record_fold.ml: p4of core/j.ml
1731
- flags = -record-fold
1732
-
1733
- o ${my_target}/bsc.exe: link ${makeLibs(
1734
- bsc_libs
1735
- )} main/rescript_compiler_main.cmx
1736
- libs = unix.cmxa str.cmxa
1737
- o ${my_target}/rescript.exe: link ${makeLibs(
1738
- rescript_libs
1739
- )} main/rescript_main.cmx
1740
- libs = unix.cmxa str.cmxa
1741
- o ${my_target}/bsb_helper.exe: link ${makeLibs(
1742
- bsb_helper_libs
1743
- )} main/bsb_helper_main.cmx
1744
- libs = unix.cmxa str.cmxa
1745
- o ./bin/bspack.exe: link ./main/bspack_main.cmx
1746
- libs = unix.cmxa
1747
- flags = -I ./bin -w -40-30-50
1748
- o ./bin/cmjdump.exe: link ${makeLibs(cmjdumps_libs)} main/cmjdump_main.cmx
1749
-
1750
- o ./bin/cmij.exe: link ${makeLibs(cmij_libs)} main/cmij_main.cmx
1751
-
1752
- o ./bin/tests.exe: link ${makeLibs(tests_libs)} main/ounit_tests_main.cmx
1753
- libs = str.cmxa unix.cmxa
1754
- build native: phony ${my_target}/bsc.exe ${my_target}/rescript.exe ${my_target}/bsb_helper.exe ./bin/bspack.exe ./bin/cmjdump.exe ./bin/cmij.exe ./bin/tests.exe
1755
-
1756
-
1757
- ${mllRule}
1758
- ${mlyRule}
1759
-
1760
-
1761
- ${mlyList("ml", ["parser.mly"])}
1762
- rule mk_shared
1763
- command = $ocamlopt -I +compiler-libs -shared $flags -o $out $in
1764
- o ../odoc_gen/generator.cmxs : mk_shared ../odoc_gen/generator.mli ../odoc_gen/generator.ml
1765
- flags = -I +ocamldoc -I ../odoc_gen -absname
1766
- `;
1767
- /**
1768
- * @type { {name : string, libs: string[]}[]}
1769
- */
1770
- var libs = [];
1771
- sourceDirs.forEach(name => {
1772
- if (name !== "main" && name !== "stubs") {
1773
- libs.push({ name, libs: [] });
1774
- }
1775
- });
1776
-
1777
- /**
1778
- * @type{string[]}
1779
- */
1780
- var files = [];
1781
- for (let dir of sourceDirs) {
1782
- files = files.concat(test(dir));
1783
- }
1784
-
1785
- cp.exec(
1786
- `ocamldep.opt -allow-approx -one-line -native ${includes} ${files.join(
1787
- " "
1788
- )}`,
1789
- { cwd: jscompDir, encoding: "ascii" },
1790
- function (error, out) {
1791
- if (error !== null) {
1792
- throw error;
1793
- }
1794
- /**
1795
- * @type {Map<string,Set<string>>}
1796
- */
1797
- var map = new Map();
1798
-
1799
- var pairs = out.split("\n").map(x => x.split(":").map(x => x.trim()));
1800
- pairs.forEach(pair => {
1801
- /**
1802
- * @type {string[]|string}
1803
- */
1804
-
1805
- var deps;
1806
- var key = pair[0];
1807
- if (pair[1] !== undefined && (deps = pair[1].trim())) {
1808
- // deps = deps.replace(/.cmx/g, ".cmi");
1809
- deps = deps.split(" ");
1810
- map.set(key, new Set(deps));
1811
- }
1812
- if (key.endsWith("cmx")) {
1813
- libs.forEach(x => {
1814
- if (path.dirname(key) === x.name) {
1815
- x.libs.push(key);
1816
- }
1817
- });
1818
- }
1819
- });
1820
-
1821
- // not ocamldep output
1822
- // when no mli exists no deps for cmi otherwise add cmi
1823
- var stmts = pairs.map(pair => {
1824
- if (pair[0]) {
1825
- var target = pair[0];
1826
- var y = path.parse(target);
1827
- /**
1828
- * @type {Set<string>}
1829
- */
1830
- var deps = map.get(target) || new Set();
1831
- if (y.ext === ".cmx") {
1832
- var intf = path.join(y.dir, y.name + ".cmi");
1833
- var ml = path.join(y.dir, y.name + ".ml");
1834
- return `o ${
1835
- deps.has(intf) ? target : [target, intf].join(" ")
1836
- } : optc ${ml} | ${setSortedToStringAsNativeDeps(deps)}`;
1837
- } else {
1838
- // === 'cmi'
1839
- var mli = path.join(y.dir, y.name + ".mli");
1840
- return `o ${target} : optc ${mli} | ${setSortedToStringAsNativeDeps(
1841
- deps
1842
- )}`;
1843
- }
1844
- }
1845
- });
1846
- libs.forEach(x => {
1847
- var output = sortFilesByDeps(x.libs, map);
1848
- var name = x.name;
1849
- stmts.push(`o ${name}/${name}.cmxa : archive ${output.join(" ")}`);
1850
- });
1851
-
1852
- writeFileAscii(
1853
- path.join(jscompDir, ninjaOutput),
1854
- templateNative + stmts.join("\n") + "\n"
1855
- );
1856
- }
1857
- );
1858
- }
1859
-
1860
- function main() {
1861
- var emptyCount = 2;
1862
- var isPlayground = false;
1863
- if (require.main === module) {
1864
- if (process.argv.includes("-check")) {
1865
- checkEffect();
1866
- }
1867
- if (process.argv.includes("-playground")) {
1868
- isPlayground = true;
1869
- emptyCount++;
1870
- }
1871
-
1872
- var subcommand = process.argv[2];
1873
- switch (subcommand) {
1874
- case "build":
1875
- try {
1876
- cp.execFileSync(vendorNinjaPath, ["native", "all"], {
1877
- encoding: "utf8",
1878
- cwd: jscompDir,
1879
- stdio: [0, 1, 2],
1880
- });
1881
- if (!isPlayground) {
1882
- cp.execFileSync(
1883
- path.join(__dirname, "..", "jscomp", "bin", "cmij.exe"),
1884
- {
1885
- encoding: "utf8",
1886
- cwd: jscompDir,
1887
- stdio: [0, 1, 2],
1888
- }
1889
- );
1890
- }
1891
- cp.execFileSync(vendorNinjaPath, ["-f", "snapshot.ninja"], {
1892
- encoding: "utf8",
1893
- cwd: jscompDir,
1894
- stdio: [0, 1, 2],
1895
- });
1896
- } catch (e) {
1897
- console.log(e.message);
1898
- console.log(`please run "./scripts/ninja.js config" first`);
1899
- process.exit(2);
1900
- }
1901
- cp.execSync(`node ${__filename} config`, {
1902
- cwd: __dirname,
1903
- stdio: [0, 1, 2],
1904
- });
1905
- break;
1906
- case "clean":
1907
- try {
1908
- cp.execFileSync(vendorNinjaPath, ["-t", "clean"], {
1909
- encoding: "utf8",
1910
- cwd: jscompDir,
1911
- stdio: [0, 1],
1912
- });
1913
- } catch (e) {}
1914
- cp.execSync(
1915
- `git clean -dfx jscomp ${my_target} lib && rm -rf lib/js/*.js && rm -rf lib/es6/*.js`,
1916
- {
1917
- encoding: "utf8",
1918
- cwd: path.join(__dirname, ".."),
1919
- stdio: [0, 1, 2],
1920
- }
1921
- );
1922
- break;
1923
- case "config":
1924
- console.log(`config for the first time may take a while`);
1925
- updateDev();
1926
- updateRelease();
1927
-
1928
- break;
1929
- case "cleanbuild":
1930
- console.log(`run cleaning first`);
1931
- cp.execSync(`node ${__filename} clean`, {
1932
- cwd: __dirname,
1933
- stdio: [0, 1, 2],
1934
- });
1935
- cp.execSync(`node ${__filename} config`, {
1936
- cwd: __dirname,
1937
- stdio: [0, 1, 2],
1938
- });
1939
- cp.execSync(`node ${__filename} build`, {
1940
- cwd: __dirname,
1941
- stdio: [0, 1, 2],
1942
- });
1943
- break;
1944
- case "docs":
1945
- console.log(`building docs`);
1946
- require("./doc_gen").main();
1947
- break;
1948
- case "help":
1949
- console.log(`supported subcommands:
1950
- [exe] config
1951
- [exe] build
1952
- [exe] cleanbuild
1953
- [exe] docs
1954
- [exe] help
1955
- [exe] clean
1956
- `);
1957
- break;
1958
- default:
1959
- if (process.argv.length === emptyCount) {
1960
- updateDev();
1961
- updateRelease();
1962
- } else {
1963
- var dev = process.argv.includes("-dev");
1964
- var release = process.argv.includes("-release");
1965
- var all = process.argv.includes("-all");
1966
- if (all) {
1967
- updateDev();
1968
- updateRelease();
1969
- } else if (dev) {
1970
- updateDev();
1971
- } else if (release) {
1972
- updateRelease();
1973
- }
1974
- }
1975
- break;
1976
- }
1977
- }
1978
- }
1979
-
1980
- main();