Skip to content

Commit d8d9c09

Browse files
authored
fix: 重複キーをエラーにする (#1018)
* Disallow duplicate key * changelog
1 parent 5a2fd7e commit d8d9c09

3 files changed

Lines changed: 10 additions & 0 deletions

File tree

src/parser/syntaxes/expressions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ function parseObject(s: ITokenStream, isStatic: boolean): Ast.Obj {
593593
const map = new Map<string, Ast.Expression>();
594594
while (!s.is(TokenKind.CloseBrace)) {
595595
const k = parseObjectKey(s);
596+
if (map.has(k)) {
597+
throw new AiScriptSyntaxError(`Key ${k} is duplicated.`, s.getPos());
598+
}
596599
s.next();
597600

598601
s.expect(TokenKind.Colon);

test/literals.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@ describe('literal', () => {
251251
`)).rejects.toThrow(AiScriptSyntaxError);
252252
})
253253

254+
test.concurrent('obj (duplicate key)', async () => {
255+
await expect(() => exe(`
256+
<: { hoge: 1, hoge: 2 }
257+
`)).rejects.toThrow(AiScriptSyntaxError);
258+
});
259+
254260
test.concurrent('obj (invalid key)', async () => {
255261
assert.rejects(() => exe(`
256262
<: {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Fix: オブジェクトリテラルでキーの重複がエラーになるように修正

0 commit comments

Comments
 (0)