@kumikijs/compiler 0.2.0 → 0.2.1
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/dist/index.js +37 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -392,6 +392,18 @@ function jsOfExpr(e, ctx) {
|
|
|
392
392
|
if (e.field === "unique") return `[...new Set((${baseJs}) ?? [])]`;
|
|
393
393
|
if (e.field === "reverse") return `[...((${baseJs}) ?? [])].reverse()`;
|
|
394
394
|
if (e.field === "sort") return `[...((${baseJs}) ?? [])].sort()`;
|
|
395
|
+
if (e.field === "head") return `_s.listHead(${baseJs})`;
|
|
396
|
+
if (e.field === "tail") return `_s.listTail(${baseJs})`;
|
|
397
|
+
if (e.field === "last") return `_s.listLast(${baseJs})`;
|
|
398
|
+
if (e.field === "to-list") return `_s.toList(${baseJs})`;
|
|
399
|
+
if (e.field === "get-err") return `_s.getErr(${baseJs})`;
|
|
400
|
+
if (e.field === "to-option") return `_s.toOption(${baseJs})`;
|
|
401
|
+
if (e.field === "parse-int") return `_s.parseIntOpt(${baseJs})`;
|
|
402
|
+
if (e.field === "parse-float") return `_s.parseFloatOpt(${baseJs})`;
|
|
403
|
+
if (e.field === "abs") return `Math.abs(${baseJs})`;
|
|
404
|
+
if (e.field === "neg") return `(-(${baseJs}))`;
|
|
405
|
+
if (e.field === "to-float") return `(${baseJs})`;
|
|
406
|
+
if (e.field === "to-int") return `Math.trunc(${baseJs})`;
|
|
395
407
|
return `(${baseJs})[${JSON.stringify(e.field)}]`;
|
|
396
408
|
}
|
|
397
409
|
case "Index": return `(${jsOfExpr(e.base, ctx)})[${jsOfExpr(e.index, ctx)}]`;
|
|
@@ -494,7 +506,19 @@ const KNOWN_METHODS = new Set([
|
|
|
494
506
|
"replace",
|
|
495
507
|
"min",
|
|
496
508
|
"max",
|
|
497
|
-
"clamp"
|
|
509
|
+
"clamp",
|
|
510
|
+
"head",
|
|
511
|
+
"tail",
|
|
512
|
+
"last",
|
|
513
|
+
"to-list",
|
|
514
|
+
"get-err",
|
|
515
|
+
"to-option",
|
|
516
|
+
"parse-int",
|
|
517
|
+
"parse-float",
|
|
518
|
+
"abs",
|
|
519
|
+
"neg",
|
|
520
|
+
"to-float",
|
|
521
|
+
"to-int"
|
|
498
522
|
]);
|
|
499
523
|
function methodCallJs(recv, method, args, ctx) {
|
|
500
524
|
const inner = makeEvalCtx(ctx.gen, ctx.localBinds);
|
|
@@ -558,6 +582,18 @@ function methodCallJs(recv, method, args, ctx) {
|
|
|
558
582
|
case "min": return `Math.min((${recvJs}), (${argRaw(args[0])}))`;
|
|
559
583
|
case "max": return `Math.max((${recvJs}), (${argRaw(args[0])}))`;
|
|
560
584
|
case "clamp": return `Math.min(Math.max((${recvJs}), (${argRaw(args[0])})), (${argRaw(args[1])}))`;
|
|
585
|
+
case "head": return `_s.listHead(${recvJs})`;
|
|
586
|
+
case "tail": return `_s.listTail(${recvJs})`;
|
|
587
|
+
case "last": return `_s.listLast(${recvJs})`;
|
|
588
|
+
case "to-list": return `_s.toList(${recvJs})`;
|
|
589
|
+
case "get-err": return `_s.getErr(${recvJs})`;
|
|
590
|
+
case "to-option": return `_s.toOption(${recvJs})`;
|
|
591
|
+
case "parse-int": return `_s.parseIntOpt(${recvJs})`;
|
|
592
|
+
case "parse-float": return `_s.parseFloatOpt(${recvJs})`;
|
|
593
|
+
case "abs": return `Math.abs(${recvJs})`;
|
|
594
|
+
case "neg": return `(-(${recvJs}))`;
|
|
595
|
+
case "to-float": return `(${recvJs})`;
|
|
596
|
+
case "to-int": return `Math.trunc(${recvJs})`;
|
|
561
597
|
default: return `(${recvJs}).${jsName(method)}(${args.map(argRaw).join(", ")})`;
|
|
562
598
|
}
|
|
563
599
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kumikijs/compiler",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Kumiki compiler — lexer, parser, typechecker, and code generator.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"provenance": true
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@kumikijs/runtime": "0.2.
|
|
44
|
+
"@kumikijs/runtime": "0.2.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/node": "^25.9.1",
|