| 96 | } |
| 97 | |
| 98 | bool LineParser::parseName(const std::string& name, const TokenLoc& loc, Scanner& scanner) |
| 99 | { |
| 100 | if (mState == SetState) |
| 101 | { |
| 102 | std::string name2 = Misc::StringUtils::lowerCase(name); |
| 103 | mName = name2; |
| 104 | |
| 105 | // local variable? |
| 106 | char type = mLocals.getType(name2); |
| 107 | if (type != ' ') |
| 108 | { |
| 109 | mType = type; |
| 110 | mState = SetLocalVarState; |
| 111 | return true; |
| 112 | } |
| 113 | |
| 114 | type = getContext().getGlobalType(name2); |
| 115 | if (type != ' ') |
| 116 | { |
| 117 | mType = type; |
| 118 | mState = SetGlobalVarState; |
| 119 | return true; |
| 120 | } |
| 121 | |
| 122 | mState = SetPotentialMemberVarState; |
| 123 | return true; |
| 124 | } |
| 125 | |
| 126 | if (mState == SetMemberVarState) |
| 127 | { |
| 128 | mMemberName = Misc::StringUtils::lowerCase(name); |
| 129 | std::pair<char, bool> type = getContext().getMemberType(mMemberName, ESM::RefId::stringRefId(mName)); |
| 130 | |
| 131 | if (type.first != ' ') |
| 132 | { |
| 133 | mState = SetMemberVarState2; |
| 134 | mType = type.first; |
| 135 | mReferenceMember = type.second; |
| 136 | return true; |
| 137 | } |
| 138 | |
| 139 | getErrorHandler().error("Unknown variable", loc); |
| 140 | SkipParser skip(getErrorHandler(), getContext()); |
| 141 | scanner.scan(skip); |
| 142 | return false; |
| 143 | } |
| 144 | |
| 145 | if (mState == MessageState) |
| 146 | { |
| 147 | GetArgumentsFromMessageFormat processor; |
| 148 | processor.process(name); |
| 149 | std::string arguments = processor.getArguments(); |
| 150 | |
| 151 | if (!arguments.empty()) |
| 152 | { |
| 153 | mExprParser.reset(); |
| 154 | mExprParser.parseArguments(arguments, scanner, mCode, -1, true); |
| 155 | } |
no test coverage detected