the second call could be in or outside the `if`, since it's a no-op when it gets a count of zero; putting it inside just makes it slightly clearer that we need the decref _because_ we're making a second call that actually does something.

if you look up `foo.bar` where `foo.bar is bar`, the following happens with your patch

1. just `foo` is looked up by the first call.  it's been INCREF'd, because you have to INCREF a return value, obviously.
2. `.bar` is looked up by the second call.  it's been INCREF'd again.  but it's really the same object, `foo`, now INCREF'd twice.
3. `theValue == theValue_tmp`, because they're exactly the same object, so your check does not DECREF.

this will _not_ happen if you merely look up `foo`, because it's the second call that causes the extra INCREF with no corresponding DECREF in the first place.

i don't understand why you wrote it this way in the first place tbh; whether there are any chunks left to evaluate is a much more direct measure of whether the second call does anything.

incidentally: should we be checking for `NULL` as well, in the event that the first call raises an exception?