diff --git a/src/compiler/compile/nodes/EachBlock.ts b/src/compiler/compile/nodes/EachBlock.ts index 6a1f21cfd9..70b3340ce5 100644 --- a/src/compiler/compile/nodes/EachBlock.ts +++ b/src/compiler/compile/nodes/EachBlock.ts @@ -5,7 +5,7 @@ import TemplateScope from './shared/TemplateScope'; import AbstractBlock from './shared/AbstractBlock'; import Element from './Element'; import { x, p } from 'code-red'; -import { Node, Identifier } from 'estree'; +import { Node, Identifier, RestElement } from 'estree'; interface Context { key: Identifier; @@ -32,8 +32,15 @@ function unpack_destructuring(contexts: Context[], node: Node, modifier: (node: } else if (node.type === 'ObjectPattern') { const used_properties = []; - node.properties.forEach((property) => { + node.properties.forEach((property, i) => { if ((property as any).kind === 'rest') { // TODO is this right? + const replacement: RestElement = { + type: 'RestElement', + argument: property.key as Identifier + } + + node.properties[i] = replacement; + unpack_destructuring( contexts, property.value, diff --git a/src/compiler/compile/nodes/Let.ts b/src/compiler/compile/nodes/Let.ts index de8f73cdd2..7b92c5ce70 100644 --- a/src/compiler/compile/nodes/Let.ts +++ b/src/compiler/compile/nodes/Let.ts @@ -16,11 +16,13 @@ export default class Let extends Node { this.name = { type: 'Identifier', name: info.name }; + const { names } = this; + if (info.expression) { this.value = info.expression; walk(info.expression, { - enter: node => { + enter(node) { if (!applicable.has(node.type)) { component.error(node as any, { code: 'invalid-let', @@ -29,7 +31,7 @@ export default class Let extends Node { } if (node.type === 'Identifier') { - this.names.push(node.name); + names.push(node.name); } // slightly unfortunate hack @@ -43,7 +45,7 @@ export default class Let extends Node { } }); } else { - this.names.push(this.name.name); + names.push(this.name.name); } } } \ No newline at end of file