ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
834 lines (766 loc) • 91.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.INLINES = exports.Inlines = exports.BLOCKS = exports.Blocks = exports.PartialInvoker = exports.InvokeDynamicLayout = exports.ATTRS_BLOCK = undefined;
exports.expr = expr;
exports.compileList = compileList;
exports.populateBuiltins = populateBuiltins;
exports.compileStatement = compileStatement;
exports.compileStatements = compileStatements;
var _reference = require('@glimmer/reference');
var _util = require('@glimmer/util');
var _wireFormat = require('@glimmer/wire-format');
var WireFormat = _interopRequireWildcard(_wireFormat);
var _builder = require('../compiled/opcodes/builder');
var _builder2 = _interopRequireDefault(_builder);
var _opcodes = require('../opcodes');
var _clientSide = require('../syntax/client-side');
var ClientSide = _interopRequireWildcard(_clientSide);
var _rawBlock = require('./raw-block');
var _rawBlock2 = _interopRequireDefault(_rawBlock);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var Ops = WireFormat.Ops;
var ATTRS_BLOCK = exports.ATTRS_BLOCK = '&attrs';
var Compilers = function () {
function Compilers() {
var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
_classCallCheck(this, Compilers);
this.offset = offset;
this.names = (0, _util.dict)();
this.funcs = [];
}
Compilers.prototype.add = function add(name, func) {
this.funcs.push(func);
this.names[name] = this.funcs.length - 1;
};
Compilers.prototype.compile = function compile(sexp, builder) {
var name = sexp[this.offset];
var index = this.names[name];
var func = this.funcs[index];
(0, _util.assert)(!!func, 'expected an implementation for ' + (this.offset === 0 ? Ops[sexp[0]] : ClientSide.Ops[sexp[1]]));
func(sexp, builder);
};
return Compilers;
}();
var STATEMENTS = new Compilers();
var CLIENT_SIDE = new Compilers(1);
STATEMENTS.add(Ops.Text, function (sexp, builder) {
builder.text(sexp[1]);
});
STATEMENTS.add(Ops.Comment, function (sexp, builder) {
builder.comment(sexp[1]);
});
STATEMENTS.add(Ops.CloseElement, function (_sexp, builder) {
builder.closeElement();
});
STATEMENTS.add(Ops.FlushElement, function (_sexp, builder) {
builder.flushElement();
});
STATEMENTS.add(Ops.Modifier, function (sexp, builder) {
var env = builder.env,
meta = builder.meta;
var name = sexp[1],
params = sexp[2],
hash = sexp[3];
if (env.hasModifier(name, meta.templateMeta)) {
builder.compileArgs(params, hash, true);
builder.modifier(env.lookupModifier(name, meta.templateMeta));
} else {
throw new Error('Compile Error ' + name + ' is not a modifier: Helpers may not be used in the element form.');
}
});
STATEMENTS.add(Ops.StaticAttr, function (sexp, builder) {
var name = sexp[1],
value = sexp[2],
namespace = sexp[3];
builder.staticAttr(name, namespace, value);
});
STATEMENTS.add(Ops.DynamicAttr, function (sexp, builder) {
dynamicAttr(sexp, false, builder);
});
STATEMENTS.add(Ops.TrustingAttr, function (sexp, builder) {
dynamicAttr(sexp, true, builder);
});
function dynamicAttr(sexp, trusting, builder) {
var name = sexp[1],
value = sexp[2],
namespace = sexp[3];
expr(value, builder);
if (namespace) {
builder.dynamicAttrNS(name, namespace, trusting);
} else {
builder.dynamicAttr(name, trusting);
}
}
STATEMENTS.add(Ops.OpenElement, function (sexp, builder) {
builder.openPrimitiveElement(sexp[1]);
});
CLIENT_SIDE.add(ClientSide.Ops.OpenComponentElement, function (sexp, builder) {
builder.pushComponentOperations();
builder.openElementWithOperations(sexp[2]);
});
CLIENT_SIDE.add(ClientSide.Ops.DidCreateElement, function (_sexp, builder) {
builder.didCreateElement(_opcodes.Register.s0);
});
CLIENT_SIDE.add(ClientSide.Ops.DidRenderLayout, function (_sexp, builder) {
builder.didRenderLayout(_opcodes.Register.s0);
});
STATEMENTS.add(Ops.Append, function (sexp, builder) {
var value = sexp[1],
trusting = sexp[2];
var _builder$env$macros = builder.env.macros(),
inlines = _builder$env$macros.inlines;
var returned = inlines.compile(sexp, builder) || value;
if (returned === true) return;
var isGet = E.isGet(value);
var isMaybeLocal = E.isMaybeLocal(value);
if (trusting) {
builder.guardedAppend(value, true);
} else {
if (isGet || isMaybeLocal) {
builder.guardedAppend(value, false);
} else {
expr(value, builder);
builder.cautiousAppend();
}
}
});
STATEMENTS.add(Ops.Block, function (sexp, builder) {
var name = sexp[1],
params = sexp[2],
hash = sexp[3],
_template = sexp[4],
_inverse = sexp[5];
var template = builder.template(_template);
var inverse = builder.template(_inverse);
var templateBlock = template && template.scan();
var inverseBlock = inverse && inverse.scan();
var _builder$env$macros2 = builder.env.macros(),
blocks = _builder$env$macros2.blocks;
blocks.compile(name, params, hash, templateBlock, inverseBlock, builder);
});
var InvokeDynamicLayout = exports.InvokeDynamicLayout = function () {
function InvokeDynamicLayout(attrs) {
_classCallCheck(this, InvokeDynamicLayout);
this.attrs = attrs;
}
InvokeDynamicLayout.prototype.invoke = function invoke(vm, layout) {
var _layout$symbolTable = layout.symbolTable,
symbols = _layout$symbolTable.symbols,
hasEval = _layout$symbolTable.hasEval;
var stack = vm.stack;
var scope = vm.pushRootScope(symbols.length + 1, true);
scope.bindSelf(stack.pop());
scope.bindBlock(symbols.indexOf(ATTRS_BLOCK) + 1, this.attrs);
var lookup = null;
var $eval = -1;
if (hasEval) {
$eval = symbols.indexOf('$eval') + 1;
lookup = (0, _util.dict)();
}
var callerNames = stack.pop();
for (var i = callerNames.length - 1; i >= 0; i--) {
var symbol = symbols.indexOf(callerNames[i]);
var value = stack.pop();
if (symbol !== -1) scope.bindSymbol(symbol + 1, value);
if (hasEval) lookup[callerNames[i]] = value;
}
var numPositionalArgs = stack.pop();
(0, _util.assert)(typeof numPositionalArgs === 'number', '[BUG] Incorrect value of positional argument count found during invoke-dynamic-layout.');
// Currently we don't support accessing positional args in templates, so just throw them away
stack.pop(numPositionalArgs);
var inverseSymbol = symbols.indexOf('&inverse');
var inverse = stack.pop();
if (inverseSymbol !== -1) {
scope.bindBlock(inverseSymbol + 1, inverse);
}
if (lookup) lookup['&inverse'] = inverse;
var defaultSymbol = symbols.indexOf('&default');
var defaultBlock = stack.pop();
if (defaultSymbol !== -1) {
scope.bindBlock(defaultSymbol + 1, defaultBlock);
}
if (lookup) lookup['&default'] = defaultBlock;
if (lookup) scope.bindEvalScope(lookup);
vm.pushFrame();
vm.call(layout.handle);
};
InvokeDynamicLayout.prototype.toJSON = function toJSON() {
return { GlimmerDebug: '<invoke-dynamic-layout>' };
};
return InvokeDynamicLayout;
}();
STATEMENTS.add(Ops.Component, function (sexp, builder) {
var tag = sexp[1],
attrs = sexp[2],
args = sexp[3],
block = sexp[4];
if (builder.env.hasComponentDefinition(tag, builder.meta.templateMeta)) {
var child = builder.template(block);
var attrsBlock = new _rawBlock2.default(builder.meta, attrs, _util.EMPTY_ARRAY);
var definition = builder.env.getComponentDefinition(tag, builder.meta.templateMeta);
builder.pushComponentManager(definition);
builder.invokeComponent(attrsBlock, null, args, child && child.scan());
} else if (block && block.parameters.length) {
throw new Error('Compile Error: Cannot find component ' + tag);
} else {
builder.openPrimitiveElement(tag);
for (var i = 0; i < attrs.length; i++) {
STATEMENTS.compile(attrs[i], builder);
}
builder.flushElement();
if (block) {
var stmts = block.statements;
for (var _i = 0; _i < stmts.length; _i++) {
STATEMENTS.compile(stmts[_i], builder);
}
}
builder.closeElement();
}
});
var PartialInvoker = exports.PartialInvoker = function () {
function PartialInvoker(outerSymbols, evalInfo) {
_classCallCheck(this, PartialInvoker);
this.outerSymbols = outerSymbols;
this.evalInfo = evalInfo;
}
PartialInvoker.prototype.invoke = function invoke(vm, _partial) {
var partial = _partial;
var partialSymbols = partial.symbolTable.symbols;
var outerScope = vm.scope();
var partialScope = vm.pushRootScope(partialSymbols.length, false);
partialScope.bindCallerScope(outerScope.getCallerScope());
partialScope.bindEvalScope(outerScope.getEvalScope());
partialScope.bindSelf(outerScope.getSelf());
var evalInfo = this.evalInfo,
outerSymbols = this.outerSymbols;
var locals = (0, _util.dict)();
for (var i = 0; i < evalInfo.length; i++) {
var slot = evalInfo[i];
var name = outerSymbols[slot - 1];
var ref = outerScope.getSymbol(slot);
locals[name] = ref;
}
var evalScope = outerScope.getEvalScope();
for (var _i2 = 0; _i2 < partialSymbols.length; _i2++) {
var _name = partialSymbols[_i2];
var symbol = _i2 + 1;
var value = evalScope[_name];
if (value !== undefined) partialScope.bind(symbol, value);
}
partialScope.bindPartialMap(locals);
vm.pushFrame();
vm.call(partial.handle);
};
return PartialInvoker;
}();
STATEMENTS.add(Ops.Partial, function (sexp, builder) {
var name = sexp[1],
evalInfo = sexp[2];
var _builder$meta = builder.meta,
templateMeta = _builder$meta.templateMeta,
symbols = _builder$meta.symbols;
function helper(vm, args) {
var env = vm.env;
var nameRef = args.positional.at(0);
return (0, _reference.map)(nameRef, function (n) {
if (typeof n === 'string' && n) {
if (!env.hasPartial(n, templateMeta)) {
throw new Error('Could not find a partial named "' + n + '"');
}
return env.lookupPartial(n, templateMeta);
} else if (n) {
throw new Error('Could not find a partial named "' + String(n) + '"');
} else {
return null;
}
});
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
expr(name, builder);
builder.pushImmediate(1);
builder.pushImmediate(_util.EMPTY_ARRAY);
builder.pushArgs(true);
builder.helper(helper);
builder.dup();
builder.test('simple');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.getPartialTemplate();
builder.compileDynamicBlock();
builder.invokeDynamic(new PartialInvoker(symbols, evalInfo));
builder.popScope();
builder.popFrame();
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
var InvokeDynamicYield = function () {
function InvokeDynamicYield(callerCount) {
_classCallCheck(this, InvokeDynamicYield);
this.callerCount = callerCount;
}
InvokeDynamicYield.prototype.invoke = function invoke(vm, block) {
var callerCount = this.callerCount;
var stack = vm.stack;
if (!block) {
// To balance the pop{Frame,Scope}
vm.pushFrame();
vm.pushCallerScope();
return;
}
var table = block.symbolTable;
var locals = table.parameters; // always present in inline blocks
var calleeCount = locals ? locals.length : 0;
var count = Math.min(callerCount, calleeCount);
vm.pushFrame();
vm.pushCallerScope(calleeCount > 0);
var scope = vm.scope();
for (var i = 0; i < count; i++) {
scope.bindSymbol(locals[i], stack.fromBase(callerCount - i));
}
vm.call(block.handle);
};
InvokeDynamicYield.prototype.toJSON = function toJSON() {
return { GlimmerDebug: '<invoke-dynamic-yield caller-count=' + this.callerCount + '>' };
};
return InvokeDynamicYield;
}();
STATEMENTS.add(Ops.Yield, function (sexp, builder) {
var to = sexp[1],
params = sexp[2];
var count = compileList(params, builder);
builder.getBlock(to);
builder.compileDynamicBlock();
builder.invokeDynamic(new InvokeDynamicYield(count));
builder.popScope();
builder.popFrame();
if (count) {
builder.pop(count);
}
});
STATEMENTS.add(Ops.Debugger, function (sexp, builder) {
var evalInfo = sexp[1];
builder.debugger(builder.meta.symbols, evalInfo);
});
STATEMENTS.add(Ops.ClientSideStatement, function (sexp, builder) {
CLIENT_SIDE.compile(sexp, builder);
});
var EXPRESSIONS = new Compilers();
var CLIENT_SIDE_EXPRS = new Compilers(1);
var E = WireFormat.Expressions;
function expr(expression, builder) {
if (Array.isArray(expression)) {
EXPRESSIONS.compile(expression, builder);
} else {
builder.primitive(expression);
}
}
EXPRESSIONS.add(Ops.Unknown, function (sexp, builder) {
var name = sexp[1];
if (builder.env.hasHelper(name, builder.meta.templateMeta)) {
EXPRESSIONS.compile([Ops.Helper, name, _util.EMPTY_ARRAY, null], builder);
} else if (builder.meta.asPartial) {
builder.resolveMaybeLocal(name);
} else {
builder.getVariable(0);
builder.getProperty(name);
}
});
EXPRESSIONS.add(Ops.Concat, function (sexp, builder) {
var parts = sexp[1];
for (var i = 0; i < parts.length; i++) {
expr(parts[i], builder);
}
builder.concat(parts.length);
});
CLIENT_SIDE_EXPRS.add(ClientSide.Ops.FunctionExpression, function (sexp, builder) {
builder.function(sexp[2]);
});
EXPRESSIONS.add(Ops.Helper, function (sexp, builder) {
var env = builder.env,
meta = builder.meta;
var name = sexp[1],
params = sexp[2],
hash = sexp[3];
if (env.hasHelper(name, meta.templateMeta)) {
builder.compileArgs(params, hash, true);
builder.helper(env.lookupHelper(name, meta.templateMeta));
} else {
throw new Error('Compile Error: ' + name + ' is not a helper');
}
});
EXPRESSIONS.add(Ops.Get, function (sexp, builder) {
var head = sexp[1],
path = sexp[2];
builder.getVariable(head);
for (var i = 0; i < path.length; i++) {
builder.getProperty(path[i]);
}
});
EXPRESSIONS.add(Ops.MaybeLocal, function (sexp, builder) {
var path = sexp[1];
if (builder.meta.asPartial) {
var head = path[0];
path = path.slice(1);
builder.resolveMaybeLocal(head);
} else {
builder.getVariable(0);
}
for (var i = 0; i < path.length; i++) {
builder.getProperty(path[i]);
}
});
EXPRESSIONS.add(Ops.Undefined, function (_sexp, builder) {
return builder.primitive(undefined);
});
EXPRESSIONS.add(Ops.HasBlock, function (sexp, builder) {
builder.hasBlock(sexp[1]);
});
EXPRESSIONS.add(Ops.HasBlockParams, function (sexp, builder) {
builder.hasBlockParams(sexp[1]);
});
EXPRESSIONS.add(Ops.ClientSideExpression, function (sexp, builder) {
CLIENT_SIDE_EXPRS.compile(sexp, builder);
});
function compileList(params, builder) {
if (!params) return 0;
for (var i = 0; i < params.length; i++) {
expr(params[i], builder);
}
return params.length;
}
var Blocks = exports.Blocks = function () {
function Blocks() {
_classCallCheck(this, Blocks);
this.names = (0, _util.dict)();
this.funcs = [];
}
Blocks.prototype.add = function add(name, func) {
this.funcs.push(func);
this.names[name] = this.funcs.length - 1;
};
Blocks.prototype.addMissing = function addMissing(func) {
this.missing = func;
};
Blocks.prototype.compile = function compile(name, params, hash, template, inverse, builder) {
var index = this.names[name];
if (index === undefined) {
(0, _util.assert)(!!this.missing, name + ' not found, and no catch-all block handler was registered');
var func = this.missing;
var handled = func(name, params, hash, template, inverse, builder);
(0, _util.assert)(!!handled, name + ' not found, and the catch-all block handler didn\'t handle it');
} else {
var _func = this.funcs[index];
_func(params, hash, template, inverse, builder);
}
};
return Blocks;
}();
var BLOCKS = exports.BLOCKS = new Blocks();
var Inlines = exports.Inlines = function () {
function Inlines() {
_classCallCheck(this, Inlines);
this.names = (0, _util.dict)();
this.funcs = [];
}
Inlines.prototype.add = function add(name, func) {
this.funcs.push(func);
this.names[name] = this.funcs.length - 1;
};
Inlines.prototype.addMissing = function addMissing(func) {
this.missing = func;
};
Inlines.prototype.compile = function compile(sexp, builder) {
var value = sexp[1];
// TODO: Fix this so that expression macros can return
// things like components, so that {{component foo}}
// is the same as {{(component foo)}}
if (!Array.isArray(value)) return ['expr', value];
var name = void 0;
var params = void 0;
var hash = void 0;
if (value[0] === Ops.Helper) {
name = value[1];
params = value[2];
hash = value[3];
} else if (value[0] === Ops.Unknown) {
name = value[1];
params = hash = null;
} else {
return ['expr', value];
}
var index = this.names[name];
if (index === undefined && this.missing) {
var func = this.missing;
var returned = func(name, params, hash, builder);
return returned === false ? ['expr', value] : returned;
} else if (index !== undefined) {
var _func2 = this.funcs[index];
var _returned = _func2(name, params, hash, builder);
return _returned === false ? ['expr', value] : _returned;
} else {
return ['expr', value];
}
};
return Inlines;
}();
var INLINES = exports.INLINES = new Inlines();
populateBuiltins(BLOCKS, INLINES);
function populateBuiltins() {
var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Blocks();
var inlines = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Inlines();
blocks.add('if', function (params, _hash, template, inverse, builder) {
// PutArgs
// Test(Environment)
// Enter(BEGIN, END)
// BEGIN: Noop
// JumpUnless(ELSE)
// Evaluate(default)
// Jump(END)
// ELSE: Noop
// Evalulate(inverse)
// END: Noop
// Exit
if (!params || params.length !== 1) {
throw new Error('SYNTAX ERROR: #if requires a single argument');
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
expr(params[0], builder);
builder.test('environment');
builder.enter(1);
builder.jumpUnless('ELSE');
builder.invokeStatic(template);
if (inverse) {
builder.jump('EXIT');
builder.label('ELSE');
builder.invokeStatic(inverse);
builder.label('EXIT');
builder.exit();
builder.return();
} else {
builder.label('ELSE');
builder.exit();
builder.return();
}
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
blocks.add('unless', function (params, _hash, template, inverse, builder) {
// PutArgs
// Test(Environment)
// Enter(BEGIN, END)
// BEGIN: Noop
// JumpUnless(ELSE)
// Evaluate(default)
// Jump(END)
// ELSE: Noop
// Evalulate(inverse)
// END: Noop
// Exit
if (!params || params.length !== 1) {
throw new Error('SYNTAX ERROR: #unless requires a single argument');
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
expr(params[0], builder);
builder.test('environment');
builder.enter(1);
builder.jumpIf('ELSE');
builder.invokeStatic(template);
if (inverse) {
builder.jump('EXIT');
builder.label('ELSE');
builder.invokeStatic(inverse);
builder.label('EXIT');
builder.exit();
builder.return();
} else {
builder.label('ELSE');
builder.exit();
builder.return();
}
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
blocks.add('with', function (params, _hash, template, inverse, builder) {
// PutArgs
// Test(Environment)
// Enter(BEGIN, END)
// BEGIN: Noop
// JumpUnless(ELSE)
// Evaluate(default)
// Jump(END)
// ELSE: Noop
// Evalulate(inverse)
// END: Noop
// Exit
if (!params || params.length !== 1) {
throw new Error('SYNTAX ERROR: #with requires a single argument');
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
expr(params[0], builder);
builder.dup();
builder.test('environment');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.invokeStatic(template, 1);
if (inverse) {
builder.jump('EXIT');
builder.label('ELSE');
builder.invokeStatic(inverse);
builder.label('EXIT');
builder.exit();
builder.return();
} else {
builder.label('ELSE');
builder.exit();
builder.return();
}
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
blocks.add('each', function (params, hash, template, inverse, builder) {
// Enter(BEGIN, END)
// BEGIN: Noop
// PutArgs
// PutIterable
// JumpUnless(ELSE)
// EnterList(BEGIN2, END2)
// ITER: Noop
// NextIter(BREAK)
// BEGIN2: Noop
// PushChildScope
// Evaluate(default)
// PopScope
// END2: Noop
// Exit
// Jump(ITER)
// BREAK: Noop
// ExitList
// Jump(END)
// ELSE: Noop
// Evalulate(inverse)
// END: Noop
// Exit
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
if (hash && hash[0][0] === 'key') {
expr(hash[1][0], builder);
} else {
builder.primitive(null);
}
expr(params[0], builder);
builder.enter(2);
builder.putIterator();
builder.jumpUnless('ELSE');
builder.pushFrame();
builder.returnTo('ITER');
builder.dup(_opcodes.Register.fp, 1);
builder.enterList('BODY');
builder.label('ITER');
builder.iterate('BREAK');
builder.label('BODY');
builder.invokeStatic(template, 2);
builder.pop(2);
builder.exit();
builder.return();
builder.label('BREAK');
builder.exitList();
builder.popFrame();
if (inverse) {
builder.jump('EXIT');
builder.label('ELSE');
builder.invokeStatic(inverse);
builder.label('EXIT');
builder.exit();
builder.return();
} else {
builder.label('ELSE');
builder.exit();
builder.return();
}
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
blocks.add('-in-element', function (params, hash, template, _inverse, builder) {
if (!params || params.length !== 1) {
throw new Error('SYNTAX ERROR: #-in-element requires a single argument');
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
if (hash && hash[0].length) {
var keys = hash[0],
values = hash[1];
if (keys.length === 1 && keys[0] === 'nextSibling') {
expr(values[0], builder);
} else {
throw new Error('SYNTAX ERROR: #-in-element does not take a `' + keys[0] + '` option');
}
} else {
expr(null, builder);
}
expr(params[0], builder);
builder.dup();
builder.test('simple');
builder.enter(3);
builder.jumpUnless('ELSE');
builder.pushRemoteElement();
builder.invokeStatic(template);
builder.popRemoteElement();
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
});
blocks.add('-with-dynamic-vars', function (_params, hash, template, _inverse, builder) {
if (hash) {
var names = hash[0],
expressions = hash[1];
compileList(expressions, builder);
builder.pushDynamicScope();
builder.bindDynamicScope(names);
builder.invokeStatic(template);
builder.popDynamicScope();
} else {
builder.invokeStatic(template);
}
});
return { blocks: blocks, inlines: inlines };
}
function compileStatement(statement, builder) {
STATEMENTS.compile(statement, builder);
}
function compileStatements(statements, meta, env) {
var b = new _builder2.default(env, meta);
for (var i = 0; i < statements.length; i++) {
compileStatement(statements[i], b);
}
return b;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zeW50YXgvZnVuY3Rpb25zLmpzIl0sIm5hbWVzIjpbIm1hcCIsImFzc2VydCIsImRpY3QiLCJFTVBUWV9BUlJBWSIsIldpcmVGb3JtYXQiLCJPcGNvZGVCdWlsZGVyIiwiUmVnaXN0ZXIiLCJDbGllbnRTaWRlIiwiUmF3SW5saW5lQmxvY2siLCJPcHMiLCJBVFRSU19CTE9DSyIsIkNvbXBpbGVycyIsIm9mZnNldCIsIm5hbWVzIiwiZnVuY3MiLCJhZGQiLCJuYW1lIiwiZnVuYyIsInB1c2giLCJsZW5ndGgiLCJjb21waWxlIiwic2V4cCIsImJ1aWxkZXIiLCJpbmRleCIsIlNUQVRFTUVOVFMiLCJDTElFTlRfU0lERSIsIlRleHQiLCJ0ZXh0IiwiQ29tbWVudCIsImNvbW1lbnQiLCJDbG9zZUVsZW1lbnQiLCJfc2V4cCIsImNsb3NlRWxlbWVudCIsIkZsdXNoRWxlbWVudCIsImZsdXNoRWxlbWVudCIsIk1vZGlmaWVyIiwiZW52IiwibWV0YSIsInBhcmFtcyIsImhhc2giLCJoYXNNb2RpZmllciIsInRlbXBsYXRlTWV0YSIsImNvbXBpbGVBcmdzIiwibW9kaWZpZXIiLCJsb29rdXBNb2RpZmllciIsIkVycm9yIiwiU3RhdGljQXR0ciIsInZhbHVlIiwibmFtZXNwYWNlIiwic3RhdGljQXR0ciIsIkR5bmFtaWNBdHRyIiwiZHluYW1pY0F0dHIiLCJUcnVzdGluZ0F0dHIiLCJ0cnVzdGluZyIsImV4cHIiLCJkeW5hbWljQXR0ck5TIiwiT3BlbkVsZW1lbnQiLCJvcGVuUHJpbWl0aXZlRWxlbWVudCIsIk9wZW5Db21wb25lbnRFbGVtZW50IiwicHVzaENvbXBvbmVudE9wZXJhdGlvbnMiLCJvcGVuRWxlbWVudFdpdGhPcGVyYXRpb25zIiwiRGlkQ3JlYXRlRWxlbWVudCIsImRpZENyZWF0ZUVsZW1lbnQiLCJzMCIsIkRpZFJlbmRlckxheW91dCIsImRpZFJlbmRlckxheW91dCIsIkFwcGVuZCIsIm1hY3JvcyIsImlubGluZXMiLCJyZXR1cm5lZCIsImlzR2V0IiwiRSIsImlzTWF5YmVMb2NhbCIsImd1YXJkZWRBcHBlbmQiLCJjYXV0aW91c0FwcGVuZCIsIkJsb2NrIiwiX3RlbXBsYXRlIiwiX2ludmVyc2UiLCJ0ZW1wbGF0ZSIsImludmVyc2UiLCJ0ZW1wbGF0ZUJsb2NrIiwic2NhbiIsImludmVyc2VCbG9jayIsImJsb2NrcyIsIkludm9rZUR5bmFtaWNMYXlvdXQiLCJhdHRycyIsImludm9rZSIsInZtIiwibGF5b3V0Iiwic3ltYm9sVGFibGUiLCJzeW1ib2xzIiwiaGFzRXZhbCIsInN0YWNrIiwic2NvcGUiLCJwdXNoUm9vdFNjb3BlIiwiYmluZFNlbGYiLCJwb3AiLCJiaW5kQmxvY2siLCJpbmRleE9mIiwibG9va3VwIiwiJGV2YWwiLCJjYWxsZXJOYW1lcyIsImkiLCJzeW1ib2wiLCJiaW5kU3ltYm9sIiwibnVtUG9zaXRpb25hbEFyZ3MiLCJpbnZlcnNlU3ltYm9sIiwiZGVmYXVsdFN5bWJvbCIsImRlZmF1bHRCbG9jayIsImJpbmRFdmFsU2NvcGUiLCJwdXNoRnJhbWUiLCJjYWxsIiwiaGFuZGxlIiwidG9KU09OIiwiR2xpbW1lckRlYnVnIiwiQ29tcG9uZW50IiwidGFnIiwiYXJncyIsImJsb2NrIiwiaGFzQ29tcG9uZW50RGVmaW5pdGlvbiIsImNoaWxkIiwiYXR0cnNCbG9jayIsImRlZmluaXRpb24iLCJnZXRDb21wb25lbnREZWZpbml0aW9uIiwicHVzaENvbXBvbmVudE1hbmFnZXIiLCJpbnZva2VDb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwic3RtdHMiLCJzdGF0ZW1lbnRzIiwiUGFydGlhbEludm9rZXIiLCJvdXRlclN5bWJvbHMiLCJldmFsSW5mbyIsIl9wYXJ0aWFsIiwicGFydGlhbCIsInBhcnRpYWxTeW1ib2xzIiwib3V0ZXJTY29wZSIsInBhcnRpYWxTY29wZSIsImJpbmRDYWxsZXJTY29wZSIsImdldENhbGxlclNjb3BlIiwiZ2V0RXZhbFNjb3BlIiwiZ2V0U2VsZiIsImxvY2FscyIsInNsb3QiLCJyZWYiLCJnZXRTeW1ib2wiLCJldmFsU2NvcGUiLCJ1bmRlZmluZWQiLCJiaW5kIiwiYmluZFBhcnRpYWxNYXAiLCJQYXJ0aWFsIiwiaGVscGVyIiwibmFtZVJlZiIsInBvc2l0aW9uYWwiLCJhdCIsIm4iLCJoYXNQYXJ0aWFsIiwibG9va3VwUGFydGlhbCIsIlN0cmluZyIsInN0YXJ0TGFiZWxzIiwicmV0dXJuVG8iLCJwdXNoSW1tZWRpYXRlIiwicHVzaEFyZ3MiLCJkdXAiLCJ0ZXN0IiwiZW50ZXIiLCJqdW1wVW5sZXNzIiwiZ2V0UGFydGlhbFRlbXBsYXRlIiwiY29tcGlsZUR5bmFtaWNCbG9jayIsImludm9rZUR5bmFtaWMiLCJwb3BTY29wZSIsInBvcEZyYW1lIiwibGFiZWwiLCJleGl0IiwicmV0dXJuIiwic3RvcExhYmVscyIsIkludm9rZUR5bmFtaWNZaWVsZCIsImNhbGxlckNvdW50IiwicHVzaENhbGxlclNjb3BlIiwidGFibGUiLCJjYWxsZWVDb3VudCIsImNvdW50IiwiTWF0aCIsIm1pbiIsImZyb21CYXNlIiwiWWllbGQiLCJ0byIsImNvbXBpbGVMaXN0IiwiZ2V0QmxvY2siLCJEZWJ1Z2dlciIsImRlYnVnZ2VyIiwiQ2xpZW50U2lkZVN0YXRlbWVudCIsIkVYUFJFU1NJT05TIiwiQ0xJRU5UX1NJREVfRVhQUlMiLCJFeHByZXNzaW9ucyIsImV4cHJlc3Npb24iLCJBcnJheSIsImlzQXJyYXkiLCJwcmltaXRpdmUiLCJVbmtub3duIiwiaGFzSGVscGVyIiwiSGVscGVyIiwiYXNQYXJ0aWFsIiwicmVzb2x2ZU1heWJlTG9jYWwiLCJnZXRWYXJpYWJsZSIsImdldFByb3BlcnR5IiwiQ29uY2F0IiwicGFydHMiLCJjb25jYXQiLCJGdW5jdGlvbkV4cHJlc3Npb24iLCJmdW5jdGlvbiIsImxvb2t1cEhlbHBlciIsIkdldCIsImhlYWQiLCJwYXRoIiwiTWF5YmVMb2NhbCIsInNsaWNlIiwiVW5kZWZpbmVkIiwiSGFzQmxvY2siLCJoYXNCbG9jayIsIkhhc0Jsb2NrUGFyYW1zIiwiaGFzQmxvY2tQYXJhbXMiLCJDbGllbnRTaWRlRXhwcmVzc2lvbiIsIkJsb2NrcyIsImFkZE1pc3NpbmciLCJtaXNzaW5nIiwiaGFuZGxlZCIsIkJMT0NLUyIsIklubGluZXMiLCJJTkxJTkVTIiwicG9wdWxhdGVCdWlsdGlucyIsIl9oYXNoIiwiaW52b2tlU3RhdGljIiwianVtcCIsImp1bXBJZiIsInB1dEl0ZXJhdG9yIiwiZnAiLCJlbnRlckxpc3QiLCJpdGVyYXRlIiwiZXhpdExpc3QiLCJrZXlzIiwidmFsdWVzIiwicHVzaFJlbW90ZUVsZW1lbnQiLCJwb3BSZW1vdGVFbGVtZW50IiwiX3BhcmFtcyIsImV4cHJlc3Npb25zIiwicHVzaER5bmFtaWNTY29wZSIsImJpbmREeW5hbWljU2NvcGUiLCJwb3BEeW5hbWljU2NvcGUiLCJjb21waWxlU3RhdGVtZW50Iiwic3RhdGVtZW50IiwiY29tcGlsZVN0YXRlbWVudHMiLCJiIl0sIm1hcHBpbmdzIjoiOzs7Ozs7UUFxVE8sQUFBUztRQXNFVCxBQUFTO1FBZ0ZULEFBQVM7UUFzT1QsQUFBUztRQUdULEFBQVM7O0FBcHJCaEIsQUFBUyxBQUFXOztBQUNwQixBQUFTLEFBQVEsQUFBTSxBQUEyQjs7QUFDbEQsQUFBTzs7SUFBUCxBQUFZLEFBQWdCOztBQUM1QixBQUFPLEFBQW1COzs7O0FBQzFCLEFBQVMsQUFBZ0I7O0FBQ3pCLEFBQU87O0lBQVAsQUFBWSxBQUFnQjs7QUFDNUIsQUFBTyxBQUFvQjs7Ozs7Ozs7Ozs7Ozs7QUFDM0IsSUFBSSxNQUFNLFdBQVYsQUFBcUIsQUFDckI7QUFBTyxJQUFNLG9DQUFOLEFBQW9COztJLEFBQ3JCLHdCQUNGO3lCQUF3QjtZQUFaLEFBQVksNkVBQUgsQUFBRzs7OEJBQ3BCOzthQUFBLEFBQUssU0FBTCxBQUFjLEFBQ2Q7YUFBQSxBQUFLLFFBQUwsQUFBYSxBQUNiO2FBQUEsQUFBSyxRQUFMLEFBQWEsQUFDaEI7Ozt3QixBQUNELG1CLEFBQUksTSxBQUFNLE1BQU0sQUFDWjthQUFBLEFBQUssTUFBTCxBQUFXLEtBQVgsQUFBZ0IsQUFDaEI7YUFBQSxBQUFL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