Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright (c) 2021-2025 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 | 7 | ParserError::ParserError(const CodeLoc &codeLoc, const ParserErrorType &type, const std::string &message) { | |
17 |
7/14✓ Branch 0 (4→5) taken 7 times.
✗ Branch 1 (4→35) not taken.
✓ Branch 2 (5→6) taken 7 times.
✗ Branch 3 (5→30) not taken.
✓ Branch 4 (6→7) taken 7 times.
✗ Branch 5 (6→28) not taken.
✓ Branch 6 (7→8) taken 7 times.
✗ Branch 7 (7→26) not taken.
✓ Branch 8 (8→9) taken 7 times.
✗ Branch 9 (8→24) not taken.
✓ Branch 10 (9→10) taken 7 times.
✗ Branch 11 (9→22) not taken.
✓ Branch 12 (10→11) taken 7 times.
✗ Branch 13 (10→20) not taken.
|
7 | errorMessage = "[Error|Parser] " + codeLoc.toPrettyString() + ": " + getMessagePrefix(type) + ": " + message; |
18 | 7 | } | |
19 | |||
20 | /** | ||
21 | * Get the message for this particular error instance | ||
22 | * | ||
23 | * @return Error message in form of a char array | ||
24 | */ | ||
25 | 7 | 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 | 7 | std::string ParserError::getMessagePrefix(ParserErrorType errorType) { | |
34 |
6/7✓ Branch 0 (2→3) taken 2 times.
✓ Branch 1 (2→8) taken 1 times.
✓ Branch 2 (2→13) taken 1 times.
✓ Branch 3 (2→18) taken 1 times.
✓ Branch 4 (2→23) taken 1 times.
✓ Branch 5 (2→28) taken 1 times.
✗ Branch 6 (2→33) not taken.
|
7 | switch (errorType) { |
35 | 2 | case PARSING_FAILED: | |
36 |
1/2✓ Branch 0 (5→6) taken 2 times.
✗ Branch 1 (5→39) not taken.
|
4 | return "Parsing failed"; |
37 | 1 | case NUMBER_OUT_OF_RANGE: | |
38 |
1/2✓ Branch 0 (10→11) taken 1 times.
✗ Branch 1 (10→42) not taken.
|
2 | return "Number is out of range"; |
39 | 1 | case INVALID_QUALIFIER_COMBINATION: | |
40 |
1/2✓ Branch 0 (15→16) taken 1 times.
✗ Branch 1 (15→45) not taken.
|
2 | return "Invalid qualifier combination"; |
41 | 1 | case INVALID_CHAR_LITERAL: | |
42 |
1/2✓ Branch 0 (20→21) taken 1 times.
✗ Branch 1 (20→48) not taken.
|
2 | return "Invalid char literal"; |
43 | 1 | case INVALID_ATTR_VALUE_TYPE: | |
44 |
1/2✓ Branch 0 (25→26) taken 1 times.
✗ Branch 1 (25→51) not taken.
|
2 | return "Invalid attribute value type"; |
45 | 1 | case RESERVED_KEYWORD: | |
46 |
1/2✓ Branch 0 (30→31) taken 1 times.
✗ Branch 1 (30→54) not taken.
|
2 | return "Usage of reserved keyword"; |
47 | } | ||
48 | − | return "Unknown error"; // GCOV_EXCL_LINE | |
49 | } | ||
50 | |||
51 | } // namespace spice::compiler | ||
52 |