# | Line 60 | Line 60 | class SimplePreprocessor { | |
---|---|---|
60 | namespace oopse { | |
61 | class SimplePreprocessor { | |
62 | public: | |
63 | < | bool preprocess(const std::string& filename, ostream& os) { |
63 | > | bool preprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os) { |
64 | std::set<std::string> defineSet; | |
65 | std::stack<bool> ifStates; | |
66 | ||
67 | ifStates.push(true); | |
68 | < | return doPreprocess(filename, os, defineSet, ifStates); |
68 | > | return doPreprocess(myStream, filename, startingLine, os, defineSet, ifStates); |
69 | } | |
70 | ||
71 | private: | |
72 | < | bool doPreprocess(const std::string& filename, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) { |
73 | < | std::ifstream input(filename.c_str()); |
74 | < | if (!input.is_open()) { |
75 | < | std::stringstream ss; |
76 | < | ss << "Can not open " << filename << " for preprocessing\n"; |
77 | < | |
78 | < | sprintf(painCave.errMsg, |
79 | < | "Can not open (%s) for processing. \n" |
80 | < | "\tPlease check md file name syntax.\n", filename.c_str()); |
81 | < | |
82 | < | painCave.isFatal = 1; |
83 | < | simError(); |
84 | < | |
85 | < | throw OOPSEException(ss.str()); |
86 | < | } |
87 | < | int lineNo =1; |
72 | > | bool doPreprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) { |
73 | > | //std::ifstream input(filename.c_str()); |
74 | > | //if (!input.is_open()) { |
75 | > | // std::stringstream ss; |
76 | > | // ss << "Can not open " << filename << " for preprocessing\n"; |
77 | > | // |
78 | > | // sprintf(painCave.errMsg, |
79 | > | // "Can not open (%s) for processing. \n" |
80 | > | // "\tPlease check md file name syntax.\n", filename.c_str()); |
81 | > | // |
82 | > | // painCave.isFatal = 1; |
83 | > | // simError(); |
84 | > | // |
85 | > | // throw OOPSEException(ss.str()); |
86 | > | //} |
87 | > | int lineNo = startingLine; |
88 | os << "#line " << lineNo << " \"" << filename << "\"\n"; | |
89 | < | while(input.getline(buffer, bufferSize)) { |
89 | > | const int bufferSize = 1024; |
90 | > | char buffer[bufferSize]; |
91 | > | while(myStream.getline(buffer, bufferSize)) { |
92 | ++lineNo; | |
93 | std::string line = trimLeftCopy(buffer); | |
94 | if (!line.empty() && line[0] == '#') { | |
# | Line 108 | Line 110 | class SimplePreprocessor { | |
110 | SimplePreprocessor subPreprocessor; | |
111 | std::string includeFilename = tokens[1]; | |
112 | includeFilename = includeFilename.substr(1, includeFilename.length() -2); | |
113 | < | bool ret = subPreprocessor.doPreprocess(includeFilename, os, defineSet, ifStates); |
113 | > | std::ifstream includeStream(includeFilename.c_str()); |
114 | > | if (!includeStream.is_open()) { |
115 | > | std::stringstream ss; |
116 | > | ss << "Can not open " << includeFilename << " for preprocessing\n"; |
117 | > | throw OOPSEException(ss.str()); |
118 | > | } |
119 | > | |
120 | > | bool ret = subPreprocessor.doPreprocess(includeStream, includeFilename, 1, os, defineSet, ifStates); |
121 | if (!ret) { | |
122 | std::cout << "Error in preprocessing\n"; | |
123 | return false; | |
# | Line 152 | Line 161 | class SimplePreprocessor { | |
161 | } | |
162 | private: | |
163 | ||
155 | – | const static int bufferSize = 1024; |
156 | – | char buffer[bufferSize]; |
164 | }; | |
165 | ||
166 | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |