xbintsc 0.1.8 → 0.1.10

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 (93) hide show
  1. package/README.md +12 -7
  2. package/dist/src/binder/binder.d.ts +35 -1
  3. package/dist/src/binder/binder.js +138 -0
  4. package/dist/src/binder/binder.js.map +1 -1
  5. package/dist/src/codegen/generator/calls.d.ts +4 -0
  6. package/dist/src/codegen/generator/calls.js +114 -32
  7. package/dist/src/codegen/generator/calls.js.map +1 -1
  8. package/dist/src/codegen/generator/context.d.ts +2 -0
  9. package/dist/src/codegen/generator/context.js +36 -0
  10. package/dist/src/codegen/generator/context.js.map +1 -1
  11. package/dist/src/codegen/generator/expressions.d.ts +4 -1
  12. package/dist/src/codegen/generator/expressions.js +73 -2
  13. package/dist/src/codegen/generator/expressions.js.map +1 -1
  14. package/dist/src/codegen/generator/module.d.ts +5 -1
  15. package/dist/src/codegen/generator/module.js +107 -6
  16. package/dist/src/codegen/generator/module.js.map +1 -1
  17. package/dist/src/codegen/generator/state.d.ts +2 -0
  18. package/dist/src/codegen/generator/state.js +46 -0
  19. package/dist/src/codegen/generator/state.js.map +1 -1
  20. package/dist/src/codegen/generator/statements.js +9 -1
  21. package/dist/src/codegen/generator/statements.js.map +1 -1
  22. package/dist/src/codegen/generator/tables.d.ts +6 -0
  23. package/dist/src/codegen/generator/tables.js +40 -0
  24. package/dist/src/codegen/generator/tables.js.map +1 -1
  25. package/dist/src/driver/compiler.js +23 -7
  26. package/dist/src/driver/compiler.js.map +1 -1
  27. package/dist/src/driver/modules.d.ts +24 -0
  28. package/dist/src/driver/modules.js +347 -0
  29. package/dist/src/driver/modules.js.map +1 -0
  30. package/dist/src/extensions/node/fs/fs-ops.d.ts +6 -0
  31. package/dist/src/extensions/node/fs/fs-ops.js +18 -0
  32. package/dist/src/extensions/node/fs/fs-ops.js.map +1 -0
  33. package/dist/src/extensions/node/fs/index.d.ts +3 -1
  34. package/dist/src/extensions/node/fs/index.js +11 -3
  35. package/dist/src/extensions/node/fs/index.js.map +1 -1
  36. package/dist/src/extensions/node/fs/write-file.d.ts +5 -0
  37. package/dist/src/extensions/node/fs/write-file.js +8 -0
  38. package/dist/src/extensions/node/fs/write-file.js.map +1 -0
  39. package/dist/src/extensions/node/index.d.ts +2 -1
  40. package/dist/src/extensions/node/index.js +7 -3
  41. package/dist/src/extensions/node/index.js.map +1 -1
  42. package/dist/src/extensions/node/os/index.d.ts +9 -0
  43. package/dist/src/extensions/node/os/index.js +14 -0
  44. package/dist/src/extensions/node/os/index.js.map +1 -0
  45. package/dist/src/extensions/node/path/index.d.ts +10 -0
  46. package/dist/src/extensions/node/path/index.js +15 -0
  47. package/dist/src/extensions/node/path/index.js.map +1 -0
  48. package/dist/src/extensions/node/process/index.d.ts +10 -0
  49. package/dist/src/extensions/node/process/index.js +15 -0
  50. package/dist/src/extensions/node/process/index.js.map +1 -0
  51. package/dist/src/parser/expressions.js +3 -0
  52. package/dist/src/parser/expressions.js.map +1 -1
  53. package/dist/tests/codegen/llvm.test.js +1 -1
  54. package/dist/tests/codegen/llvm.test.js.map +1 -1
  55. package/dist/tests/e2e/compile.test.js +141 -0
  56. package/dist/tests/e2e/compile.test.js.map +1 -1
  57. package/dist/tests/extensions/registry.test.js +9 -3
  58. package/dist/tests/extensions/registry.test.js.map +1 -1
  59. package/package.json +1 -1
  60. package/runtime/ext_node/fs/fs_common.h +166 -0
  61. package/runtime/ext_node/fs/fs_ops.c +342 -0
  62. package/runtime/ext_node/fs/read_file.c +12 -6
  63. package/runtime/ext_node/fs/write_file.c +47 -0
  64. package/runtime/ext_node/os/os.c +165 -0
  65. package/runtime/ext_node/path/path.c +324 -0
  66. package/runtime/ext_node/process/process.c +137 -0
  67. package/runtime/rt.h +61 -4
  68. package/runtime/rt_internal.h +63 -0
  69. package/runtime/xt_builtins.c +47 -1
  70. package/runtime/xt_containers.c +95 -8
  71. package/runtime/xt_io.c +122 -0
  72. package/runtime/xt_promise.c +292 -0
  73. package/runtime/xt_stdlib.c +59 -5
  74. package/runtime/xt_stdlib2.c +1043 -0
  75. package/scripts/build-runtime.mjs +5 -0
  76. package/src/binder/binder.ts +196 -0
  77. package/src/codegen/generator/calls.ts +124 -33
  78. package/src/codegen/generator/context.ts +35 -1
  79. package/src/codegen/generator/expressions.ts +79 -2
  80. package/src/codegen/generator/module.ts +112 -6
  81. package/src/codegen/generator/state.ts +48 -0
  82. package/src/codegen/generator/statements.ts +7 -1
  83. package/src/codegen/generator/tables.ts +43 -0
  84. package/src/driver/compiler.ts +28 -7
  85. package/src/driver/modules.ts +377 -0
  86. package/src/extensions/node/fs/fs-ops.ts +20 -0
  87. package/src/extensions/node/fs/index.ts +11 -3
  88. package/src/extensions/node/fs/write-file.ts +10 -0
  89. package/src/extensions/node/index.ts +7 -3
  90. package/src/extensions/node/os/index.ts +16 -0
  91. package/src/extensions/node/path/index.ts +17 -0
  92. package/src/extensions/node/process/index.ts +17 -0
  93. package/src/parser/expressions.ts +3 -0
