Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Decl.hpp

    re67991f r312029a  
    99// Author           : Aaron B. Moss
    1010// Created On       : Thu May 9 10:00:00 2019
    11 // Last Modified By : Aaron B. Moss
    12 // Last Modified On : Thu May 9 10:00:00 2019
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Dec 11 08:20:20 2019
     13// Update Count     : 16
    1414//
    1515
     
    154154
    155155        /// Produces a name for the kind of alias
    156         virtual std::string typeString() const = 0;
     156        virtual const char * typeString() const = 0;
    157157
    158158private:
     
    190190          init( i ) {}
    191191
    192         std::string typeString() const override;
     192        const char * typeString() const override;
    193193        /// Produces a name for generated code
    194         std::string genTypeString() const;
     194        const char * genTypeString() const;
    195195
    196196        /// convenience accessor to match Type::isComplete()
     
    212212        : NamedTypeDecl( loc, name, storage, b, spec ) {}
    213213
    214         std::string typeString() const override { return "typedef"; }
     214        const char * typeString() const override { return "typedef"; }
    215215
    216216        const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
     
    223223class AggregateDecl : public Decl {
    224224public:
     225        enum Aggregate { Struct, Union, Enum, Exception, Trait, Generator, Coroutine, Monitor, Thread, NoAggregate };
     226        static const char * aggrString( Aggregate aggr );
     227
    225228        std::vector<ptr<Decl>> members;
    226229        std::vector<ptr<TypeDecl>> params;
     
    237240
    238241        /// Produces a name for the kind of aggregate
    239         virtual std::string typeString() const = 0;
     242        virtual const char * typeString() const = 0;
    240243
    241244private:
     
    247250class StructDecl final : public AggregateDecl {
    248251public:
    249         DeclarationNode::Aggregate kind;
     252        Aggregate kind;
    250253
    251254        StructDecl( const CodeLocation& loc, const std::string& name,
    252                 DeclarationNode::Aggregate kind = DeclarationNode::Struct,
     255                Aggregate kind = Struct,
    253256                std::vector<ptr<Attribute>>&& attrs = {}, Linkage::Spec linkage = Linkage::Cforall )
    254257        : AggregateDecl( loc, name, std::move(attrs), linkage ), kind( kind ) {}
    255258
    256         bool is_coroutine() { return kind == DeclarationNode::Coroutine; }
    257         bool is_monitor() { return kind == DeclarationNode::Monitor; }
    258         bool is_thread() { return kind == DeclarationNode::Thread; }
    259 
    260         const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
    261 
    262         std::string typeString() const override { return "struct"; }
     259        bool is_coroutine() { return kind == Coroutine; }
     260        bool is_monitor() { return kind == Monitor; }
     261        bool is_thread() { return kind == Thread; }
     262
     263        const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
     264
     265        const char * typeString() const override { return aggrString( kind ); }
    263266
    264267private:
     
    276279        const Decl * accept( Visitor& v ) const override { return v.visit( this ); }
    277280
    278         std::string typeString() const override { return "union"; }
     281        const char * typeString() const override { return aggrString( Union ); }
    279282
    280283private:
     
    295298        const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
    296299
    297         std::string typeString() const override { return "enum"; }
     300        const char * typeString() const override { return aggrString( Enum ); }
    298301
    299302private:
     
    314317        const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
    315318
    316         std::string typeString() const override { return "trait"; }
     319        const char * typeString() const override { return "trait"; }
    317320
    318321private:
Note: See TracChangeset for help on using the changeset viewer.