
contract VarReadUsingThis {
    address public erc20;
    mapping(uint => address) public myMap;
    function bad1(uint x) external returns(address) {
        return this.myMap(x);
    }
    function bad2() external returns(address) {
        return this.erc20();
    }
    function bad3() external returns(address) {
        if (this.erc20() == address(0)) revert();
    }
    function bad4() internal returns(address) {
        for (uint x; x < 10; x++) {
            address local = this.erc20();
        } 
    }
    function good1(uint x) external returns(address) {
        return myMap[x];
    }
    function good2() external returns(address) {
        return erc20;
    }
    function good3() external returns(address) {
        if (erc20 == address(0)) revert();
    }
    function good4() internal returns(address) {
        for (uint x; x < 10; x++) {
            address local = erc20;
        } 
    }
}
