示例#1
0
        public static Core.Name Resolve(Grammar.ASTNodeName nameNode)
        {
            var identifiers = new List <string>();

            foreach (var ident in nameNode.path.identifiers)
            {
                identifiers.Add(ident.GetExcerpt());
            }

            return(Core.Name.FromPath(identifiers.ToArray()));
        }
示例#2
0
        public static Core.Type ResolveStruct(
            Core.Session session,
            Grammar.ASTNodeName nameNode,
            IList <Core.UseDirective> useDirectives,
            bool mustBeResolved)
        {
            var name = NameResolver.Resolve(nameNode);

            var foundDecls = session.GetDeclsWithUseDirectives(name, nameNode.path.isRooted, useDirectives);

            if (!session.ValidateSingleDecl(foundDecls, name, nameNode.GetSpan()))
            {
                return(new Core.TypeError());
            }

            if (!session.ValidateAsType(foundDecls[0], name, nameNode.GetSpan()))
            {
                return(new Core.TypeError());
            }

            return(Core.TypeStruct.Of(foundDecls[0].index));
        }