| 122 | typedef std::list<ASErrReport> ErrList; |
| 123 | |
| 124 | std::string CorrectASError(const std::string& input_error, |
| 125 | const ScriptFile& script_file) { |
| 126 | // Break down error message into a list of errors |
| 127 | ErrList errors; |
| 128 | { |
| 129 | size_t line_break = 0; |
| 130 | unsigned input_error_size = input_error.size(); |
| 131 | do { |
| 132 | size_t next_line_break = input_error.find('\n', line_break + 1); |
| 133 | if (next_line_break == std::string::npos) { |
| 134 | next_line_break = input_error_size; |
| 135 | } |
| 136 | if (next_line_break - line_break < 10) { |
| 137 | break; |
| 138 | } |
| 139 | std::string err_line = input_error.substr(line_break, |
| 140 | next_line_break - line_break); |
| 141 | errors.push_back(ASErrReport(err_line)); |
| 142 | line_break = next_line_break; |
| 143 | } while (line_break != input_error_size); |
| 144 | } |
| 145 | |
| 146 | // Correct line numbers and file names |
| 147 | { |
| 148 | ErrList::iterator iter = errors.begin(); |
| 149 | for (; iter != errors.end(); ++iter) { |
| 150 | ASErrReport& err = (*iter); |
| 151 | LineFile line_file = script_file.GetCorrectedLine(err.line_number); |
| 152 | err.line_number = line_file.line_number; |
| 153 | err.file_name = line_file.file.GetFullPath(); |
| 154 | err.file_name = err.file_name.substr(err.file_name.rfind('/') + 1); |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | // Create new error message string |
| 159 | std::string err_message; |
| 160 | { |
| 161 | std::ostringstream oss; |
| 162 | ErrList::iterator iter = errors.begin(); |
| 163 | for (; iter != errors.end(); ++iter) { |
| 164 | ASErrReport& err = (*iter); |
| 165 | if (err.type != _INFO) { |
| 166 | oss << " " << StringFromErrType(err.type) << ": " |
| 167 | << err.file_name << " (" << err.line_number |
| 168 | << ", " << err.column_number << ") " |
| 169 | << err.message << "\n"; |
| 170 | } else { |
| 171 | oss << err.message << "\n"; |
| 172 | } |
| 173 | } |
| 174 | err_message = oss.str(); |
| 175 | } |
| 176 | |
| 177 | return err_message; |
| 178 | } |
| 179 | |
| 180 | int ASModule::CompileScriptFromText(const std::string& text) { |
| 181 | func_map_.clear(); |
no test coverage detected