Example #1
0
        internal static CTFTypeSpecifier ParseTypeSpecifier(CTFScope scope, TokParser tp)
        {
            Token.EnumId id = tp.Token.Id;
            switch (id)
            {
            case Token.EnumId.VOID:
            case Token.EnumId.CHAR:
            case Token.EnumId.SHORT:
            case Token.EnumId.INT:
            case Token.EnumId.FLOAT:
            case Token.EnumId.DOUBLE:
            case Token.EnumId.SIGNED:
            case Token.EnumId.BOOL:
            case Token.EnumId.COMPLEX:
            case Token.EnumId.IMAGINARY:
                throw new CTFException();     // unsupported

            case Token.EnumId.LONG:
            case Token.EnumId.UNSIGNED:
                tp.Next();
                return(Get(id));

            case Token.EnumId.STRUCT:
                return(CTFStructSpecifier.Parse(scope, tp));

            case Token.EnumId.VARIANT:
                return(CTFVaraintSpecifier.Parse(scope, tp));

            case Token.EnumId.ENUM:
                return(CTFEnumSpecifier.Parse(scope, tp));

            // ctf-type-specifier
            case Token.EnumId.FLOATING_POINT:
            case Token.EnumId.INTEGER:
                tp.Next();
                tp.MustBe(Token.EnumId.LCURL);
                List <CTFAssignmentExpression> cael = CTFAssignmentExpression.ParseList(scope, tp);
                tp.MustBe(Token.EnumId.RCURL);
                return(new CTFATypeSpecifier(id, cael));

            case Token.EnumId.STRING:
                tp.Next();
                return(Get(Token.EnumId.STRING));

            case Token.EnumId.IDEN:     // must be a type in a scope
                CTFTypeSpecifier ct = CTFNTypeSpecifier.Get(scope, tp.Token.Buffer);
                if (ct == null)
                {
                    return(null);
                }

                tp.Next();
                return(ct);
            }

            return(null);
        }
Example #2
0
        public void MustBe(Token.EnumId id)
        {
            if (Token.Id != id)
            {
                throw new CTFException();
            }

            Next();
        }
Example #3
0
        public bool Match(Token.EnumId id)
        {
            if (Token.Id != id)
            {
                return(false);
            }

            Next();
            return(true);
        }
Example #4
0
        public static CTFTypeSpecifier Get(Token.EnumId id)
        {
            CTFTypeSpecifier value;

            cache.TryGetValue(id, out value);
            if (value == null)
            {
                value = new CTFITypeSpecifier(id);
                cache.Add(id, value);
            }

            return(value);
        }
Example #5
0
 private CTFEnumSpecifier(Token.EnumId id, List <CTFTypeSpecifier> cds, List <CTFEnumElem> list) : base(id)
 {
     this.Cds  = cds;
     this.List = list;
 }
Example #6
0
 public CTFITypeSpecifier(Token.EnumId id)
 {
     this.Id = id;
 }
Example #7
0
 public CTFATypeSpecifier(Token.EnumId id, List <CTFAssignmentExpression> cael) : base(id)
 {
     this.cael = cael;
 }
 private CTFVaraintSpecifier(Token.EnumId id, CTFUnaryExpression cue, List <CTFStructOrVariantDeclaration> list)
 {
     this.Cue  = cue;
     this.List = list;
 }