EmitExpr for TBinaryExpr now checks for boAnd/boOr first and emits short-circuit branches (jnz to sc_rhs/sc_end labels) before evaluating either operand. The eager `and` instruction previously emitted was safe for bitwise use but caused a null-pointer crash when the compiler compiled itself: TSymbolTable.FindType evaluated Sym.Kind even when Sym was nil, because the code generator did not short-circuit the guard `(Sym <> nil) and (Sym.Kind = skTypeAlias)`. Stage-3 now produces byte-identical IR to stage-2 (fixpoint reached). |
||
|---|---|---|
| .. | ||
| integration | ||
| blaise-compiler.pas | ||
| phase2_milestone.pas | ||
| phase3_milestone.pas | ||