Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Initializer.h

    r4d2434a r843054c2  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Initializer.h --
     7// Initializer.h -- 
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Apr 12 13:49:13 2016
    13 // Update Count     : 19
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon May 18 09:03:48 2015
     13// Update Count     : 1
    1414//
    1515
     
    2020#include "Visitor.h"
    2121#include "Mutator.h"
    22 #include "Type.h"
    2322
    2423#include <cassert>
     
    2827  public:
    2928        //      Initializer( std::string _name = std::string(""), int _pos = 0 );
    30         Initializer( bool maybeConstructed );
    31         Initializer( const Initializer & other );
     29        Initializer( );
    3230        virtual ~Initializer();
    3331
     
    4543        }
    4644
    47         bool get_maybeConstructed() { return maybeConstructed; }
    48 
    4945        virtual Initializer *clone() const = 0;
    5046        virtual void accept( Visitor &v ) = 0;
     
    5450        //      std::string name;
    5551        //      int pos;
    56         bool maybeConstructed;
    5752};
    5853
     
    6055class SingleInit : public Initializer {
    6156  public:
    62         SingleInit( Expression *value, const std::list< Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );
     57        SingleInit( Expression *value, std::list< Expression *> &designators );
    6358        SingleInit( const SingleInit &other );
    6459        virtual ~SingleInit();
    65 
     60       
    6661        Expression *get_value() { return value; }
    6762        void set_value( Expression *newValue ) { value = newValue; }
     
    7065        std::list<Expression *> &get_designators() { return designators; }
    7166
    72         virtual SingleInit *clone() const { return new SingleInit( *this); }
     67        virtual SingleInit *clone() const;
    7368        virtual void accept( Visitor &v ) { v.visit( this ); }
    7469        virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    8479class ListInit : public Initializer {
    8580  public:
    86         ListInit( const std::list<Initializer*> &initializers,
    87                           const std::list<Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );
     81        ListInit( std::list<Initializer*> &,
     82                          std::list<Expression *> &designators = *(new std::list<Expression *>()) );
    8883        virtual ~ListInit();
    8984
     
    9388        std::list<Initializer*> &get_initializers() { return initializers; }
    9489
    95         typedef std::list<Initializer*>::iterator iterator;
    96         iterator begin() { return initializers.begin(); }
    97         iterator end() { return initializers.end(); }
     90        std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); }
     91        std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
    9892
    99         virtual ListInit *clone() const { return new ListInit( *this ); }
     93        virtual ListInit *clone() const;
    10094        virtual void accept( Visitor &v ) { v.visit( this ); }
    10195        virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    106100};
    107101
    108 // ConstructorInit represents an initializer that is either a constructor expression or
    109 // a C-style initializer.
    110 class ConstructorInit : public Initializer {
    111   public:
    112         ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init );
    113         ConstructorInit( const ConstructorInit &other );
    114         virtual ~ConstructorInit();
    115 
    116         void set_ctor( Statement * newValue ) { ctor = newValue; }
    117         Statement * get_ctor() const { return ctor; }
    118         void set_dtor( Statement * newValue ) { dtor = newValue; }
    119         Statement * get_dtor() const { return dtor; }
    120         void set_init( Initializer * newValue ) { init = newValue; }
    121         Initializer * get_init() const { return init; }
    122 
    123         ConstructorInit *clone() const { return new ConstructorInit( *this ); }
    124         virtual void accept( Visitor &v ) { v.visit( this ); }
    125         virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    126         virtual void print( std::ostream &os, int indent = 0 );
    127 
    128   private:
    129         Statement * ctor;
    130         Statement * dtor;
    131         // C-style initializer made up of SingleInit and ListInit nodes to use as a fallback
    132         // if an appropriate constructor definition is not found by the resolver
    133         Initializer * init;
    134 };
    135 
    136 std::ostream & operator<<( std::ostream & out, Initializer * init );
    137 
    138102#endif // INITIALIZER_H
    139103
Note: See TracChangeset for help on using the changeset viewer.