int main(int argc, char** argv) { WasmResult result; WasmStackAllocator stack_allocator; WasmAllocator* allocator; wasm_init_stdio(); parse_options(argc, argv); if (s_use_libc_allocator) { allocator = &g_wasm_libc_allocator; } else { wasm_init_stack_allocator(&stack_allocator, &g_wasm_libc_allocator); allocator = &stack_allocator.allocator; } void* data; size_t size; result = wasm_read_file(allocator, s_infile, &data, &size); if (WASM_SUCCEEDED(result)) { WasmModule module; WASM_ZERO_MEMORY(module); result = wasm_read_binary_ast(allocator, data, size, &s_read_binary_options, &s_error_handler, &module); if (WASM_SUCCEEDED(result)) { if (s_generate_names) result = wasm_generate_names(allocator, &module); if (WASM_SUCCEEDED(result)) result = wasm_apply_names(allocator, &module); if (WASM_SUCCEEDED(result)) { WasmFileWriter file_writer; if (s_outfile) { result = wasm_init_file_writer(&file_writer, s_outfile); } else { wasm_init_file_writer_existing(&file_writer, stdout); } if (WASM_SUCCEEDED(result)) { result = wasm_write_ast(allocator, &file_writer.base, &module); wasm_close_file_writer(&file_writer); } } } if (s_use_libc_allocator) wasm_destroy_module(allocator, &module); wasm_free(allocator, data); wasm_print_allocator_stats(allocator); wasm_destroy_allocator(allocator); } return result; }
static WasmResult run_squirrel_file(WasmAllocator* allocator, HSQUIRRELVM v, const char* filename) { WasmResult result; void* data; size_t size; result = wasm_read_file(allocator, filename, &data, &size); if (WASM_SUCCEEDED(result)) { if (SQ_SUCCEEDED(sq_compilebuffer(v, data, size, filename, RAISE_ERROR))) { sq_pushroottable(v); if (SQ_SUCCEEDED(sq_call(v, 1, WITHOUT_RETVAL, RAISE_ERROR))) { /* do some other stuff... */ result = WASM_OK; } else { result = WASM_ERROR; } } else { result = WASM_ERROR; } wasm_free(allocator, data); } return result; }