@@ -379,7 +379,8 @@ static xt_value xt_string_concat_args(xt_value value, int32_t argc, xt_value *ar
379
379
 
380
380
  /* -- method dispatch ------------------------------------------------------ */
381
381
 
382
- static xt_value xt_array_method(xt_value target, const char *method, int32_t argc, xt_value *argv) {
382
+ static xt_value xt_array_method(xt_value target, const char *method, int32_t argc, xt_value *argv, int *handled) {
383
+ *handled = 1;
383
384
  if (strcmp(method, "push") == 0) {
384
385
  xt_value result = xt_number(0);
385
386
  for (int32_t i = 0; i < argc; i++) result = xt_array_push(target, argv[i]);
@@ -410,10 +411,12 @@ static xt_value xt_array_method(xt_value target, const char *method, int32_t arg
410
411
  }
411
412
  return target;
412
413
  }
414
+ *handled = 0;
413
415
  return XT_UNDEFINED;
414
416
  }
415
417
 
416
- static xt_value xt_string_method(xt_value target, const char *method, int32_t argc, xt_value *argv) {
418
+ static xt_value xt_string_method(xt_value target, const char *method, int32_t argc, xt_value *argv, int *handled) {
419
+ *handled = 1;
417
420
  if (strcmp(method, "charAt") == 0) return xt_string_char_at(target, xt_arg_at(argc, argv, 0));
418
421
  if (strcmp(method, "charCodeAt") == 0) return xt_string_char_code_at(target, xt_arg_at(argc, argv, 0));
419
422
  if (strcmp(method, "indexOf") == 0) return xt_string_index_of(target, xt_arg_at(argc, argv, 0), xt_arg_at(argc, argv, 1));
@@ -430,18 +433,52 @@ static xt_value xt_string_method(xt_value target, const char *method, int32_t ar
430
433
  if (strcmp(method, "startsWith") == 0) return xt_string_starts_with(target, xt_arg_at(argc, argv, 0));
431
434
  if (strcmp(method, "endsWith") == 0) return xt_string_ends_with(target, xt_arg_at(argc, argv, 0));
432
435
  if (strcmp(method, "concat") == 0) return xt_string_concat_args(target, argc, argv);
436
+ *handled = 0;
433
437
  return XT_UNDEFINED;
434
438
  }
435
439
 
436
440
  xt_value xt_call_method(xt_value target, xt_value name, int32_t argc, xt_value *argv) {
437
441
  const char *method = xt_string_data(name);
438
442
  if (!method) return XT_UNDEFINED;
443
+ int handled = 0;
439
444
  if (XT_IS_OBJECT(target)) {
445
+ xt_object *obj = (xt_object *)XT_GET_PTR(target);
446
+ int kind = obj->header.kind;
447
+ if (kind == XT_OBJECT_KIND_PROMISE) {
448
+ xt_value result = xt_promise_method(target, method, argc, argv, &handled);
449
+ if (handled) return result;
450
+ }
451
+ if (kind != XT_OBJECT_KIND_OBJECT && kind != XT_OBJECT_KIND_FUNCTION) {
452
+ xt_value result = xt_ext_container_method(target, method, argc, argv, &handled);
453
+ if (handled) return result;
454
+ }
455
+ xt_value fn = xt_object_get(target, name);
456
+ if (XT_IS_FUNCTION(fn)) return xt_call_with_this(fn, target, argc, argv);
457
+ xt_value result = xt_ext_object_method(target, method, argc, argv, &handled);
458
+ if (handled) return result;
459
+ xt_throw(xt_string_from_cstr("TypeError: target does not have a callable property of that name"));
460
+ return XT_UNDEFINED;
461
+ }
462
+ if (XT_IS_FUNCTION(target)) {
440
463
  xt_value fn = xt_object_get(target, name);
441
- if (XT_IS_FUNCTION(fn)) return xt_closure_call(fn, argc, argv);
464
+ if (XT_IS_FUNCTION(fn)) return xt_call_with_this(fn, target, argc, argv);
465
+ xt_throw(xt_string_from_cstr("TypeError: target does not have a callable property of that name"));
466
+ return XT_UNDEFINED;
467
+ }
468
+ if (XT_IS_ARRAY(target)) {
469
+ xt_value result = xt_ext_array_method(target, method, argc, argv, &handled);
470
+ if (handled) return result;
471
+ return xt_array_method(target, method, argc, argv, &handled);
472
+ }
473
+ if (XT_IS_STRING(target)) {
474
+ xt_value result = xt_ext_string_method(target, method, argc, argv, &handled);
475
+ if (handled) return result;
476
+ return xt_string_method(target, method, argc, argv, &handled);
477
+ }
478
+ if (XT_IS_NUMBER(target)) {
479
+ xt_value result = xt_ext_number_method(target, method, argc, argv, &handled);
480
+ if (handled) return result;
442
481
  }
443
- if (XT_IS_ARRAY(target)) return xt_array_method(target, method, argc, argv);
444
- if (XT_IS_STRING(target)) return xt_string_method(target, method, argc, argv);
445
482
  return XT_UNDEFINED;
446
483
  }
447
484
 
@@ -466,6 +503,23 @@ xt_value xt_math_call(xt_value name, int32_t argc, xt_value *argv) {
466
503
  if (strcmp(fn, "log") == 0) return xt_number(log(a));
467
504
  if (strcmp(fn, "log2") == 0) return xt_number(log2(a));
468
505
  if (strcmp(fn, "log10") == 0) return xt_number(log10(a));
506
+ if (strcmp(fn, "log1p") == 0) return xt_number(log1p(a));
507
+ if (strcmp(fn, "expm1") == 0) return xt_number(expm1(a));
508
+ if (strcmp(fn, "sinh") == 0) return xt_number(sinh(a));
509
+ if (strcmp(fn, "cosh") == 0) return xt_number(cosh(a));
510
+ if (strcmp(fn, "tanh") == 0) return xt_number(tanh(a));
511
+ if (strcmp(fn, "asinh") == 0) return xt_number(asinh(a));
512
+ if (strcmp(fn, "acosh") == 0) return xt_number(acosh(a));
513
+ if (strcmp(fn, "atanh") == 0) return xt_number(atanh(a));
514
+ if (strcmp(fn, "fround") == 0) return xt_number((double)(float)a);
515
+ if (strcmp(fn, "imul") == 0) return xt_number((double)((int32_t)xt_to_int32(xt_arg_at(argc, argv, 0)) * (int32_t)xt_to_int32(xt_arg_at(argc, argv, 1))));
516
+ if (strcmp(fn, "clz32") == 0) {
517
+ uint32_t v = (uint32_t)xt_to_int32(xt_arg_at(argc, argv, 0));
518
+ int count = 0;
519
+ if (v == 0) count = 32;
520
+ else { while (!(v & 0x80000000u)) { v <<= 1; count++; } }
521
+ return xt_number((double)count);
522
+ }
469
523
  if (strcmp(fn, "sin") == 0) return xt_number(sin(a));
470
524
  if (strcmp(fn, "cos") == 0) return xt_number(cos(a));
471
525
  if (strcmp(fn, "tan") == 0) return xt_number(tan(a));