From 05d3c741b773211e04a4692e78cbaa1598e9d901 Mon Sep 17 00:00:00 2001 From: takejohn Date: Thu, 18 Sep 2025 22:47:31 +0900 Subject: [PATCH] =?UTF-8?q?=E9=96=A2=E6=95=B0Obj:from=5Fkvs=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interpreter/lib/std.ts | 15 ++++++++++++++- test/std.ts | 9 +++++++++ unreleased/obj-from-kvs.md | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 unreleased/obj-from-kvs.md diff --git a/src/interpreter/lib/std.ts b/src/interpreter/lib/std.ts index 529ef26f..13648a16 100644 --- a/src/interpreter/lib/std.ts +++ b/src/interpreter/lib/std.ts @@ -406,8 +406,21 @@ export const std: Record = { }) )); }), + + 'Obj:from_kvs': FN_NATIVE(([kvs]) => { + assertArray(kvs); + return OBJ(new Map( + kvs.value.map((kv) => { + assertArray(kv); + const [key, value] = kv.value; + assertString(key); + expectAny(value); + return [key.value, value]; + }), + )); + }), //#endregion - + //#region Error 'Error:create': FN_NATIVE(([name, info]) => { assertString(name); diff --git a/test/std.ts b/test/std.ts index 4588e1a8..3018a11f 100644 --- a/test/std.ts +++ b/test/std.ts @@ -208,6 +208,15 @@ describe('Obj', () => { `); eq(res, utils.jsToVal({ b: 2, d: null })); }); + + test.concurrent('from_kvs', async () => { + const res = await exe(` + let kvs = [['a', 1], ['b', 2], ['c', 3]] + + <: Obj:from_kvs(kvs) + `); + eq(res, utils.jsToVal({ a: 1, b: 2, c: 3 })); + }); }); describe('Str', () => { diff --git a/unreleased/obj-from-kvs.md b/unreleased/obj-from-kvs.md new file mode 100644 index 00000000..d6ed002f --- /dev/null +++ b/unreleased/obj-from-kvs.md @@ -0,0 +1 @@ +- 関数`Obj:from_kvs`を追加