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)); }
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])