CompleteType() public method

public CompleteType ( Type type ) : Token
type Type
return Token
Esempio n. 1
0
        public Token CompleteType(Type type)
        {
            Token tok  = this;
            bool  save = type != null;

            if (tok.IsConst())
            {
                if (save)
                {
                    type.IsConst = true;
                }
                tok = tok.Next();
            }
            if (save)
            {
                type.Name = tok.Value;
            }
            tok = tok.Next();
            if (tok.IsTemplateBegin())
            {
                if (save)
                {
                    type.IsTemplate = true;
                    type.SubType    = new Type();
                }
                tok = tok.Next();
                tok = tok.CompleteType(save ? type.SubType : null);
                if (!tok.IsTemplateEnd())
                {
                    Program.Log("Not closed template?");
                }
                tok = tok.Next();
            }
            //Console.WriteLine("endtok: " + tok.Value);
            while (tok.IsTypeSpec())
            {
                //Console.WriteLine("mod: "+tok.Value);
                if (save)
                {
                    type.ModName += tok.Value;
                }
                tok = tok.Next();
            }
            return(tok);
        }
Esempio n. 2
0
        private void fixArguments(Token tok)
        {
            String        funcname = tok.Prev().Prev().Value;
            List <String> nonbasic = new List <String>();

            while (!tok.IsRightPar())
            {
                Type type = new Type();
                tok = tok.CompleteType(type);
                String ident = tok.IsIdentifier() ? tok.Value : "anonymous";

                if (tok.IsIdentifier() && !type.IsBasic() && type.ModName == "")
                {
                    nonbasic.Add(ident);
                }
                if (tok.IsIdentifier())
                {
                    tok = tok.Next();
                }
                if (tok.IsEnd() || tok.IsRightPar())
                {
                    break;
                }

                tok = tok.Next();
                if (tok.IsEnd())
                {
                    break;
                }
            }

            tok = tok.Next();
            if (!tok.IsLeftBracket())
            {
                return;
            }

            tok = tok.Next();
            if (tok.IsEnd())
            {
                return;
            }
            int   level = tok.ScopeLevel;
            Token next;
            Token prev;

            while (nonbasic.Count > 0 && !tok.IsRightBracket() && !tok.IsEnd() && tok.ScopeLevel == level)
            {
                next = tok.Next();
                prev = tok.Prev();
                if (tok.IsIdentifier() && !next.IsEnd() && prev.IsSemi() && next.IsAssign() && nonbasic.Contains(tok.Value))
                {
                    nonbasic.Remove(tok.Value);
                }
                tok = tok.Next();
            }

            if (nonbasic.Count > 0)
            {
                Program.LogNoLine(funcname + ": nonbasic value-args without assignment found: ");
                bool comma = false;
                foreach (String s in nonbasic)
                {
                    if (comma)
                    {
                        Program.LogNoLine(", ", false);
                    }
                    else
                    {
                        comma = true;
                    }
                    Program.LogNoLine(s, false);
                }
                Program.Log(".", false);
            }
        }
Esempio n. 3
0
        private void fixArguments(Token tok)
        {
            String funcname = tok.Prev().Prev().Value;
            List<String> nonbasic = new List<String>();
            while (!tok.IsRightPar())
            {
                Type type = new Type();
                tok = tok.CompleteType(type);
                String ident = tok.IsIdentifier() ? tok.Value : "anonymous";

                if (tok.IsIdentifier() && !type.IsBasic() && type.ModName=="") nonbasic.Add(ident);
                if (tok.IsIdentifier()) tok = tok.Next();
                if (tok.IsEnd() || tok.IsRightPar()) break;

                tok = tok.Next();
                if (tok.IsEnd()) break;
            }

            tok = tok.Next();
            if (!tok.IsLeftBracket())
                return;

            tok=tok.Next();
            if (tok.IsEnd()) return;
            int level = tok.ScopeLevel;
            Token next;
            Token prev;
            while (nonbasic.Count>0 && !tok.IsRightBracket() && !tok.IsEnd() && tok.ScopeLevel == level)
            {
                next=tok.Next();
                prev = tok.Prev();
                if (tok.IsIdentifier() && !next.IsEnd() && prev.IsSemi() && next.IsAssign() && nonbasic.Contains(tok.Value))
                {
                    nonbasic.Remove(tok.Value);
                }
                tok = tok.Next();
            }

            if (nonbasic.Count > 0)
            {
                Program.LogNoLine(funcname + ": nonbasic value-args without assignment found: ");
                bool comma = false;
                foreach (String s in nonbasic)
                {
                    if (comma) Program.LogNoLine(", ",false); else comma = true;
                    Program.LogNoLine(s,false);
                }
                Program.Log(".",false);
            }
        }