I'm afraid the most accurate answer here would be diving into the code with a debugger and tracing down the execution flow branch after branch. This tool is full of specific case treatments and has had quite a long journey until it reached its current state.