| 251 | } |
| 252 | |
| 253 | uint32_t ParseFile::getLineNb(uint32_t line) { |
| 254 | if (!getCompileSourceFile()) return line; |
| 255 | PreprocessFile* pp = getCompileSourceFile()->getPreprocessor(); |
| 256 | if (!pp) return 0; |
| 257 | auto& infos = pp->getIncludeFileInfo(); |
| 258 | if (!infos.empty()) { |
| 259 | if (!lineInfoCache.empty()) { |
| 260 | if (line > lineInfoCache.size()) { |
| 261 | SymbolId fileId = registerSymbol("CACHE OUT OF BOUND"); |
| 262 | Location ppfile(fileId); |
| 263 | Error err(ErrorDefinition::PA_INTERNAL_WARNING, ppfile); |
| 264 | addError(err); |
| 265 | return line; |
| 266 | } |
| 267 | return lineInfoCache[line]; |
| 268 | } |
| 269 | buildLineInfoCache_(); |
| 270 | if (line > lineInfoCache.size()) { |
| 271 | SymbolId fileId = registerSymbol("CACHE OUT OF BOUND"); |
| 272 | Location ppfile(fileId); |
| 273 | Error err(ErrorDefinition::PA_INTERNAL_WARNING, ppfile); |
| 274 | addError(err); |
| 275 | return line; |
| 276 | } |
| 277 | return lineInfoCache[line]; |
| 278 | } else { |
| 279 | return line; |
| 280 | } |
| 281 | } |
| 282 | |
| 283 | bool ParseFile::parseOneFile_(PathId fileId, uint32_t lineOffset) { |
| 284 | FileSystem* const fileSystem = FileSystem::getInstance(); |
no test coverage detected