MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / initPostfixExpression

Function initPostfixExpression

pcsx2/DebugTools/ExpressionParser.cpp:210–412  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

208}
209
210bool initPostfixExpression(const char* infix, IExpressionFunctions* funcs, PostfixExpression& dest, std::string& error)
211{
212 int infixPos = 0;
213 int infixLen = (int)strlen(infix);
214 ExpressionOpcodeType lastOpcode = EXOP_NONE;
215 std::vector<ExpressionOpcodeType> opcodeStack;
216 dest.clear();
217
218 while (infixPos < infixLen)
219 {
220 char first = tolower(infix[infixPos]);
221 char subStr[256];
222 int subPos = 0;
223
224 if (first == ' ' || first == '\t')
225 {
226 infixPos++;
227 continue;
228 }
229
230 if (first >= '0' && first <= '9')
231 {
232 while (isAlphaNum(infix[infixPos]) && subPos < static_cast<int>(sizeof(subStr)) - 1)
233 {
234 subStr[subPos++] = infix[infixPos++];
235 }
236 subStr[subPos] = 0;
237
238 if(subPos == sizeof(subStr) - 1)
239 {
240 error = TRANSLATE("ExpressionParser", "Token too long.");
241 return false;
242 }
243
244 u64 value;
245 bool isFloat = false;
246 if (parseFloat(subStr,subPos,value))
247 isFloat = true;
248 else if (!parseNumber(subStr,16,subPos,value))
249 {
250 error = StringUtil::StdStringFromFormat(
251 TRANSLATE("ExpressionParser", "Invalid number \"%s\"."), subStr);
252 return false;
253 }
254
255 dest.push_back(ExpressionPair(isFloat?EXCOMM_CONST_FLOAT:EXCOMM_CONST,value));
256 lastOpcode = EXOP_NUMBER;
257 } else if ((first >= 'a' && first <= 'z') || first == '@' || first == '_')
258 {
259 while (isAlphaNum(infix[infixPos]) && subPos < static_cast<int>(sizeof(subStr)) - 1)
260 {
261 subStr[subPos++] = infix[infixPos++];
262 }
263 subStr[subPos] = 0;
264
265 if(subPos == sizeof(subStr) - 1)
266 {
267 error = TRANSLATE("ExpressionParser", "Token too long.");

Callers 2

parseExpressionFunction · 0.85
initExpressionMethod · 0.85

Calls 13

isAlphaNumFunction · 0.85
parseFloatFunction · 0.85
parseNumberFunction · 0.85
StdStringFromFormatFunction · 0.85
getExpressionOpcodeFunction · 0.85
parseReferenceMethod · 0.80
parseSymbolMethod · 0.80
sizeFunction · 0.50
clearMethod · 0.45
push_backMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected