Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Initializer.h

    r843054c2 r4d2434a  
    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 : Peter A. Buhr
    12 // Last Modified On : Mon May 18 09:03:48 2015
    13 // Update Count     : 1
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Apr 12 13:49:13 2016
     13// Update Count     : 19
    1414//
    1515
     
    2020#include "Visitor.h"
    2121#include "Mutator.h"
     22#include "Type.h"
    2223
    2324#include <cassert>
     
    2728  public:
    2829        //      Initializer( std::string _name = std::string(""), int _pos = 0 );
    29         Initializer( );
     30        Initializer( bool maybeConstructed );
     31        Initializer( const Initializer & other );
    3032        virtual ~Initializer();
    3133
     
    4345        }
    4446
     47        bool get_maybeConstructed() { return maybeConstructed; }
     48
    4549        virtual Initializer *clone() const = 0;
    4650        virtual void accept( Visitor &v ) = 0;
     
    5054        //      std::string name;
    5155        //      int pos;
     56        bool maybeConstructed;
    5257};
    5358
     
    5560class SingleInit : public Initializer {
    5661  public:
    57         SingleInit( Expression *value, std::list< Expression *> &designators );
     62        SingleInit( Expression *value, const std::list< Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );
    5863        SingleInit( const SingleInit &other );
    5964        virtual ~SingleInit();
    60        
     65
    6166        Expression *get_value() { return value; }
    6267        void set_value( Expression *newValue ) { value = newValue; }
     
    6570        std::list<Expression *> &get_designators() { return designators; }
    6671
    67         virtual SingleInit *clone() const;
     72        virtual SingleInit *clone() const { return new SingleInit( *this); }
    6873        virtual void accept( Visitor &v ) { v.visit( this ); }
    6974        virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    7984class ListInit : public Initializer {
    8085  public:
    81         ListInit( std::list<Initializer*> &,
    82                           std::list<Expression *> &designators = *(new std::list<Expression *>()) );
     86        ListInit( const std::list<Initializer*> &initializers,
     87                          const std::list<Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );
    8388        virtual ~ListInit();
    8489
     
    8893        std::list<Initializer*> &get_initializers() { return initializers; }
    8994
    90         std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); }
    91         std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
     95        typedef std::list<Initializer*>::iterator iterator;
     96        iterator begin() { return initializers.begin(); }
     97        iterator end() { return initializers.end(); }
    9298
    93         virtual ListInit *clone() const;
     99        virtual ListInit *clone() const { return new ListInit( *this ); }
    94100        virtual void accept( Visitor &v ) { v.visit( this ); }
    95101        virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    100106};
    101107
     108// ConstructorInit represents an initializer that is either a constructor expression or
     109// a C-style initializer.
     110class 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
     136std::ostream & operator<<( std::ostream & out, Initializer * init );
     137
    102138#endif // INITIALIZER_H
    103139
Note: See TracChangeset for help on using the changeset viewer.