diff --git a/compiler/Builder.js b/compiler/Builder.js index 0cf0c6bde..06895aeb8 100644 --- a/compiler/Builder.js +++ b/compiler/Builder.js @@ -43,6 +43,7 @@ var VariableDeclarator = require('./ast/VariableDeclarator'); var ThisExpression = require('./ast/ThisExpression'); var Expression = require('./ast/Expression'); var Scriptlet = require('./ast/Scriptlet'); +var ContainerNode = require('./ast/ContainerNode'); var parseExpression = require('./util/parseExpression'); var parseJavaScriptArgs = require('./util/parseJavaScriptArgs'); @@ -133,6 +134,19 @@ class Builder { return new ConditionalExpression({test, consequent, alternate}); } + containerNode(type, generateCode) { + if (typeof type === 'function') { + generateCode = arguments[0]; + type = 'ContainerNode'; + } + + var node = new ContainerNode(type); + if (generateCode) { + node.setCodeGenerator(generateCode); + } + return node; + } + elseStatement(body) { return new Else({body}); } diff --git a/compiler/ast/ContainerNode.js b/compiler/ast/ContainerNode.js new file mode 100644 index 000000000..3a0fc9e91 --- /dev/null +++ b/compiler/ast/ContainerNode.js @@ -0,0 +1,16 @@ +'use strict'; + +var Node = require('./Node'); + +class ContainerNode extends Node { + constructor(def) { + super('ContainerNode'); + this.body = this.makeContainer(def.body); + } + + walk(walker) { + this.body = walker.walk(this.body); + } +} + +module.exports = ContainerNode; \ No newline at end of file