public void TestFunctionCall() { string compileTest = @" module Program { function other(myArg : int) : int { return myArg + 50; } function main() : int { return other(50); } } "; var lexResults = lexer.Lex(new Document(compileTest, "")).GetAwaiter().GetResult(); var parseResults = parser.Parse(lexResults).GetAwaiter().GetResult(); var compileUnit = new CompileUnit(new [] { parseResults }); var compileResults = compileUnit.Compile(); System.Console.WriteLine(); foreach (var err in compileResults.Errors) { System.Console.WriteLine($"ERROR: {err.Message}"); } Assert.IsTrue(compileResults.Errors.Length == 0); byte[] image = compileResults.Output.Serialize(); System.Console.WriteLine($"Compiled Cozi IL image - {image.Length} byte(s)"); ILContext context = new ILContext(image); CoziVM vm = new CoziVM(context); foreach (var m in context.Modules) { System.Console.WriteLine(m.ToString()); } Assert.IsTrue(vm.BeginInvoke("Program", "main", out var ctx)); Assert.IsTrue(ctx.Invoke <int>() == 100); }