UNPKG

ember-material-icons

Version:

Google Material icons for your ember-cli app

211 lines 15.6 kB
import { CompiledProgram } from './compiled/blocks'; import { Ops } from '@glimmer/wire-format'; import { compileStatement } from './scanner'; import { compileArgs, compileBaselineArgs } from './syntax/functions'; import OpcodeBuilderDSL from './compiled/opcodes/builder'; export function compileLayout(compilable, env) { let builder = new ComponentLayoutBuilder(env); compilable.compile(builder); return builder.compile(); } class ComponentLayoutBuilder { constructor(env) { this.env = env; } wrapLayout(layout) { this.inner = new WrappedBuilder(this.env, layout); } fromLayout(layout) { this.inner = new UnwrappedBuilder(this.env, layout); } compile() { return this.inner.compile(); } get tag() { return this.inner.tag; } get attrs() { return this.inner.attrs; } } class WrappedBuilder { constructor(env, layout) { this.env = env; this.layout = layout; this.tag = new ComponentTagBuilder(); this.attrs = new ComponentAttrsBuilder(); } compile() { //========DYNAMIC // PutValue(TagExpr) // Test // JumpUnless(BODY) // OpenDynamicPrimitiveElement // DidCreateElement // ...attr statements... // FlushElement // BODY: Noop // ...body statements... // PutValue(TagExpr) // Test // JumpUnless(END) // CloseElement // END: Noop // DidRenderLayout // Exit // //========STATIC // OpenPrimitiveElementOpcode // DidCreateElement // ...attr statements... // FlushElement // ...body statements... // CloseElement // DidRenderLayout // Exit let { env, layout } = this; let symbolTable = layout.symbolTable; let b = builder(env, layout.symbolTable); b.startLabels(); let dynamicTag = this.tag.getDynamic(); let staticTag; if (dynamicTag) { b.putValue(dynamicTag); b.test('simple'); b.jumpUnless('BODY'); b.openDynamicPrimitiveElement(); b.didCreateElement(); this.attrs['buffer'].forEach(statement => compileStatement(statement, b)); b.flushElement(); b.label('BODY'); } else if (staticTag = this.tag.getStatic()) { b.openPrimitiveElement(staticTag); b.didCreateElement(); this.attrs['buffer'].forEach(statement => compileStatement(statement, b)); b.flushElement(); } b.preludeForLayout(layout); layout.statements.forEach(statement => compileStatement(statement, b)); if (dynamicTag) { b.putValue(dynamicTag); b.test('simple'); b.jumpUnless('END'); b.closeElement(); b.label('END'); } else if (staticTag) { b.closeElement(); } b.didRenderLayout(); b.stopLabels(); return new CompiledProgram(b.start, b.end, symbolTable.size); } } function isOpenElement(value) { let type = value[0]; return type === Ops.OpenElement || type === Ops.OpenPrimitiveElement; } class UnwrappedBuilder { constructor(env, layout) { this.env = env; this.layout = layout; this.attrs = new ComponentAttrsBuilder(); } get tag() { throw new Error('BUG: Cannot call `tag` on an UnwrappedBuilder'); } compile() { let { env, layout } = this; let b = builder(env, layout.symbolTable); b.startLabels(); b.preludeForLayout(layout); let attrs = this.attrs['buffer']; let attrsInserted = false; for (let i = 0; i < layout.statements.length; i++) { let statement = layout.statements[i]; if (!attrsInserted && isOpenElement(statement)) { b.openComponentElement(statement[1]); b.didCreateElement(); b.shadowAttributes(); attrs.forEach(statement => compileStatement(statement, b)); attrsInserted = true; } else { compileStatement(statement, b); } } b.didRenderLayout(); b.stopLabels(); return new CompiledProgram(b.start, b.end, layout.symbolTable.size); } } class ComponentTagBuilder { constructor() { this.isDynamic = null; this.isStatic = null; this.staticTagName = null; this.dynamicTagName = null; } getDynamic() { if (this.isDynamic) { return this.dynamicTagName; } } getStatic() { if (this.isStatic) { return this.staticTagName; } } static(tagName) { this.isStatic = true; this.staticTagName = tagName; } dynamic(tagName) { this.isDynamic = true; this.dynamicTagName = [Ops.Function, tagName]; } } class ComponentAttrsBuilder { constructor() { this.buffer = []; } static(name, value) { this.buffer.push([Ops.StaticAttr, name, value, null]); } dynamic(name, value) { this.buffer.push([Ops.DynamicAttr, name, [Ops.Function, value], null]); } } export class ComponentBuilder { constructor(builder) { this.builder = builder; this.env = builder.env; } static(definition, args, _symbolTable, shadow) { this.builder.unit(b => { b.putComponentDefinition(definition); b.openComponent(compileBaselineArgs(args, b), shadow); b.closeComponent(); }); } dynamic(definitionArgs, definition, args, _symbolTable, shadow) { this.builder.unit(b => { b.putArgs(compileArgs(definitionArgs[0], definitionArgs[1], b)); b.putValue([Ops.Function, definition]); b.test('simple'); b.enter('BEGIN', 'END'); b.label('BEGIN'); b.jumpUnless('END'); b.putDynamicComponentDefinition(); b.openComponent(compileBaselineArgs(args, b), shadow); b.closeComponent(); b.label('END'); b.exit(); }); } } export function builder(env, symbolTable) { return new OpcodeBuilderDSL(symbolTable, env); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzQyxPQUFPLEVBSUwsZ0JBQWdCLEVBQ2pCLE1BQU0sV0FBVyxDQUFDO0FBUW5CLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFNNUIsT0FBTyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQVUxRCxNQUFNLHdCQUF3QixVQUE0QixFQUFFLEdBQWdCO0lBQzFFLElBQUksT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRDtJQUdFLFlBQW1CLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFBRyxDQUFDO0lBRXZDLFVBQVUsQ0FBQyxNQUFjO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxL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