summaryrefslogtreecommitdiff
path: root/lib/chillcg/include/code_gen/CG_chillRepr.h
blob: 36b2fa4761fbc6a9fd1940459f1edf1c343d27d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

#ifndef CG_chillRepr_h
#define CG_chillRepr_h

//                                               Repr using chillAst internally
#include <stdio.h>
#include <string.h>
#include <code_gen/CG_outputRepr.h>

#ifndef __STDC_CONSTANT_MACROS 
#define __STDC_CONSTANT_MACROS 
#endif


#include "chillAST/chillASTs.hh"


namespace omega {

class CG_chillRepr : public CG_outputRepr {
  friend class CG_chillBuilder;
public:
  CG_chillRepr() { stmtclassname = strdup("NOTHING");  }


  char *type() const { return strdup("chill"); }; 
  // 
  std::vector<chillAST_node*> chillnodes;  // TODO make private
  void printChillNodes() const { 
    for (int i=0; i<chillnodes.size(); i++) {
      chillnodes[i]->print(); printf("\n"); } 
    fflush(stdout); 
  }; 

  CG_chillRepr( std::vector<chillAST_node*> cnodes ) { 
    chillnodes = cnodes;
  }

  CG_chillRepr( chillAST_node *chillast ) { 
    stmtclassname = strdup(chillast->getTypeString()); 
    //fprintf(stderr, "made new chillRepr of class %s\n", stmtclassname); 
    if (chillast->asttype == CHILLAST_NODETYPE_COMPOUNDSTMT) { 
      std::vector<chillAST_node*> children = chillast->getChildren(); 
      int numchildren = children.size();
      for (int i=0; i<numchildren; i++) {
        chillnodes.push_back( children[i] ); 
        //fprintf(stderr, "adding a statement from a CompoundStmt\n"); 
      }
    }
    else { // for now, assume it's a single statement 
      chillnodes.push_back( chillast );  // ?? 
    }
  }
  void addStatement( chillAST_node *s ) { chillnodes.push_back( s ); } ;
  
  std::vector<chillAST_node*> getChillCode() const { return chillnodes; }; 

  chillAST_node *GetCode() ;
 
  
  ~CG_chillRepr();
  CG_outputRepr *clone() const;
  void clear();

  
  



  //---------------------------------------------------------------------------
  // Dump operations
  //---------------------------------------------------------------------------
  void dump() const { printChillNodes(); }; 
  void Dump() const;
  //void DumpToFile(FILE *fp = stderr) const;
private:


  char *stmtclassname;    // chill 
  
};



} // namespace

#endif