コード例 #1
0
        public void TestCanAccessScopeForMain()
        {
            var TestProgram = @"use std;
            main(x: int, y: int):void { myprint(x + y);}
            myprint(x: int): void {std.print(""the answer is "" + x);}";

            var ast         = ParseProgramToAst(TestProgram) as FifthProgram;
            var globalScope = ast.NearestScope();
            var visitor     = new SymbolTableBuilderVisitor();

            ast.Accept(visitor);
            Assert.That(globalScope.SymbolTable.Count, Is.EqualTo(2));
            var mainfuncdecl = ast.Functions.First(f => f.Name == "main");
            var mainScope    = mainfuncdecl.NearestScope();

            Assert.That(mainScope, Is.Not.Null);
            Assert.That(mainScope.SymbolTable.Count, Is.EqualTo(2));
        }
コード例 #2
0
        public void TestCanGatherMultipleDefinitions()
        {
            var TestProgram = @"main():void {myprint(""hello world"");}
            myprint(x: string):void { print(x);}
            blah():void{ result: int = 5; return result;}";

            if (!FifthParserManager.TryParse <FifthProgram>(TestProgram, out var ast, out var errors))
            {
                Assert.Fail();
            }
            var globalScope = ast.NearestScope();

            var visitor = new SymbolTableBuilderVisitor();

            ast.Accept(visitor);
            var symtab = globalScope.SymbolTable;

            Assert.That(symtab.Count, Is.EqualTo(5)); // the three above plus two builtins
            foreach (var v in symtab.Values.ToArray()[0..2])