module main import os const pid = os.getpid() const wasm_validate_exe = find_wasm_validate() or { println('>>> Skipping test, since wasm-validate could not be found, error: ${err}') exit(0) } fn find_wasm_validate() !string { // Prefer to find our own version first, if it was installed already // through install_wabt.vsh, since it is more likely to be known, recent, and stable: thirdpart_wasm_validate_folder := os.join_path(@VROOT, 'thirdparty', 'wabt', 'bin') extension := $if windows { '.exe' } $else { '' } wasm_validate_executable := os.join_path(thirdpart_wasm_validate_folder, 'wasm-validate${extension}') if os.exists(wasm_validate_executable) { return wasm_validate_executable } if path := os.find_abs_path_of_executable('wasm-validate') { return path } return error('could not find wasm-validate executable in thirdparty/ as well, try first `v run cmd/tools/install_wabt.vsh`') } pub fn validate(code []u8) ! { println('validating using: ${wasm_validate_exe}') outfile := os.join_path(os.temp_dir(), 'code_${pid}.wasm') os.write_file(outfile, code.bytestr())! validation_cmd := '${os.quoted_path(wasm_validate_exe)} ${os.quoted_path(outfile)}' res := os.execute(validation_cmd) if res.exit_code != 0 { eprintln('failed exit code: ${res.exit_code} | command:\n${validation_cmd}') return error('wasm-validate exited with a non zero exit code: ${res.exit_code}') } os.rm(outfile)! }