Example #1
0
        public static Trapl.Core.Session Compile(string src)
        {
            var session = new Trapl.Core.Session();
            session.PrimitiveBool = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("Bool"));
            session.PrimitiveInt = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("Int"));
            session.PrimitiveUInt = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("UInt"));

            var input = Trapl.Core.TextInput.MakeFromString(src);
            var tokens = Trapl.Grammar.Tokenizer.Tokenize(session, input);
            var topLevelNode = Trapl.Grammar.ASTParser.Parse(session, tokens);

            if (session.HasInternalErrors())
                Assert.Inconclusive("Internal compiler error.");

            if (session.HasErrors() || topLevelNode == null)
                Assert.Inconclusive("Syntax error.");

            var resolver = new Trapl.Semantics.DeclResolver(session);
            resolver.ResolveTopLevelDeclGroup(topLevelNode);
            resolver.ResolveStructFields();

            if (!Trapl.Semantics.StructRecursionChecker.Check(session))
            {
                resolver.ResolveFunctHeaders();
                resolver.ResolveFunctBodies();
            }

            session.PrintMessagesToConsole();

            return session;
        }
Example #2
0
        public static Trapl.Core.Session Fail(this Trapl.Core.Session session)
        {
            if (session.HasInternalErrors())
            {
                Assert.Inconclusive("Internal compiler error.");
            }

            Assert.IsTrue(session.HasErrors(), "Compilation encountered no errors, but some were expected.");
            return(session);
        }
Example #3
0
        public static Trapl.Core.Session FailWithCode(this Trapl.Core.Session session, Trapl.Diagnostics.MessageCode code)
        {
            if (session.HasInternalErrors())
            {
                Assert.Inconclusive("Internal compiler error.");
            }

            Assert.IsTrue(session.HasErrors(), "Compilation encountered no errors, but some were expected.");
            Assert.IsTrue(session.HasMessagesWithCode(code), "No errors of the specified code were encountered.");

            return(session);
        }
Example #4
0
        public static Trapl.Core.Type ResolveType(Trapl.Core.Session session, string typeName)
        {
            var input  = Trapl.Core.TextInput.MakeFromString(typeName);
            var tokens = Trapl.Grammar.Tokenizer.Tokenize(session, input);

            var astParser = new Trapl.Grammar.ASTParser(session, tokens);
            var typeNode  = astParser.ParseType();

            var type = Trapl.Semantics.TypeResolver.Resolve(session, typeNode, null, false);

            if (type.IsError())
            {
                Assert.Inconclusive("Type resolve error.");
            }

            return(type);
        }
Example #5
0
        public static Trapl.Core.Session LocalTypeOk(this Trapl.Core.Session session, string fnName, string localName, string typeName)
        {
            var name  = Trapl.Core.Name.FromPath(localName);
            var type  = Util.ResolveType(session, typeName);
            var funct = session.GetFunct(
                session.GetDeclsWithUseDirectives(
                    Trapl.Core.Name.FromPath(fnName),
                    true,
                    null)[0].index);
            var binding = funct.localBindings.Find(b => b.name.Compare(name));

            Assert.IsTrue(funct.registerTypes[binding.registerIndex].IsSame(type),
                          "Local type mismatch. Expecting '" +
                          type.GetString(session) + "', got '" +
                          funct.registerTypes[binding.registerIndex].GetString(session) + "'.");
            return(session);
        }
Example #6
0
        public static Trapl.Core.Session Compile(string src)
        {
            var session = new Trapl.Core.Session();

            session.PrimitiveBool = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("Bool"));
            session.PrimitiveInt  = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("Int"));
            session.PrimitiveUInt = session.CreatePrimitiveStruct(Trapl.Core.Name.FromPath("UInt"));

            var input        = Trapl.Core.TextInput.MakeFromString(src);
            var tokens       = Trapl.Grammar.Tokenizer.Tokenize(session, input);
            var topLevelNode = Trapl.Grammar.ASTParser.Parse(session, tokens);

            if (session.HasInternalErrors())
            {
                Assert.Inconclusive("Internal compiler error.");
            }

            if (session.HasErrors() || topLevelNode == null)
            {
                Assert.Inconclusive("Syntax error.");
            }

            var resolver = new Trapl.Semantics.DeclResolver(session);

            resolver.ResolveTopLevelDeclGroup(topLevelNode);
            resolver.ResolveStructFields();

            if (!Trapl.Semantics.StructRecursionChecker.Check(session))
            {
                resolver.ResolveFunctHeaders();
                resolver.ResolveFunctBodies();
            }

            session.PrintMessagesToConsole();

            return(session);
        }
Example #7
0
 public static Trapl.Core.Session LocalOk(this Trapl.Core.Session session, string localName, string typeName)
 {
     Util.LocalTypeOk(session, "test", localName, typeName);
     return(session);
 }