bool Why3Translator::visit(MemberAccess const& _node) { if ( _node.expression().annotation().type->category() == Type::Category::Array && _node.memberName() == "length" && !_node.annotation().lValueRequested ) { add("(of_int "); _node.expression().accept(*this); add(".length"); add(")"); } else if ( _node.memberName() == "call" && *_node.expression().annotation().type == IntegerType(160, IntegerType::Modifier::Address) ) { // Do nothing, do not even visit the address because this will be an external call //@TODO ensure that the expression itself does not have side-effects return false; } else error(_node, "Member access: Only call and array length supported."); return false; }
bool ASTPrinter::visit(MemberAccess const& _node) { writeLine("MemberAccess to member " + _node.memberName()); printType(_node); printSourcePart(_node); return goDeeper(); }