private static void Main(string[] args) { // print debug messages to console Trace.Listeners.Add(new ConsoleTraceListener()); var arguments = Cli.Parse <CliArguments>(args); if (!File.Exists(arguments.InputFile)) { Console.WriteLine("Pass me a file as argument"); return; } var sw = Stopwatch.StartNew(); var wasmFile = WasmModule.Read(arguments.InputFile); sw.Stop(); Console.WriteLine($"Read in {sw.Elapsed}"); Console.WriteLine("wasm version: " + wasmFile.Version); sw = Stopwatch.StartNew(); Stream outputStream = arguments.OutputFile is null ? Console.OpenStandardOutput() : File.Open(arguments.OutputFile, FileMode.Create); using var w = new StreamWriter(outputStream); IDecompiler dec = arguments.Decompiler switch { DecompilerKind.Disassembler => (IDecompiler) new DisassemblingDecompiler(wasmFile), DecompilerKind.IntermediateRepresentation => new IntermediateRepresentationDecompiler(wasmFile), DecompilerKind.Generic => new GenericDecompiler(wasmFile), _ => throw new Exception("Invalid decompiler type specified"), }; for (uint i = arguments.Skip; i < Math.Min(arguments.Skip + arguments.Count, wasmFile.FunctionBodies.Length); i++) { Debug.WriteLine($"Decompiling function {i} (0x{i:X})"); dec.DecompileFunction(w, (int)i); } sw.Stop(); Console.WriteLine($"Written to {arguments.OutputFile} in {sw.Elapsed}"); }