MCPcopy Create free account
hub / github.com/argotorg/solidity / compoundAssignment

Method compoundAssignment

libsolidity/formal/SMTEncoder.cpp:2228–2266  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2226}
2227
2228smtutil::Expression SMTEncoder::compoundAssignment(Assignment const& _assignment)
2229{
2230 static std::map<Token, Token> const compoundToArithmetic{
2231 {Token::AssignAdd, Token::Add},
2232 {Token::AssignSub, Token::Sub},
2233 {Token::AssignMul, Token::Mul},
2234 {Token::AssignDiv, Token::Div},
2235 {Token::AssignMod, Token::Mod}
2236 };
2237 static std::map<Token, Token> const compoundToBitwise{
2238 {Token::AssignBitAnd, Token::BitAnd},
2239 {Token::AssignBitOr, Token::BitOr},
2240 {Token::AssignBitXor, Token::BitXor},
2241 {Token::AssignShl, Token::SHL},
2242 {Token::AssignShr, Token::SHR},
2243 {Token::AssignSar, Token::SAR}
2244 };
2245 Token op = _assignment.assignmentOperator();
2246 solAssert(compoundToArithmetic.count(op) || compoundToBitwise.count(op), "");
2247
2248 auto decl = identifierToVariable(_assignment.leftHandSide());
2249
2250 if (compoundToBitwise.count(op))
2251 return bitwiseOperation(
2252 compoundToBitwise.at(op),
2253 decl ? currentValue(*decl) : expr(_assignment.leftHandSide(), _assignment.annotation().type),
2254 expr(_assignment.rightHandSide(), _assignment.annotation().type),
2255 _assignment.annotation().type
2256 );
2257
2258 auto values = arithmeticOperation(
2259 compoundToArithmetic.at(op),
2260 decl ? currentValue(*decl) : expr(_assignment.leftHandSide(), _assignment.annotation().type),
2261 expr(_assignment.rightHandSide(), _assignment.annotation().type),
2262 _assignment.annotation().type,
2263 _assignment
2264 );
2265 return values.first;
2266}
2267
2268void SMTEncoder::expressionToTupleAssignment(std::vector<std::shared_ptr<VariableDeclaration>> const& _variables, Expression const& _rhs)
2269{

Callers

nothing calls this directly

Calls 3

assignmentOperatorMethod · 0.80
atMethod · 0.80
countMethod · 0.45

Tested by

no test coverage detected