@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
59 lines • 4.48 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93YXNtL2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsa0NBQWtDO0FBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUVWLFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDMUIsT0FBTyxXQUFXLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFBO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWdCLEVBQUUsR0FBRyxJQUFtQjtJQUM5RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxVQUFVLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDckQsT0FBTyxDQUFDLFVBQVUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQzVDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUztJQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDbkIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUF3QixFQUFFLFFBQXVCLEVBQUUsUUFBd0I7SUFDL0YsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxTQUF3QixFQUFFLFFBQXVCLEVBQUUsUUFBdUI7SUFDbEcsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxTQUF3QixFQUFFLFFBQXVCLEVBQUUsUUFBdUI7SUFDbEcsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxTQUF3QixFQUFFLFFBQXVCLEVBQUUsUUFBdUI7SUFDbEcsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxTQUF3QixFQUFFLFFBQXVCLEVBQUUsUUFBdUI7SUFDbEcsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQ3pCLElBQXFCLEVBQ3JCLFNBQXdCLEVBQ3hCLFFBQXVCLEVBQ3ZCLFFBQXdCO0lBRXhCLE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLENBQUMsR0FBRyxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLEdBQUc7S0FDTixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBd0IsRUFBRSxJQUFtQjtJQUNwRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsT0FBTyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ2xGLENBQUMifQ==