import ParseNode from '/imports/parser/parseTree/ParseNode.js'; import ConstantNode from '/imports/parser/parseTree/ConstantNode.js'; export default class ArrayNode extends ParseNode { constructor({values}) { super(...arguments); this.values = values; } static fromConstantArray(array){ let values = array.map( value => { let type = typeof value; if ( type === 'string' || type === 'number' || type === 'boolean' || type === 'undefined' ){ return new ConstantNode({value, type}); } else { throw `Unexpected type in constant array: ${type}` } }); return new ArrayNode({values}); } resolve(fn, scope, context){ let values = this.values.map(node => node[fn](scope, context)); return new ArrayNode({values}); } toString(){ return `[${this.values.map(node => node.toString()).join(', ')}]`; } traverse(fn){ fn(this); this.values.forEach(value => value.traverse(fn)); } replaceChildren(fn){ this.values = this.values.map(node => node.replaceNodes(fn)); } }