UNPKG

walt-compiler

Version:

Alternative syntax for WebAssembly text format

32 lines (27 loc) 830 B
// @flow import opcode from '../emitter/opcode'; import mapSyntax from './map-syntax'; import mergeBlock from './merge-block'; import type { GeneratorType } from './flow/types'; const generateSelect: GeneratorType = (node, parent) => { const [leftHandSide, rightHandSide] = node.params; const selectOpcode = { kind: opcode.Select, params: [] }; const condition = [leftHandSide] .map(mapSyntax(parent)) .reduce(mergeBlock, []); if (node.value === '&&') { return [ ...[rightHandSide].map(mapSyntax(parent)).reduce(mergeBlock, []), { kind: opcode.i32Const, params: [0] }, ...condition, selectOpcode, ]; } return [ ...condition, ...[rightHandSide].map(mapSyntax(parent)).reduce(mergeBlock, []), ...condition, selectOpcode, ]; }; export default generateSelect;