UNPKG

walt-compiler

Version:

Alternative syntax for WebAssembly text format

32 lines (28 loc) 878 B
// @flow import invariant from 'invariant'; import mapSyntax from './map-syntax'; import mergeBlock from './merge-block'; import opcode from '../emitter/opcode'; import { LOCAL_INDEX, TYPE_INDEX } from '../semantics/metadata'; import type { GeneratorType } from './flow/types'; const generateIndirectFunctionCall: GeneratorType = (node, parent) => { const block = node.params.map(mapSyntax(parent)).reduce(mergeBlock, []); const localIndex = node.meta[LOCAL_INDEX]; const typeIndexMeta = node.meta[TYPE_INDEX]; invariant( localIndex != null, 'Undefined local index, not a valid function pointer' ); invariant( typeIndexMeta != null, 'Variable is not of a valid function pointer type' ); return [ ...block, { kind: opcode.CallIndirect, params: [typeIndexMeta, 0], }, ]; }; export default generateIndirectFunctionCall;