Skip to content

Commit d53cb31

Browse files
authored
enhance: オブジェクトリテラルのキーに文字列を書けるように (#894)
* オブジェクトリテラルのキーに文字列を書けるように * CHANGELOG * issueリンク
1 parent 97b9d15 commit d53cb31

4 files changed

Lines changed: 16 additions & 1 deletion

File tree

src/parser/syntaxes/expressions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,10 @@ function parseObject(s: ITokenStream, isStatic: boolean): Ast.Obj {
565565

566566
const map = new Map<string, Ast.Expression>();
567567
while (!s.is(TokenKind.CloseBrace)) {
568-
s.expect(TokenKind.Identifier);
568+
const keyTokenKind = s.getTokenKind();
569+
if (keyTokenKind !== TokenKind.Identifier && keyTokenKind !== TokenKind.StringLiteral) {
570+
throw unexpectedTokenError(keyTokenKind, s.getPos());
571+
}
569572
const k = s.getTokenValue();
570573
s.next();
571574

test/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ describe('Object', () => {
198198
});
199199

200200
/* 未実装
201+
* see also: test/literals.ts > literal > obj (string key)
202+
* issue: https://github.com/aiscript-dev/aiscript/issues/62
201203
test.concurrent('string key', async () => {
202204
const res = await exe(`
203205
let obj = {

test/literals.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,15 @@ describe('literal', () => {
130130
eq(res, OBJ(new Map([['a', NUM(1)], ['b', NUM(2)], ['c', NUM(3)]])));
131131
});
132132

133+
test.concurrent('obj (string key)', async () => {
134+
const res = await exe(`
135+
<: {
136+
"藍": 42,
137+
}
138+
`);
139+
eq(res, OBJ(new Map([['藍', NUM(42)]])));
140+
});
141+
133142
test.concurrent('obj and arr (separated by line break)', async () => {
134143
const res = await exe(`
135144
<: {

unreleased/object-key-string.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- オブジェクトリテラルのキーに文字列リテラルを記述できるようになりました。

0 commit comments

Comments
 (0)