source: translator/SynTree/Initializer.h @ c11e31c

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsctordeferred_resndemanglerenumforall-pointer-decaygc_noraiijacob/cs343-translationjenkins-sandboxmemorynew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newstringwith_gc
Last change on this file since c11e31c was bdd516a, checked in by Peter A. Buhr <pabuhr@…>, 9 years ago

fixed sizeof type variable, find lowest cost alternative for sizeof expression, removed unused classes, added compiler flag, remove temporary file for -CFA, formatting

  • Property mode set to 100644
File size: 3.2 KB
Line 
1#ifndef INITIALIZER_H
2#define INITIALIZER_H
3
4#include "SynTree.h"
5#include "Visitor.h"
6#include "Mutator.h"
7
8#include <cassert>
9
10
11// Initializer: base class for object initializers (provide default values)
12class Initializer {
13  public:
14    //  Initializer( std::string _name = std::string(""), int _pos = 0 );
15    Initializer( );
16    virtual ~Initializer();
17
18    static std::string designator_name( Expression *designator );
19
20    //  void set_name( std::string newValue ) { name = newValue; }
21    //  std::string get_name() const { return name; }
22
23    //  void set_pos( int newValue ) { pos = newValue; }
24    //  int get_pos() const { return pos; }
25    virtual void set_designators( std::list<Expression *> & ) { assert(false); }
26    virtual std::list<Expression *> &get_designators() {
27        assert(false);
28        std::list<Expression *> *ret = 0; return *ret;  // never reached
29    }
30
31    virtual Initializer *clone() const = 0;
32    virtual void accept( Visitor &v ) = 0;
33    virtual Initializer *acceptMutator( Mutator &m ) = 0;
34    virtual void print( std::ostream &os, int indent = 0 );
35  private:
36    //  std::string name;
37    //  int pos;
38};
39
40// SingleInit represents an initializer for a common object (e.g., int x = 4)
41class SingleInit : public Initializer {
42  public:
43    SingleInit( Expression *value, std::list< Expression *> &designators );
44    SingleInit( const SingleInit &other );
45    virtual ~SingleInit();
46   
47    Expression *get_value() { return value; }
48    void set_value( Expression *newValue ) { value = newValue; }
49
50    void set_designators( std::list<Expression *> &newValue ) { designators = newValue; }
51    std::list<Expression *> &get_designators() { return designators; }
52
53    virtual SingleInit *clone() const;
54    virtual void accept( Visitor &v ) { v.visit( this ); }
55    virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
56    virtual void print( std::ostream &os, int indent = 0 );
57  private:
58    //Constant *value;
59    Expression *value;  // has to be a compile-time constant
60    std::list< Expression * > designators;
61};
62
63// ListInit represents an initializer that is composed recursively of a list of initializers; this is used to initialize
64// an array or aggregate
65class ListInit : public Initializer {
66  public:
67    ListInit( std::list<Initializer*> &, 
68              std::list<Expression *> &designators = *(new std::list<Expression *>()) );
69    virtual ~ListInit();
70
71    void set_designators( std::list<Expression *> &newValue ) { designators = newValue; }
72    std::list<Expression *> &get_designators() { return designators; }
73    void set_initializers( std::list<Initializer*> &newValue ) { initializers = newValue; }
74    std::list<Initializer*> &get_initializers() { return initializers; }
75
76    std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); }
77    std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
78
79    virtual ListInit *clone() const;
80    virtual void accept( Visitor &v ) { v.visit( this ); }
81    virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
82    virtual void print( std::ostream &os, int indent = 0 );
83  private:
84    std::list<Initializer*> initializers;  // order *is* important
85    std::list<Expression *> designators;
86};
87
88#endif // INITIALIZER_H
Note: See TracBrowser for help on using the repository browser.