Ejemplo n.º 1
0
        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);
        }