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.
- package/README.md +12 -7
- package/dist/src/binder/binder.d.ts +35 -1
- package/dist/src/binder/binder.js +138 -0
- package/dist/src/binder/binder.js.map +1 -1
- package/dist/src/codegen/generator/calls.d.ts +4 -0
- package/dist/src/codegen/generator/calls.js +114 -32
- package/dist/src/codegen/generator/calls.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +2 -0
- package/dist/src/codegen/generator/context.js +36 -0
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/expressions.d.ts +4 -1
- package/dist/src/codegen/generator/expressions.js +73 -2
- package/dist/src/codegen/generator/expressions.js.map +1 -1
- package/dist/src/codegen/generator/module.d.ts +5 -1
- package/dist/src/codegen/generator/module.js +107 -6
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/state.d.ts +2 -0
- package/dist/src/codegen/generator/state.js +46 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements.js +9 -1
- package/dist/src/codegen/generator/statements.js.map +1 -1
- package/dist/src/codegen/generator/tables.d.ts +6 -0
- package/dist/src/codegen/generator/tables.js +40 -0
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/compiler.js +23 -7
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/modules.d.ts +24 -0
- package/dist/src/driver/modules.js +347 -0
- package/dist/src/driver/modules.js.map +1 -0
- package/dist/src/extensions/node/fs/fs-ops.d.ts +6 -0
- package/dist/src/extensions/node/fs/fs-ops.js +18 -0
- package/dist/src/extensions/node/fs/fs-ops.js.map +1 -0
- package/dist/src/extensions/node/fs/index.d.ts +3 -1
- package/dist/src/extensions/node/fs/index.js +11 -3
- package/dist/src/extensions/node/fs/index.js.map +1 -1
- package/dist/src/extensions/node/fs/write-file.d.ts +5 -0
- package/dist/src/extensions/node/fs/write-file.js +8 -0
- package/dist/src/extensions/node/fs/write-file.js.map +1 -0
- package/dist/src/extensions/node/index.d.ts +2 -1
- package/dist/src/extensions/node/index.js +7 -3
- package/dist/src/extensions/node/index.js.map +1 -1
- package/dist/src/extensions/node/os/index.d.ts +9 -0
- package/dist/src/extensions/node/os/index.js +14 -0
- package/dist/src/extensions/node/os/index.js.map +1 -0
- package/dist/src/extensions/node/path/index.d.ts +10 -0
- package/dist/src/extensions/node/path/index.js +15 -0
- package/dist/src/extensions/node/path/index.js.map +1 -0
- package/dist/src/extensions/node/process/index.d.ts +10 -0
- package/dist/src/extensions/node/process/index.js +15 -0
- package/dist/src/extensions/node/process/index.js.map +1 -0
- package/dist/src/parser/expressions.js +3 -0
- package/dist/src/parser/expressions.js.map +1 -1
- package/dist/tests/codegen/llvm.test.js +1 -1
- package/dist/tests/codegen/llvm.test.js.map +1 -1
- package/dist/tests/e2e/compile.test.js +141 -0
- package/dist/tests/e2e/compile.test.js.map +1 -1
- package/dist/tests/extensions/registry.test.js +9 -3
- package/dist/tests/extensions/registry.test.js.map +1 -1
- package/package.json +1 -1
- package/runtime/ext_node/fs/fs_common.h +166 -0
- package/runtime/ext_node/fs/fs_ops.c +342 -0
- package/runtime/ext_node/fs/read_file.c +12 -6
- package/runtime/ext_node/fs/write_file.c +47 -0
- package/runtime/ext_node/os/os.c +165 -0
- package/runtime/ext_node/path/path.c +324 -0
- package/runtime/ext_node/process/process.c +137 -0
- package/runtime/rt.h +61 -4
- package/runtime/rt_internal.h +63 -0
- package/runtime/xt_builtins.c +47 -1
- package/runtime/xt_containers.c +95 -8
- package/runtime/xt_io.c +122 -0
- package/runtime/xt_promise.c +292 -0
- package/runtime/xt_stdlib.c +59 -5
- package/runtime/xt_stdlib2.c +1043 -0
- package/scripts/build-runtime.mjs +5 -0
- package/src/binder/binder.ts +196 -0
- package/src/codegen/generator/calls.ts +124 -33
- package/src/codegen/generator/context.ts +35 -1
- package/src/codegen/generator/expressions.ts +79 -2
- package/src/codegen/generator/module.ts +112 -6
- package/src/codegen/generator/state.ts +48 -0
- package/src/codegen/generator/statements.ts +7 -1
- package/src/codegen/generator/tables.ts +43 -0
- package/src/driver/compiler.ts +28 -7
- package/src/driver/modules.ts +377 -0
- package/src/extensions/node/fs/fs-ops.ts +20 -0
- package/src/extensions/node/fs/index.ts +11 -3
- package/src/extensions/node/fs/write-file.ts +10 -0
- package/src/extensions/node/index.ts +7 -3
- package/src/extensions/node/os/index.ts +16 -0
- package/src/extensions/node/path/index.ts +17 -0
- package/src/extensions/node/process/index.ts +17 -0
- package/src/parser/expressions.ts +3 -0
package/runtime/xt_stdlib.c
CHANGED
|
@@ -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
|
|
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));
|