@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
69 lines • 4.6 kB
JavaScript
// 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