equal
deleted
inserted
replaced
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); |