* @brief Return a variable type based on the token stack * * @param PtokenStack the token stack containing type tokens * @return VARIABLE_TYPE * pointer to the resolved variable type */
| 38 | * @return VARIABLE_TYPE * pointer to the resolved variable type |
| 39 | */ |
| 40 | VARIABLE_TYPE * |
| 41 | HandleType(PSCRIPT_ENGINE_TOKEN_LIST PtokenStack) |
| 42 | { |
| 43 | enum |
| 44 | { |
| 45 | ENUM_VOID = 1 << 0, |
| 46 | ENUM_BOOL = 1 << 2, |
| 47 | ENUM_CHAR = 1 << 4, |
| 48 | ENUM_SHORT = 1 << 6, |
| 49 | ENUM_INT = 1 << 8, |
| 50 | ENUM_LONG = 1 << 10, |
| 51 | ENUM_FLOAT = 1 << 12, |
| 52 | ENUM_DOUBLE = 1 << 14, |
| 53 | ENUM_OTHER = 1 << 16, |
| 54 | ENUM_SIGNED = 1 << 17, |
| 55 | ENUM_UNSIGNED = 1 << 18, |
| 56 | }; |
| 57 | |
| 58 | VARIABLE_TYPE * Result = VARIABLE_TYPE_UNKNOWN; |
| 59 | int Counter = 0; |
| 60 | PSCRIPT_ENGINE_TOKEN TopToken = NULL; |
| 61 | |
| 62 | while (PtokenStack->Pointer > 0) |
| 63 | { |
| 64 | TopToken = Pop(PtokenStack); |
| 65 | if (TopToken->Type != SCRIPT_VARIABLE_TYPE) |
| 66 | { |
| 67 | Push(PtokenStack, TopToken); |
| 68 | break; |
| 69 | } |
| 70 | if (!strcmp(TopToken->Value, "void")) |
| 71 | { |
| 72 | Counter += ENUM_VOID; |
| 73 | } |
| 74 | else if (!strcmp(TopToken->Value, "bool")) |
| 75 | { |
| 76 | Counter += ENUM_BOOL; |
| 77 | } |
| 78 | else if (!strcmp(TopToken->Value, "char")) |
| 79 | { |
| 80 | Counter += ENUM_CHAR; |
| 81 | } |
| 82 | else if (!strcmp(TopToken->Value, "short")) |
| 83 | { |
| 84 | Counter += ENUM_SHORT; |
| 85 | } |
| 86 | else if (!strcmp(TopToken->Value, "int")) |
| 87 | { |
| 88 | Counter += ENUM_INT; |
| 89 | } |
| 90 | else if (!strcmp(TopToken->Value, "long")) |
| 91 | { |
| 92 | Counter += ENUM_LONG; |
| 93 | } |
| 94 | else if (!strcmp(TopToken->Value, "float")) |
| 95 | { |
| 96 | Counter += ENUM_FLOAT; |
| 97 | } |
no test coverage detected