Skip to content

Commit ed72d59

Browse files
authored
関数Obj:from_kvsを追加 (#975)
1 parent 0bd93ab commit ed72d59

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/interpreter/lib/std.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,21 @@ export const std: Record<string, Value> = {
406406
})
407407
));
408408
}),
409+
410+
'Obj:from_kvs': FN_NATIVE(([kvs]) => {
411+
assertArray(kvs);
412+
return OBJ(new Map(
413+
kvs.value.map((kv) => {
414+
assertArray(kv);
415+
const [key, value] = kv.value;
416+
assertString(key);
417+
expectAny(value);
418+
return [key.value, value];
419+
}),
420+
));
421+
}),
409422
//#endregion
410-
423+
411424
//#region Error
412425
'Error:create': FN_NATIVE(([name, info]) => {
413426
assertString(name);

test/std.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ describe('Obj', () => {
208208
`);
209209
eq(res, utils.jsToVal({ b: 2, d: null }));
210210
});
211+
212+
test.concurrent('from_kvs', async () => {
213+
const res = await exe(`
214+
let kvs = [['a', 1], ['b', 2], ['c', 3]]
215+
216+
<: Obj:from_kvs(kvs)
217+
`);
218+
eq(res, utils.jsToVal({ a: 1, b: 2, c: 3 }));
219+
});
211220
});
212221

213222
describe('Str', () => {

unreleased/obj-from-kvs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- 関数`Obj:from_kvs`を追加

0 commit comments

Comments
 (0)