stage4/stage4.cc
changeset 46 fc1b78ea6d84
parent 41 8998c8b24b60
child 55 8b7a21820737
equal deleted inserted replaced
45:3b6bf2b5f1df 46:fc1b78ea6d84
    51   out = &std::cout;
    51   out = &std::cout;
    52   this->indent_level = indent_level;
    52   this->indent_level = indent_level;
    53   this->indent_spaces = "";
    53   this->indent_spaces = "";
    54 }
    54 }
    55 
    55 
    56 stage4out_c::stage4out_c(const char *radix, const char *extension, std::string indent_level) {	
    56 stage4out_c::stage4out_c(const char *dir, const char *radix, const char *extension, std::string indent_level) {	
    57   std::string filename(radix);
    57   std::string filename(radix);
    58   filename += ".";
    58   filename += ".";
    59   filename += extension;
    59   filename += extension;
    60   std::fstream *file = new std::fstream(filename.c_str(), std::fstream::out);
    60   std::string filepath("");
       
    61   if (dir != NULL) {
       
    62     filepath += dir;
       
    63     filepath += "/";
       
    64   }
       
    65   filepath += filename;
       
    66   std::fstream *file = new std::fstream(filepath.c_str(), std::fstream::out);
    61   if(file->fail()){
    67   if(file->fail()){
    62     std::cerr << "Cannot open " << filename << " for write access \n";
    68     std::cerr << "Cannot open " << filename << " for write access \n";
    63     exit(EXIT_FAILURE);
    69     exit(EXIT_FAILURE);
    64   }else{
    70   }else{
    65     std::cout << filename << "\n";
    71     std::cout << filename << "\n";
   155 
   161 
   156 
   162 
   157 
   163 
   158 /* forward declarations... */
   164 /* forward declarations... */
   159 /* These functions will be implemented in generate_XXX.cc */
   165 /* These functions will be implemented in generate_XXX.cc */
   160 visitor_c *new_code_generator(stage4out_c *s4o);
   166 visitor_c *new_code_generator(stage4out_c *s4o, const char *builddir);
   161 void delete_code_generator(visitor_c *code_generator);
   167 void delete_code_generator(visitor_c *code_generator);
   162 
   168 
   163 
   169 
   164 int stage4(symbol_c *tree_root) {
   170 int stage4(symbol_c *tree_root, const char *builddir) {
   165   stage4out_c s4o;
   171   stage4out_c s4o;
   166   visitor_c *generate_code = new_code_generator(&s4o);
   172   visitor_c *generate_code = new_code_generator(&s4o, builddir);
   167 
   173 
   168   if (NULL == generate_code)
   174   if (NULL == generate_code)
   169     return -1;
   175     return -1;
   170 
   176 
   171   tree_root->accept(*generate_code);
   177   tree_root->accept(*generate_code);