예제 #1
0
        Decl *parse_decl_enum(SrcPos pos)
        {
            char *name = null;

            if (is_token(TOKEN_NAME))
            {
                name = parse_name();
            }
            Typespec *type = null;

            if (match_token(TOKEN_ASSIGN))
            {
                type = parse_type();
            }
            expect_token(TOKEN_LBRACE);
            EnumItem *items = null;
            var       buf   = Buffer <EnumItem> .Create(16);

            while (!is_token(TOKEN_RBRACE))
            {
                buf.Add(parse_decl_enum_item());
                if (!match_token(TOKEN_COMMA))
                {
                    break;
                }
            }

            expect_token(TOKEN_RBRACE);
            return(new_decl_enum(pos, name, type, buf._begin, buf.count));
        }
예제 #2
0
        Decl *new_decl_enum(SrcPos pos, char *name, Typespec *type, EnumItem *items, int num_items)
        {
            var d = new_decl(DECL_ENUM, pos, name);

            d->enum_decl.items     = items;
            d->enum_decl.type      = type;
            d->enum_decl.num_items = num_items;
            return(d);
        }