src/exception/ParserError.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright (c) 2021-2026 ChilliBits. All rights reserved. | ||
| 2 | |||
| 3 | #include "ParserError.h" | ||
| 4 | |||
| 5 | #include <util/CodeLoc.h> | ||
| 6 | |||
| 7 | namespace spice::compiler { | ||
| 8 | |||
| 9 | /** | ||
| 10 | * Constructor: Used in case that the exact code position where the error occurred is known | ||
| 11 | * | ||
| 12 | * @param codeLoc Code location where the error occurred | ||
| 13 | * @param type Type of the error | ||
| 14 | * @param message Error message suffix | ||
| 15 | */ | ||
| 16 | 8 | ParserError::ParserError(const CodeLoc &codeLoc, const ParserErrorType &type, const std::string &message) { | |
| 17 |
7/14✓ Branch 4 → 5 taken 8 times.
✗ Branch 4 → 35 not taken.
✓ Branch 5 → 6 taken 8 times.
✗ Branch 5 → 30 not taken.
✓ Branch 6 → 7 taken 8 times.
✗ Branch 6 → 28 not taken.
✓ Branch 7 → 8 taken 8 times.
✗ Branch 7 → 26 not taken.
✓ Branch 8 → 9 taken 8 times.
✗ Branch 8 → 24 not taken.
✓ Branch 9 → 10 taken 8 times.
✗ Branch 9 → 22 not taken.
✓ Branch 10 → 11 taken 8 times.
✗ Branch 10 → 20 not taken.
|
8 | errorMessage = "[Error|Parser] " + codeLoc.toPrettyString() + ": " + getMessagePrefix(type) + ": " + message; |
| 18 | 8 | } | |
| 19 | |||
| 20 | /** | ||
| 21 | * Get the message for this particular error instance | ||
| 22 | * | ||
| 23 | * @return Error message in form of a char array | ||
| 24 | */ | ||
| 25 | 8 | const char *ParserError::what() const noexcept { return errorMessage.c_str(); } | |
| 26 | |||
| 27 | /** | ||
| 28 | * Get the prefix of the error message for a particular error | ||
| 29 | * | ||
| 30 | * @param errorType Type of the error | ||
| 31 | * @return Prefix string for the error type | ||
| 32 | */ | ||
| 33 | 8 | std::string ParserError::getMessagePrefix(ParserErrorType errorType) { | |
| 34 |
7/8✓ Branch 2 → 3 taken 2 times.
✓ Branch 2 → 9 taken 1 time.
✓ Branch 2 → 15 taken 1 time.
✓ Branch 2 → 21 taken 1 time.
✓ Branch 2 → 27 taken 1 time.
✓ Branch 2 → 33 taken 1 time.
✓ Branch 2 → 39 taken 1 time.
✗ Branch 2 → 45 not taken.
|
8 | switch (errorType) { |
| 35 | 2 | case PARSING_FAILED: | |
| 36 |
1/2✓ Branch 5 → 6 taken 2 times.
✗ Branch 5 → 47 not taken.
|
4 | return "Parsing failed"; |
| 37 | 1 | case NUMBER_OUT_OF_RANGE: | |
| 38 |
1/2✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 50 not taken.
|
2 | return "Number is out of range"; |
| 39 | 1 | case INVALID_QUALIFIER_COMBINATION: | |
| 40 |
1/2✓ Branch 17 → 18 taken 1 time.
✗ Branch 17 → 53 not taken.
|
2 | return "Invalid qualifier combination"; |
| 41 | 1 | case INVALID_CHAR_LITERAL: | |
| 42 |
1/2✓ Branch 23 → 24 taken 1 time.
✗ Branch 23 → 56 not taken.
|
2 | return "Invalid char literal"; |
| 43 | 1 | case INVALID_ATTR_VALUE_TYPE: | |
| 44 |
1/2✓ Branch 29 → 30 taken 1 time.
✗ Branch 29 → 59 not taken.
|
2 | return "Invalid attribute value type"; |
| 45 | 1 | case RESERVED_KEYWORD: | |
| 46 |
1/2✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 62 not taken.
|
2 | return "Usage of reserved keyword"; |
| 47 | 1 | case RESERVED_TYPENAME: | |
| 48 |
1/2✓ Branch 41 → 42 taken 1 time.
✗ Branch 41 → 65 not taken.
|
2 | return "Usage of reserved typename"; |
| 49 | } | ||
| 50 | − | assert_fail("Unknown error"); // GCOV_EXCL_LINE | |
| 51 | return "Unknown error"; // GCOV_EXCL_LINE | ||
| 52 | } | ||
| 53 | |||
| 54 | } // namespace spice::compiler | ||
| 55 |