void EvalAssign( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack ) { Variable src; TokenEval dst; src = varStack.top().v; varStack.pop(); dst = varStack.top(); varStack.pop(); if( dst.vPtr != NULL ) { if( dst.type == TokenEval::VARIABLE ) { *(dst.vPtr) = src; varStack.push(TokenEval(*(dst.vPtr), dst.vPtr)); } else if( dst.type == TokenEval::UCHAR ) { unsigned char *dstChar; dstChar = (unsigned char *)dst.vPtr; *dstChar = src.AsValue(); varStack.push(TokenEval(*dstChar, dstChar, TokenEval::UCHAR)); } } else { WriteAddress( (LPVOID)dst.v.AsValue(), &src, 4 ); } }
void EvalDereference( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack ) { Variable dst; dst = varStack.top().v; varStack.pop(); dst = ReadAddress((LPCVOID)dst.AsValue()); varStack.push(TokenEval(dst, NULL)); }
void EvalRightBracket( std::stack<TokenEval> &varStack, std::vector<TokenEval> &callStack ) { Variable src; Variable *dst; src = varStack.top().v; varStack.pop(); dst = varStack.top().vPtr; varStack.pop(); if( dst != NULL ) { varStack.push( TokenEval(dst->operatorSplit(src.AsValue()), &(*dst)[src.AsValue()], TokenEval::UCHAR) ); } else { varStack.push(TokenEval(0, NULL)); } }