xbintsc 0.2.4 → 0.2.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 (124) hide show
  1. package/dist/src/ast/declarations.d.ts +20 -1
  2. package/dist/src/ast/expressions.d.ts +6 -2
  3. package/dist/src/ast/kinds.d.ts +6 -1
  4. package/dist/src/ast/kinds.js +5 -0
  5. package/dist/src/ast/kinds.js.map +1 -1
  6. package/dist/src/ast/statements.d.ts +2 -1
  7. package/dist/src/binder/binder.js +73 -9
  8. package/dist/src/binder/binder.js.map +1 -1
  9. package/dist/src/cli/main.js +2 -4
  10. package/dist/src/cli/main.js.map +1 -1
  11. package/dist/src/codegen/generator/calls.d.ts +1 -1
  12. package/dist/src/codegen/generator/calls.js +57 -14
  13. package/dist/src/codegen/generator/calls.js.map +1 -1
  14. package/dist/src/codegen/generator/context.d.ts +1 -1
  15. package/dist/src/codegen/generator/expressions.js +39 -3
  16. package/dist/src/codegen/generator/expressions.js.map +1 -1
  17. package/dist/src/codegen/generator/module.js +73 -7
  18. package/dist/src/codegen/generator/module.js.map +1 -1
  19. package/dist/src/codegen/generator/state.js +16 -0
  20. package/dist/src/codegen/generator/state.js.map +1 -1
  21. package/dist/src/codegen/generator/statements.d.ts +4 -1
  22. package/dist/src/codegen/generator/statements.js +141 -10
  23. package/dist/src/codegen/generator/statements.js.map +1 -1
  24. package/dist/src/codegen/generator/tables.d.ts +3 -0
  25. package/dist/src/codegen/generator/tables.js +13 -0
  26. package/dist/src/codegen/generator/tables.js.map +1 -1
  27. package/dist/src/codegen/values.d.ts +18 -11
  28. package/dist/src/codegen/values.js +92 -15
  29. package/dist/src/codegen/values.js.map +1 -1
  30. package/dist/src/diagnostics/source.d.ts +1 -1
  31. package/dist/src/diagnostics/source.js +12 -7
  32. package/dist/src/diagnostics/source.js.map +1 -1
  33. package/dist/src/driver/compiler.d.ts +5 -0
  34. package/dist/src/driver/compiler.js +42 -2
  35. package/dist/src/driver/compiler.js.map +1 -1
  36. package/dist/src/driver/modules.js +29 -4
  37. package/dist/src/driver/modules.js.map +1 -1
  38. package/dist/src/extensions/node/child_process/index.d.ts +7 -0
  39. package/dist/src/extensions/node/child_process/index.js +19 -0
  40. package/dist/src/extensions/node/child_process/index.js.map +1 -0
  41. package/dist/src/extensions/node/crypto/index.d.ts +6 -0
  42. package/dist/src/extensions/node/crypto/index.js +18 -0
  43. package/dist/src/extensions/node/crypto/index.js.map +1 -0
  44. package/dist/src/extensions/node/index.js +6 -0
  45. package/dist/src/extensions/node/index.js.map +1 -1
  46. package/dist/src/extensions/node/module.d.ts +9 -1
  47. package/dist/src/extensions/node/module.js +14 -1
  48. package/dist/src/extensions/node/module.js.map +1 -1
  49. package/dist/src/extensions/node/url/index.d.ts +7 -0
  50. package/dist/src/extensions/node/url/index.js +21 -0
  51. package/dist/src/extensions/node/url/index.js.map +1 -0
  52. package/dist/src/lexer/scanner.js +4 -5
  53. package/dist/src/lexer/scanner.js.map +1 -1
  54. package/dist/src/lexer/token.d.ts +10 -0
  55. package/dist/src/lexer/token.js +69 -0
  56. package/dist/src/lexer/token.js.map +1 -1
  57. package/dist/src/parser/context.js +4 -16
  58. package/dist/src/parser/context.js.map +1 -1
  59. package/dist/src/parser/declarations.d.ts +2 -0
  60. package/dist/src/parser/declarations.js +146 -33
  61. package/dist/src/parser/declarations.js.map +1 -1
  62. package/dist/src/parser/expressions.js +20 -3
  63. package/dist/src/parser/expressions.js.map +1 -1
  64. package/dist/src/parser/helpers.js +2 -0
  65. package/dist/src/parser/helpers.js.map +1 -1
  66. package/dist/src/parser/modules.js +7 -2
  67. package/dist/src/parser/modules.js.map +1 -1
  68. package/dist/src/parser/statements.js +28 -3
  69. package/dist/src/parser/statements.js.map +1 -1
  70. package/dist/src/parser/types.js +5 -0
  71. package/dist/src/parser/types.js.map +1 -1
  72. package/dist/tests/codegen/llvm.test.js +16 -0
  73. package/dist/tests/codegen/llvm.test.js.map +1 -1
  74. package/dist/tests/driver/compiler.test.js +13 -1
  75. package/dist/tests/driver/compiler.test.js.map +1 -1
  76. package/dist/tests/e2e/compile.test.js +57 -0
  77. package/dist/tests/e2e/compile.test.js.map +1 -1
  78. package/dist/tests/parser/parser.test.js +53 -0
  79. package/dist/tests/parser/parser.test.js.map +1 -1
  80. package/package.json +1 -1
  81. package/runtime/ext_node/child_process/child_process.c +213 -0
  82. package/runtime/ext_node/crypto/crypto.c +177 -0
  83. package/runtime/ext_node/process/process.c +37 -3
  84. package/runtime/ext_node/url/url.c +85 -0
  85. package/runtime/rt.h +20 -0
  86. package/runtime/rt_internal.h +11 -0
  87. package/runtime/xt_builtins.c +23 -0
  88. package/runtime/xt_containers.c +136 -10
  89. package/runtime/xt_io.c +53 -0
  90. package/runtime/xt_regex.h +16 -6
  91. package/runtime/xt_stdlib.c +11 -2
  92. package/runtime/xt_stdlib2.c +250 -13
  93. package/runtime/xt_values.c +2 -1
  94. package/src/ast/declarations.ts +26 -1
  95. package/src/ast/expressions.ts +7 -2
  96. package/src/ast/kinds.ts +5 -0
  97. package/src/ast/statements.ts +2 -1
  98. package/src/binder/binder.ts +75 -9
  99. package/src/cli/main.ts +2 -3
  100. package/src/codegen/generator/calls.ts +59 -16
  101. package/src/codegen/generator/context.ts +1 -1
  102. package/src/codegen/generator/expressions.ts +39 -3
  103. package/src/codegen/generator/module.ts +79 -7
  104. package/src/codegen/generator/state.ts +16 -0
  105. package/src/codegen/generator/statements.ts +139 -11
  106. package/src/codegen/generator/tables.ts +14 -0
  107. package/src/codegen/values.ts +85 -16
  108. package/src/diagnostics/source.ts +12 -7
  109. package/src/driver/compiler.ts +44 -2
  110. package/src/driver/modules.ts +28 -3
  111. package/src/extensions/node/child_process/index.ts +24 -0
  112. package/src/extensions/node/crypto/index.ts +23 -0
  113. package/src/extensions/node/index.ts +6 -0
  114. package/src/extensions/node/module.ts +13 -1
  115. package/src/extensions/node/url/index.ts +26 -0
  116. package/src/lexer/scanner.ts +4 -4
  117. package/src/lexer/token.ts +73 -0
  118. package/src/parser/context.ts +4 -15
  119. package/src/parser/declarations.ts +140 -29
  120. package/src/parser/expressions.ts +20 -4
  121. package/src/parser/helpers.ts +2 -0
  122. package/src/parser/modules.ts +7 -2
  123. package/src/parser/statements.ts +27 -3
  124. package/src/parser/types.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../tests/parser/parser.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../tests/parser/parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,wBAAwB,CAAC;AAE7E,uDAAuD;AACvD,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAe,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACrF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,SAAS,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,8BAA8B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACjG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,2BAA2B;SACvC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,UAAU,CAAC,cAAc;YACzB,UAAU,CAAC,cAAc;YACzB,UAAU,CAAC,aAAa;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,UAAU,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACvE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/E,UAAU,CAAC,gBAAgB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvF,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,GAAG,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/E,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;QAE1D,MAAM,MAAM,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAC/F,UAAU,CAAC,wBAAwB,CACpC,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CACxF,UAAU,CAAC,wBAAwB,CACpC,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CACtF,UAAU,CAAC,iBAAiB,CAC7B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAC/F,UAAU,CAAC,YAAY,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,GAAG,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACpE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xbintsc",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "xbintsc - a TypeScript binary compiler (TypeScript -> LLVM IR -> native binary)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -0,0 +1,213 @@
