Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Decl.hpp

    r07de76b r312029a  
    1010// Created On       : Thu May 9 10:00:00 2019
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Dec 13 17:38:33 2019
    13 // Update Count     : 29
     12// Last Modified On : Wed Dec 11 08:20:20 2019
     13// Update Count     : 16
    1414//
    1515
     
    2020#include <unordered_map>
    2121#include <vector>
    22 #include <algorithm>
    2322
    2423#include "FunctionSpec.hpp"
     
    2827#include "ParseNode.hpp"
    2928#include "StorageClasses.hpp"
     29#include "TypeVar.hpp"
    3030#include "Visitor.hpp"
    31 #include "Common/utility.h"
    32 #include "Common/SemanticError.h"                                               // error_str
     31#include "Parser/ParseNode.h"  // for DeclarationNode::Aggregate
    3332
    3433// Must be included in *all* AST classes; should be #undef'd at the end of the file
     
    126125        std::vector< ptr<Expr> > withExprs;
    127126
    128         FunctionDecl( const CodeLocation & loc, const std::string & name, FunctionType * type,
     127        FunctionDecl( const CodeLocation & loc, const std::string &name, FunctionType * type,
    129128                CompoundStmt * stmts, Storage::Classes storage = {}, Linkage::Spec linkage = Linkage::C,
    130129                std::vector<ptr<Attribute>>&& attrs = {}, Function::Specs fs = {})
     
    137136        bool has_body() const { return stmts; }
    138137
    139         const DeclWithType * accept( Visitor & v ) const override { return v.visit( this ); }
     138        const DeclWithType * accept( Visitor &v ) const override { return v.visit( this ); }
    140139private:
    141140        FunctionDecl * clone() const override { return new FunctionDecl( *this ); }
     
    164163/// Cforall type variable: `dtype T`
    165164class TypeDecl final : public NamedTypeDecl {
    166   public:
    167         enum Kind { Dtype, Otype, Ftype, Ttype, NUMBER_OF_KINDS };
    168 
    169         Kind kind;
     165public:
     166        TypeVar::Kind kind;
    170167        bool sized;
    171168        ptr<Type> init;
     
    173170        /// Data extracted from a type decl
    174171        struct Data {
    175                 Kind kind;
     172                TypeVar::Kind kind;
    176173                bool isComplete;
    177174
    178                 Data() : kind( NUMBER_OF_KINDS ), isComplete( false ) {}
     175                Data() : kind( (TypeVar::Kind)-1 ), isComplete( false ) {}
    179176                Data( const TypeDecl * d ) : kind( d->kind ), isComplete( d->sized ) {}
    180                 Data( Kind k, bool c ) : kind( k ), isComplete( c ) {}
     177                Data( TypeVar::Kind k, bool c ) : kind( k ), isComplete( c ) {}
    181178                Data( const Data & d1, const Data & d2 )
    182                         : kind( d1.kind ), isComplete( d1.isComplete || d2.isComplete ) {}
    183 
    184                 bool operator==( const Data & o ) const { return kind == o.kind && isComplete == o.isComplete; }
    185                 bool operator!=( const Data & o ) const { return !(*this == o); }
     179                : kind( d1.kind ), isComplete( d1.isComplete || d2.isComplete ) {}
     180
     181                bool operator== ( const Data & o ) const {
     182                        return kind == o.kind && isComplete == o.isComplete;
     183                }
     184                bool operator!= ( const Data & o ) const { return !(*this == o); }
    186185        };
    187186
    188         TypeDecl( const CodeLocation & loc, const std::string & name, Storage::Classes storage, Type * b,
    189                           Kind k, bool s, Type * i = nullptr )
    190                 : NamedTypeDecl( loc, name, storage, b ), kind( k ), sized( k == Ttype || s ),
    191                 init( i ) {}
     187        TypeDecl( const CodeLocation& loc, const std::string& name, Storage::Classes storage, Type* b,
     188                TypeVar::Kind k, bool s, Type* i = nullptr )
     189        : NamedTypeDecl( loc, name, storage, b ), kind( k ), sized( k == TypeVar::Ttype || s ),
     190          init( i ) {}
    192191
    193192        const char * typeString() const override;
     
    199198
    200199        const Decl * accept( Visitor & v ) const override { return v.visit( this ); }
    201   private:
     200private:
    202201        TypeDecl * clone() const override { return new TypeDecl{ *this }; }
    203202        MUTATE_FRIEND
     
    344343        ptr<AsmStmt> stmt;
    345344
    346         AsmDecl( const CodeLocation & loc, AsmStmt * stmt )
     345        AsmDecl( const CodeLocation & loc, AsmStmt *stmt )
    347346        : Decl( loc, "", {}, {} ), stmt(stmt) {}
    348347
    349         const AsmDecl * accept( Visitor & v ) const override { return v.visit( this ); }
    350 private:
    351         AsmDecl * clone() const override { return new AsmDecl( *this ); }
     348        const AsmDecl * accept( Visitor &v ) const override { return v.visit( this ); }
     349private:
     350        AsmDecl *clone() const override { return new AsmDecl( *this ); }
    352351        MUTATE_FRIEND
    353352};
     
    361360        : Decl( loc, "", {}, {} ), cond( condition ), msg( msg ) {}
    362361
    363         const StaticAssertDecl * accept( Visitor & v ) const override { return v.visit( this ); }
     362        const StaticAssertDecl * accept( Visitor &v ) const override { return v.visit( this ); }
    364363private:
    365364        StaticAssertDecl * clone() const override { return new StaticAssertDecl( *this ); }
Note: See TracChangeset for help on using the changeset viewer.