Since Solidity 0.4.3, the compiler now shows warnings when a block is not balanced. For example:
Error: Inline assembly block is not balanced. It leaves 1 item(s) on the stack.
I've tried finding documentation that gives into what this entails, and why it happens, but haven't found anything useful. What happens here? How do you fix this?
This internal getCode/codeAt function gives the above error (for example).
function codeAt(address _addr) internal returns (bytes o_code) {
assembly {
// retrieve the size of the code, this needs assembly
let size := extcodesize(_addr)
// allocate output byte array - this could also be done without assembly
// by using o_code = new bytes(size)
o_code := mload(0x40)
// new "memory end" including padding
mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f))))
// store length in memory
mstore(o_code, size)
// actually retrieve the code, this needs assembly
extcodecopy(_addr, add(o_code, 0x20), 0, size)
}
}