UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

69 lines 4.6 kB
// Used to generate unique labels. let ID = 0; function newLabel(name) { return `$_label_${name}_${ID++}`; } export function wasm_call(funcName, ...args) { if (args.length === 0) return [`(call $${funcName})`]; return [`(call $${funcName}`, args, ")"]; } /** * Pops a value from the stack, and discards it. * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/Drop) */ export function wasm_drop() { return ["drop"]; } /** * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/if...else) */ export function wasm_if(condition, thenBloc, elseBloc) { return wasm_if_typed(null, condition, thenBloc, elseBloc); } /** * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/if...else) */ export function wasm_if_i32(condition, thenBloc, elseBloc) { return wasm_if_typed("i32", condition, thenBloc, elseBloc); } /** * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/if...else) */ export function wasm_if_i64(condition, thenBloc, elseBloc) { return wasm_if_typed("i64", condition, thenBloc, elseBloc); } /** * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/if...else) */ export function wasm_if_f32(condition, thenBloc, elseBloc) { return wasm_if_typed("f32", condition, thenBloc, elseBloc); } /** * @see [MDN](https://developer.mozilla.org/en-US/docs/WebAssembly/Reference/Control_flow/if...else) */ export function wasm_if_f64(condition, thenBloc, elseBloc) { return wasm_if_typed("f64", condition, thenBloc, elseBloc); } export function wasm_if_typed(type, condition, thenBloc, elseBloc) { return [ `(if ${type ? `(result ${type})` : ""}`, [ ...condition, "(then", ...thenBloc, ")", ...(elseBloc ? ["(else", elseBloc, ")"] : []), ], ")", ]; } export function wasm_while(condition, body) { const label = newLabel("loop"); return [ `(loop ${label}`, wasm_if(condition, [...body, `(br ${label})`]), ")", ]; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YXNtL2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsa0NBQWtDO0FBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUVWLFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDMUIsT0FBTyxXQUFXLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUNyQixRQUFnQixFQUNoQixHQUFHLElBQW1CO0lBRXRCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLFVBQVUsUUFBUSxHQUFHLENBQUMsQ0FBQTtJQUNyRCxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxTQUFTO0lBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUNuQixTQUF3QixFQUN4QixRQUF1QixFQUN2QixRQUF3QjtJQUV4QixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM3RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixTQUF3QixFQUN4QixRQUF1QixFQUN2QixRQUF1QjtJQUV2QixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixTQUF3QixFQUN4QixRQUF1QixFQUN2QixRQUF1QjtJQUV2QixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixTQUF3QixFQUN4QixRQUF1QixFQUN2QixRQUF1QjtJQUV2QixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixTQUF3QixFQUN4QixRQUF1QixFQUN2QixRQUF1QjtJQUV2QixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FDekIsSUFBcUIsRUFDckIsU0FBd0IsRUFDeEIsUUFBdUIsRUFDdkIsUUFBd0I7SUFFeEIsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDdkM7WUFDSSxHQUFHLFNBQVM7WUFDWixPQUFPO1lBQ1AsR0FBRyxRQUFRO1lBQ1gsR0FBRztZQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsR0FBRztLQUNOLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FDdEIsU0FBd0IsRUFDeEIsSUFBbUI7SUFFbkIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzlCLE9BQU87UUFDSCxTQUFTLEtBQUssRUFBRTtRQUNoQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLEdBQUc7S0FDTixDQUFBO0FBQ0wsQ0FBQyJ9