1
+ /*
2
+ * Node.js `child_process` module for xbintsc.
3
+ *
4
+ * Implements the synchronous `spawnSync(command, args, options)` surface the
5
+ * compiler uses to shell out to clang:
6
+ *
7
+ * const result = spawnSync("clang", ["--version"], { cwd, encoding: "utf8" });
8
+ * result.status / result.stdout / result.stderr
9
+ *
10
+ * `options.cwd` is honoured; stdout/stderr are always captured as UTF-8
11
+ * strings. On Windows the process is run with `_spawnvp` and redirected
12
+ * through temporary files (which also avoids pipe-buffer deadlocks).
13
+ */
14
+
15
+ #include "rt.h"
16
+
17
+ #include <stdio.h>
18
+ #include <stdlib.h>
19
+ #include <string.h>
20
+
21
+ #if defined(_WIN32)
22
+ #include <direct.h>
23
+ #include <fcntl.h>
24
+ #include <io.h>
25
+ #include <process.h>
26
+ #else
27
+ #include <poll.h>
28
+ #include <sys/wait.h>
29
+ #include <unistd.h>
30
+ #endif
31
+
32
+ static char *build_argv(const char *command, xt_value args, int *out_count) {
33
+ int32_t count = XT_IS_ARRAY(args) ? xt_array_size(args) : 0;
34
+ xt_value *items = XT_IS_ARRAY(args) ? xt_array_items(args) : NULL;
35
+ char **argv = (char **)malloc(sizeof(char *) * (size_t)(count + 2));
36
+ if (!argv) {
37
+ *out_count = 0;
38
+ return NULL;
39
+ }
40
+ argv[0] = (char *)command;
41
+ for (int32_t i = 0; i < count; i++) argv[i + 1] = (char *)xt_string_data(xt_to_string(items[i]));
42
+ argv[count + 1] = NULL;
43
+ *out_count = count + 1;
44
+ return (char *)argv;
45
+ }
46
+
47
+ static const char *option_cwd(xt_value options) {
48
+ if (!XT_IS_OBJECT(options)) return NULL;
49
+ xt_value cwd = xt_object_get(options, xt_string_from_cstr("cwd"));
50
+ if (!cwd || !XT_IS_STRING(cwd)) return NULL;
51
+ return xt_string_data(cwd);
52
+ }
53
+
54
+ static xt_value make_result(double status, const char *out, const char *err) {
55
+ xt_value result = xt_object_new();
56
+ xt_set(result, xt_string_from_cstr("status"), xt_number(status));
57
+ xt_set(result, xt_string_from_cstr("stdout"), xt_string_from_cstr(out ? out : ""));
58
+ xt_set(result, xt_string_from_cstr("stderr"), xt_string_from_cstr(err ? err : ""));
59
+ return result;
60
+ }
61
+
62
+ #if defined(_WIN32)
63
+
64
+ static char *read_temp(FILE *file) {
65
+ fflush(file);
66
+ if (_fseeki64(file, 0, SEEK_END) != 0) return NULL;
67
+ long long size = _ftelli64(file);
68
+ if (size < 0) return NULL;
69
+ _fseeki64(file, 0, SEEK_SET);
70
+ char *buffer = (char *)malloc((size_t)size + 1);
71
+ if (!buffer) return NULL;
72
+ size_t read = fread(buffer, 1, (size_t)size, file);
73
+ buffer[read] = 0;
74
+ return buffer;
75
+ }
76
+
77
+ xt_value xt_child_process_spawn_sync(int32_t argc, xt_value *argv) {
78
+ const char *command = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : NULL;
79
+ if (!command) command = "";
80
+ xt_value args = argc > 1 ? argv[1] : XT_UNDEFINED;
81
+ const char *cwd = argc > 2 ? option_cwd(argv[2]) : NULL;
82
+
83
+ int count = 0;
84
+ char **child_argv = (char **)build_argv(command, args, &count);
85
+ if (!child_argv) return make_result(-1, "", "out of memory");
86
+
87
+ FILE *out_file = tmpfile();
88
+ FILE *err_file = tmpfile();
89
+ if (!out_file || !err_file) {
90
+ free(child_argv);
91
+ if (out_file) fclose(out_file);
92
+ if (err_file) fclose(err_file);
93
+ return make_result(-1, "", "could not create temporary files");
94
+ }
95
+
96
+ int saved_out = _dup(_fileno(stdout));
97
+ int saved_err = _dup(_fileno(stderr));
98
+ _dup2(_fileno(out_file), _fileno(stdout));
99
+ _dup2(_fileno(err_file), _fileno(stderr));
100
+
101
+ char previous[4096];
102
+ int had_cwd = cwd && _getcwd(previous, sizeof(previous)) != NULL;
103
+ if (cwd) _chdir(cwd);
104
+ intptr_t rc = _spawnvp(_P_WAIT, command, (const char *const *)child_argv);
105
+ if (had_cwd) _chdir(previous);
106
+
107
+ fflush(stdout);
108
+ fflush(stderr);
109
+ _dup2(saved_out, _fileno(stdout));
110
+ _dup2(saved_err, _fileno(stderr));
111
+ _close(saved_out);
112
+ _close(saved_err);
113
+
114
+ char *out = read_temp(out_file);
115
+ char *err = read_temp(err_file);
116
+ fclose(out_file);
117
+ fclose(err_file);
118
+ free(child_argv);
119
+
120
+ xt_value result = make_result(rc < 0 ? -1 : (double)rc, out, err);
121
+ free(out);
122
+ free(err);
123
+ return result;
124
+ }
125
+
126
+ #else
127
+
128
+ static void append_chunk(char **buffer, size_t *length, size_t *capacity, const char *chunk, size_t count) {
129
+ if (*length + count + 1 > *capacity) {
130
+ size_t next = *capacity ? *capacity * 2 : 4096;
131
+ while (next < *length + count + 1) next *= 2;
132
+ char *grown = (char *)realloc(*buffer, next);
133
+ if (!grown) return;
134
+ *buffer = grown;
135
+ *capacity = next;
136
+ }
137
+ memcpy(*buffer + *length, chunk, count);
138
+ *length += count;
139
+ (*buffer)[*length] = 0;
140
+ }
141
+
142
+ xt_value xt_child_process_spawn_sync(int32_t argc, xt_value *argv) {
143
+ const char *command = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : NULL;
144
+ if (!command) command = "";
145
+ xt_value args = argc > 1 ? argv[1] : XT_UNDEFINED;
146
+ const char *cwd = argc > 2 ? option_cwd(argv[2]) : NULL;
147
+
148
+ int count = 0;
149
+ char **child_argv = (char **)build_argv(command, args, &count);
150
+ if (!child_argv) return make_result(-1, "", "out of memory");
151
+
152
+ int out_pipe[2];
153
+ int err_pipe[2];
154
+ if (pipe(out_pipe) != 0 || pipe(err_pipe) != 0) {
155
+ free(child_argv);
156
+ return make_result(-1, "", "could not create pipes");
157
+ }
158
+
159
+ pid_t pid = fork();
160
+ if (pid == 0) {
161
+ dup2(out_pipe[1], STDOUT_FILENO);
162
+ dup2(err_pipe[1], STDERR_FILENO);
163
+ close(out_pipe[0]);
164
+ close(out_pipe[1]);
165
+ close(err_pipe[0]);
166
+ close(err_pipe[1]);
167
+ if (cwd) chdir(cwd);
168
+ execvp(command, child_argv);
169
+ _exit(127);
170
+ }
171
+ close(out_pipe[1]);
172
+ close(err_pipe[1]);
173
+
174
+ int fds[2] = {out_pipe[0], err_pipe[0]};
175
+ char *buffers[2] = {NULL, NULL};
176
+ size_t lengths[2] = {0, 0};
177
+ size_t capacities[2] = {0, 0};
178
+ int live = 2;
179
+ while (live > 0) {
180
+ struct pollfd poll_fds[2];
181
+ poll_fds[0].fd = fds[0];
182
+ poll_fds[0].events = POLLIN;
183
+ poll_fds[0].revents = 0;
184
+ poll_fds[1].fd = fds[1];
185
+ poll_fds[1].events = POLLIN;
186
+ poll_fds[1].revents = 0;
187
+ if (poll(poll_fds, 2, -1) < 0) break;
188
+ for (int i = 0; i < 2; i++) {
189
+ if (fds[i] < 0 || !(poll_fds[i].revents & (POLLIN | POLLHUP | POLLERR))) continue;
190
+ char chunk[4096];
191
+ ssize_t got = read(fds[i], chunk, sizeof(chunk));
192
+ if (got > 0) {
193
+ append_chunk(&buffers[i], &lengths[i], &capacities[i], chunk, (size_t)got);
194
+ } else if (got == 0) {
195
+ close(fds[i]);
196
+ fds[i] = -1;
197
+ live--;
198
+ }
199
+ }
200
+ }
201
+
202
+ int status = 0;
203
+ waitpid(pid, &status, 0);
204
+ double exit_code = WIFEXITED(status) ? (double)WEXITSTATUS(status) : -1.0;
205
+
206
+ xt_value result = make_result(exit_code, buffers[0], buffers[1]);
207
+ free(buffers[0]);
208
+ free(buffers[1]);
209
+ free(child_argv);
210
+ return result;
211
+ }
212
+
213
+ #endif
@@ -0,0 +1,177 @@
1
+ /*
2
+ * Node.js `crypto` module for xbintsc (self-contained SHA-256).
3
+ *
4
+ * Implements the common hashing surface:
5
+ * const hash = createHash("sha256").update(data).digest("hex");
6
+ *
7
+ * A hash object is a plain object exposing `update` / `digest` as function
8
+ * properties. Because the generic method dispatcher calls those with the hash
9
+ * object as `this`, `update` can accumulate input and `digest` can finalize it
10
+ * without any special object kind in the core runtime.
11
+ */
12
+
13
+ #include "rt.h"
14
+
15
+ #include <stdint.h>
16
+ #include <stdio.h>
17
+ #include <string.h>
18
+
19
+ /* -- SHA-256 -------------------------------------------------------------- */
20
+
21
+ typedef struct {
22
+ uint32_t state[8];
23
+ uint64_t bitlen;
24
+ uint8_t buffer[64];
25
+ size_t buffer_length;
26
+ } sha256_ctx;
27
+
28
+ static const uint32_t sha256_k[64] = {
29
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
30
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
31
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
32
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
34
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
35
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
36
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
37
+ };
38
+
39
+ #define SHA256_ROTR(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
40
+
41
+ static void sha256_init(sha256_ctx *ctx) {
42
+ ctx->state[0] = 0x6a09e667;
43
+ ctx->state[1] = 0xbb67ae85;
44
+ ctx->state[2] = 0x3c6ef372;
45
+ ctx->state[3] = 0xa54ff53a;
46
+ ctx->state[4] = 0x510e527f;
47
+ ctx->state[5] = 0x9b05688c;
48
+ ctx->state[6] = 0x1f83d9ab;
49
+ ctx->state[7] = 0x5be0cd19;
50
+ ctx->bitlen = 0;
51
+ ctx->buffer_length = 0;
52
+ }
53
+
54
+ static void sha256_compress(sha256_ctx *ctx, const uint8_t *block) {
55
+ uint32_t w[64];
56
+ for (int i = 0; i < 16; i++) {
57
+ w[i] = ((uint32_t)block[i * 4] << 24) | ((uint32_t)block[i * 4 + 1] << 16) |
58
+ ((uint32_t)block[i * 4 + 2] << 8) | ((uint32_t)block[i * 4 + 3]);
59
+ }
60
+ for (int i = 16; i < 64; i++) {
61
+ uint32_t s0 = SHA256_ROTR(w[i - 15], 7) ^ SHA256_ROTR(w[i - 15], 18) ^ (w[i - 15] >> 3);
62
+ uint32_t s1 = SHA256_ROTR(w[i - 2], 17) ^ SHA256_ROTR(w[i - 2], 19) ^ (w[i - 2] >> 10);
63
+ w[i] = w[i - 16] + s0 + w[i - 7] + s1;
64
+ }
65
+ uint32_t a = ctx->state[0], b = ctx->state[1], c = ctx->state[2], d = ctx->state[3];
66
+ uint32_t e = ctx->state[4], f = ctx->state[5], g = ctx->state[6], h = ctx->state[7];
67
+ for (int i = 0; i < 64; i++) {
68
+ uint32_t s1 = SHA256_ROTR(e, 6) ^ SHA256_ROTR(e, 11) ^ SHA256_ROTR(e, 25);
69
+ uint32_t ch = (e & f) ^ ((~e) & g);
70
+ uint32_t temp1 = h + s1 + ch + sha256_k[i] + w[i];
71
+ uint32_t s0 = SHA256_ROTR(a, 2) ^ SHA256_ROTR(a, 13) ^ SHA256_ROTR(a, 22);
72
+ uint32_t maj = (a & b) ^ (a & c) ^ (b & c);
73
+ uint32_t temp2 = s0 + maj;
74
+ h = g;
75
+ g = f;
76
+ f = e;
77
+ e = d + temp1;
78
+ d = c;
79
+ c = b;
80
+ b = a;
81
+ a = temp1 + temp2;
82
+ }
83
+ ctx->state[0] += a;
84
+ ctx->state[1] += b;
85
+ ctx->state[2] += c;
86
+ ctx->state[3] += d;
87
+ ctx->state[4] += e;
88
+ ctx->state[5] += f;
89
+ ctx->state[6] += g;
90
+ ctx->state[7] += h;
91
+ }
92
+
93
+ static void sha256_update(sha256_ctx *ctx, const uint8_t *data, size_t length) {
94
+ for (size_t i = 0; i < length; i++) {
95
+ ctx->buffer[ctx->buffer_length++] = data[i];
96
+ if (ctx->buffer_length == 64) {
97
+ sha256_compress(ctx, ctx->buffer);
98
+ ctx->bitlen += 512;
99
+ ctx->buffer_length = 0;
100
+ }
101
+ }
102
+ }
103
+
104
+ static void sha256_final(sha256_ctx *ctx, uint8_t *out) {
105
+ size_t i = ctx->buffer_length;
106
+ ctx->buffer[i++] = 0x80;
107
+ if (i > 56) {
108
+ while (i < 64) ctx->buffer[i++] = 0;
109
+ sha256_compress(ctx, ctx->buffer);
110
+ i = 0;
111
+ }
112
+ while (i < 56) ctx->buffer[i++] = 0;
113
+ ctx->bitlen += (uint64_t)ctx->buffer_length * 8;
114
+ for (int j = 0; j < 8; j++) ctx->buffer[56 + j] = (uint8_t)(ctx->bitlen >> (56 - j * 8));
115
+ sha256_compress(ctx, ctx->buffer);
116
+ for (int j = 0; j < 8; j++) {
117
+ out[j * 4] = (uint8_t)(ctx->state[j] >> 24);
118
+ out[j * 4 + 1] = (uint8_t)(ctx->state[j] >> 16);
119
+ out[j * 4 + 2] = (uint8_t)(ctx->state[j] >> 8);
120
+ out[j * 4 + 3] = (uint8_t)(ctx->state[j]);
121
+ }
122
+ }
123
+
124
+ static void sha256_hash(const uint8_t *data, size_t length, uint8_t *out) {
125
+ sha256_ctx ctx;
126
+ sha256_init(&ctx);
127
+ sha256_update(&ctx, data, length);
128
+ sha256_final(&ctx, out);
129
+ }
130
+
131
+ /* -- node:crypto surface -------------------------------------------------- */
132
+
133
+ static xt_value hash_data(xt_value hash) {
134
+ xt_value data = xt_object_get(hash, xt_string_from_cstr("_data"));
135
+ if (!data) return xt_string_from_cstr("");
136
+ return data;
137
+ }
138
+
139
+ static xt_value xt_hash_update(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
140
+ (void)env;
141
+ if (XT_IS_OBJECT(thisValue) && argc > 0) {
142
+ xt_value combined = xt_add(hash_data(thisValue), xt_to_string(argv[0]));
143
+ xt_set(thisValue, xt_string_from_cstr("_data"), combined);
144
+ }
145
+ return thisValue;
146
+ }
147
+
148
+ static xt_value xt_hash_digest(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
149
+ (void)env;
150
+ const char *text = xt_string_data(xt_to_string(hash_data(thisValue)));
151
+ if (!text) text = "";
152
+ uint8_t out[32];
153
+ sha256_hash((const uint8_t *)text, strlen(text), out);
154
+ const char *encoding = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : "hex";
155
+ if (!encoding || strcmp(encoding, "hex") == 0) {
156
+ static const char digits[] = "0123456789abcdef";
157
+ char hex[65];
158
+ for (int i = 0; i < 32; i++) {
159
+ hex[i * 2] = digits[out[i] >> 4];
160
+ hex[i * 2 + 1] = digits[out[i] & 0xf];
161
+ }
162
+ hex[64] = 0;
163
+ return xt_string_from_cstr(hex);
164
+ }
165
+ return xt_string_from_cstr("");
166
+ }
167
+
168
+ xt_value xt_crypto_create_hash(int32_t argc, xt_value *argv) {
169
+ const char *algorithm = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : "sha256";
170
+ if (!algorithm) algorithm = "sha256";
171
+ xt_value hash = xt_object_new();
172
+ xt_set(hash, xt_string_from_cstr("_algorithm"), xt_string_from_cstr(algorithm));
173
+ xt_set(hash, xt_string_from_cstr("_data"), xt_string_from_cstr(""));
174
+ xt_set(hash, xt_string_from_cstr("update"), xt_closure_new((void *)xt_hash_update, 0, NULL));
175
+ xt_set(hash, xt_string_from_cstr("digest"), xt_closure_new((void *)xt_hash_digest, 0, NULL));
176
+ return hash;
177
+ }
@@ -71,10 +71,14 @@ static xt_value xt_process_env(void) {
71
71
  static xt_value xt_process_argv(void) {
72
72
  int32_t count = xt_program_argc;
73
73
  if (count <= 0 || !xt_program_argv) return xt_array_new(0, NULL);
74
- xt_value *items = (xt_value *)malloc(sizeof(xt_value) * (size_t)count);
74
+ /* Node semantics: `[execPath, scriptPath, ...args]`. A standalone binary is
75
+ both the executable and the script, so the executable path is repeated;
76
+ user arguments therefore start at index 2, matching `node script.js a b`. */
77
+ xt_value *items = (xt_value *)malloc(sizeof(xt_value) * (size_t)(count + 1));
75
78
  if (!items) return xt_array_new(0, NULL);
76
- for (int32_t i = 0; i < count; i++) items[i] = xt_string_from_cstr(xt_program_argv[i]);
77
- xt_value result = xt_array_new(count, items);
79
+ items[0] = xt_string_from_cstr(xt_program_argv[0]);
80
+ for (int32_t i = 0; i < count; i++) items[i + 1] = xt_string_from_cstr(xt_program_argv[i]);
81
+ xt_value result = xt_array_new(count + 1, items);
78
82
  free(items);
79
83
  return result;
80
84
  }
@@ -128,10 +132,40 @@ xt_value xt_process_call(xt_value name, int32_t argc, xt_value *argv) {
128
132
  return xt_undefined();
129
133
  }
130
134
 
135
+ static xt_value xt_stdout_write(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
136
+ (void)thisValue;
137
+ (void)env;
138
+ if (argc > 0) {
139
+ const char *text = xt_string_data(xt_to_string(argv[0]));
140
+ if (text) fputs(text, stdout);
141
+ fflush(stdout);
142
+ }
143
+ return xt_bool(1);
144
+ }
145
+
146
+ static xt_value xt_stderr_write(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
147
+ (void)thisValue;
148
+ (void)env;
149
+ if (argc > 0) {
150
+ const char *text = xt_string_data(xt_to_string(argv[0]));
151
+ if (text) fputs(text, stderr);
152
+ fflush(stderr);
153
+ }
154
+ return xt_bool(1);
155
+ }
156
+
157
+ static xt_value xt_process_stream(void *write_fn) {
158
+ xt_value stream = xt_object_new();
159
+ xt_set(stream, xt_string_from_cstr("write"), xt_closure_new(write_fn, 0, NULL));
160
+ return stream;
161
+ }
162
+
131
163
  xt_value xt_process_get(xt_value name) {
132
164
  const char *key = xt_string_data(name);
133
165
  if (!key) return xt_undefined();
134
166
 
167
+ if (strcmp(key, "stdout") == 0) return xt_process_stream((void *)xt_stdout_write);
168
+ if (strcmp(key, "stderr") == 0) return xt_process_stream((void *)xt_stderr_write);
135
169
  if (strcmp(key, "platform") == 0) return xt_string_from_cstr(xt_process_platform());
136
170
  if (strcmp(key, "arch") == 0) return xt_string_from_cstr(xt_process_arch());
137
171
  if (strcmp(key, "pid") == 0) return xt_number((double)xt_getpid());
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Node.js `url` module for xbintsc.
3
+ *
4
+ * Implements the two helpers the compiler itself relies on:
5
+ * - `pathToFileURL(path)` -> URL object with an `href` property
6
+ * - `fileURLToPath(url)` -> filesystem path
7
+ *
8
+ * Both accept the `file://` scheme and percent-encoded URLs. On Windows a
9
+ * leading slash before a drive letter (`/C:/`) is removed, matching Node.
10
+ */
11
+
12
+ #include "rt.h"
13
+
14
+ #include <ctype.h>
15
+ #include <stdlib.h>
16
+ #include <string.h>
17
+
18
+ static int url_hex(int c) {
19
+ if (c >= '0' && c <= '9') return c - '0';
20
+ if (c >= 'a' && c <= 'f') return c - 'a' + 10;
21
+ if (c >= 'A' && c <= 'F') return c - 'A' + 10;
22
+ return -1;
23
+ }
24
+
25
+ static xt_value url_percent_decode(const char *in) {
26
+ size_t length = strlen(in);
27
+ char *out = (char *)malloc(length + 1);
28
+ if (!out) return xt_string_from_cstr(in);
29
+ size_t j = 0;
30
+ for (size_t i = 0; i < length; i++) {
31
+ if (in[i] == '%' && i + 2 < length && url_hex(in[i + 1]) >= 0 && url_hex(in[i + 2]) >= 0) {
32
+ out[j++] = (char)((url_hex(in[i + 1]) << 4) | url_hex(in[i + 2]));
33
+ i += 2;
34
+ } else {
35
+ out[j++] = in[i];
36
+ }
37
+ }
38
+ out[j] = 0;
39
+ xt_value result = xt_string_from_cstr(out);
40
+ free(out);
41
+ return result;
42
+ }
43
+
44
+ xt_value xt_url_path_to_file_url(int32_t argc, xt_value *argv) {
45
+ const char *raw = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : "";
46
+ if (!raw) raw = "";
47
+ /* Resolve to an absolute path so the URL is comparable to `import.meta.url`
48
+ (which is built from realpath) even when given a relative path. */
49
+ char resolved[4096];
50
+ const char *path = raw;
51
+ #if defined(_WIN32)
52
+ if (_fullpath(resolved, raw, sizeof(resolved))) path = resolved;
53
+ #else
54
+ if (realpath(raw, resolved)) path = resolved;
55
+ #endif
56
+ char href[4300];
57
+ size_t j = 0;
58
+ const char *prefix = "file://";
59
+ for (; *prefix && j < sizeof(href) - 1; prefix++) href[j++] = *prefix;
60
+ #if defined(_WIN32)
61
+ if (j < sizeof(href) - 1) href[j++] = '/';
62
+ #endif
63
+ for (const char *p = path; *p && j < sizeof(href) - 1; p++) href[j++] = (*p == '\\') ? '/' : *p;
64
+ href[j] = 0;
65
+
66
+ xt_value url = xt_object_new();
67
+ xt_set(url, xt_string_from_cstr("href"), xt_string_from_cstr(href));
68
+ xt_set(url, xt_string_from_cstr("protocol"), xt_string_from_cstr("file:"));
69
+ xt_set(url, xt_string_from_cstr("pathname"), xt_string_from_cstr(path));
70
+ return url;
71
+ }
72
+
73
+ xt_value xt_url_file_url_to_path(int32_t argc, xt_value *argv) {
74
+ const char *url = argc > 0 ? xt_string_data(xt_to_string(argv[0])) : "";
75
+ const char *path = url;
76
+ if (strncmp(url, "file://", 7) == 0) {
77
+ path = url + 7;
78
+ /* `file://localhost/...` is equivalent to `file:///...`. */
79
+ if (strncmp(path, "localhost", 9) == 0) path += 9;
80
+ }
81
+ #if defined(_WIN32)
82
+ if (path[0] == '/' && isalpha((unsigned char)path[1]) && path[2] == ':') path++;
83
+ #endif
84
+ return url_percent_decode(path);
85
+ }
package/runtime/rt.h CHANGED
@@ -147,6 +147,9 @@ xt_value xt_object_new_with_proto(xt_value proto);
147
147
  xt_value xt_object_get(xt_value obj, xt_value key);
148
148
  xt_value xt_object_get_prototype(xt_value obj);
149
149
  xt_value xt_object_set_prototype(xt_value obj, xt_value proto);
150
+ /** Define `get name()` / `set name(v)` accessors on an object. */
151
+ xt_value xt_object_define_getter(xt_value obj, xt_value key, xt_value getter);
152
+ xt_value xt_object_define_setter(xt_value obj, xt_value key, xt_value setter);
150
153
  xt_value xt_object_freeze(xt_value obj);
151
154
  int xt_object_is_frozen(xt_value obj);
152
155
  xt_value xt_object_from_entries(xt_value entries);
@@ -182,6 +185,16 @@ xt_value xt_date_ctor(int32_t argc, xt_value *argv);
182
185
  xt_value xt_date_static(xt_value name, int32_t argc, xt_value *argv);
183
186
  xt_value xt_regexp_ctor(int32_t argc, xt_value *argv);
184
187
 
188
+ /* -- node:url ------------------------------------------------------------- */
189
+ xt_value xt_url_path_to_file_url(int32_t argc, xt_value *argv);
190
+ xt_value xt_url_file_url_to_path(int32_t argc, xt_value *argv);
191
+
192
+ /* -- node:crypto ---------------------------------------------------------- */
193
+ xt_value xt_crypto_create_hash(int32_t argc, xt_value *argv);
194
+
195
+ /* -- node:child_process --------------------------------------------------- */
196
+ xt_value xt_child_process_spawn_sync(int32_t argc, xt_value *argv);
197
+
185
198
  /* -- promises / async ----------------------------------------------------- */
186
199
  xt_value xt_promise_resolve(xt_value value);
187
200
  xt_value xt_promise_reject(xt_value value);
@@ -223,6 +236,7 @@ xt_value xt_rest_args(int32_t argc, xt_value *argv, int32_t start);
223
236
  /* -- program arguments ---------------------------------------------------- */
224
237
  /* Captured from `main` so host extensions can expose `process.argv`. */
225
238
  void xt_set_program_args(int32_t argc, char **argv);
239
+ xt_value xt_import_meta(xt_value name);
226
240
  extern int32_t xt_program_argc;
227
241
  extern char **xt_program_argv;
228
242
 
@@ -233,6 +247,12 @@ xt_value xt_array_set(xt_value arr, xt_value index, xt_value value);
233
247
  xt_value xt_array_push(xt_value arr, xt_value value);
234
248
  xt_value xt_array_length(xt_value arr);
235
249
  xt_value xt_array_spread(xt_value target, xt_value source);
250
+ int32_t xt_array_size(xt_value value);
251
+ xt_value *xt_array_items(xt_value value);
252
+
253
+ /* `for...of` iteration: dispatch over arrays, strings, Maps and Sets. */
254
+ xt_value xt_iter_length(xt_value value);
255
+ xt_value xt_iter_value(xt_value value, xt_value index);
236
256
 
237
257
  /* -- generic member access ------------------------------------------------ */
238
258
  xt_value xt_get(xt_value target, xt_value key);
@@ -66,6 +66,10 @@ typedef struct {
66
66
  typedef struct {
67
67
  xt_string *key;
68
68
  xt_value value;
69
+ /* Accessor properties (`get x()` / `set x(v)`) store the functions here;
70
+ * when set, `value` is ignored and property access invokes the getter. */
71
+ xt_value getter;
72
+ xt_value setter;
69
73
  } xt_property;
70
74
 
71
75
  typedef struct {
@@ -120,8 +124,15 @@ int xt_is_map(xt_value value);
120
124
  int xt_is_set(xt_value value);
121
125
  int xt_is_date(xt_value value);
122
126
  int xt_is_regexp(xt_value value);
127
+ int xt_regexp_find(xt_value regexp, xt_value input, int32_t start, int32_t *matchStart, int32_t *matchEnd);
128
+ xt_value xt_regexp_exec(xt_value regexp, xt_value input);
129
+ xt_value xt_regexp_replace(xt_value value, xt_value regexp, xt_value replacement);
130
+ xt_value xt_regexp_get_property(xt_value regexp, xt_value key);
123
131
  int32_t xt_map_size(xt_value value);
124
132
  int32_t xt_set_size(xt_value value);
133
+ /* `for...of` iteration: dispatch over arrays, strings, Maps and Sets. */
134
+ xt_value xt_iter_length(xt_value value);
135
+ xt_value xt_iter_value(xt_value value, xt_value index);
125
136
 
126
137
  /* -- collection / date / regexp representations --------------------------- */
127
138
  typedef struct {