Skip to content

Commit b1956c4

Browse files
authored
Merge pull request #146 from Siubaak/claude/fix-issue-145-tyhaL
2 parents 9a81d79 + b1c2710 commit b1956c4

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

src/evaluate/expression.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export function* ArrayExpression(node: acorn.ArrayExpression, scope: Scope) {
2222
let results: any[] = []
2323
for (let i = 0; i < node.elements.length; i++) {
2424
const item = node.elements[i]
25-
if (item.type === 'SpreadElement') {
25+
if (item === null) {
26+
results.length++
27+
} else if (item.type === 'SpreadElement') {
2628
results = results.concat(yield* SpreadElement(item, scope))
2729
} else {
2830
results.push(yield* evaluate(item, scope))

tests/expression.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,25 @@ describe('testing src/expression.ts', () => {
191191
expect(interpreter.exports.g).toBeInstanceOf(TypeError)
192192
})
193193

194+
it('should parse sparse array literals normally', () => {
195+
const interpreter = new Sval()
196+
197+
interpreter.run(`
198+
exports.a = [, 1]
199+
exports.b = [1, , 2]
200+
exports.c = [1, , , 2]
201+
exports.d = [,]
202+
`)
203+
204+
expect(interpreter.exports.a).toEqual([, 1])
205+
expect(0 in interpreter.exports.a).toBe(false)
206+
expect(interpreter.exports.b).toEqual([1, , 2])
207+
expect(1 in interpreter.exports.b).toBe(false)
208+
expect(interpreter.exports.c).toEqual([1, , , 2])
209+
expect(interpreter.exports.d).toEqual([,])
210+
expect(interpreter.exports.d.length).toBe(1)
211+
})
212+
194213
it('should parse regular expression normally', () => {
195214
const interpreter = new Sval()
196215
interpreter.import({ expect })

0 commit comments

Comments
 (0)