Class new title: ParsedConditional subclassof: Object fields: 'ifExpr thenExpr elseExpr thenSize elseSize jmpSize' declare: '' emitForEffect: t1 on: t2 [ifExpr emitForValue: t1 on: t2. thenSize emitBfp: t1 on: t2. thenExpr emitForEffect: t1 on: t2. [jmpSize > 0  [elseSize emitJmp: t1 on: t2]]. elseExpr emitForEffect: t1 on: t2] emitForValue: t1 on: t2 [ifExpr emitForValue: t1 on: t2. thenSize emitBfp: t1 on: t2. thenExpr emitForValue: t1 on: t2. t2 pop: 1. [jmpSize > 0  [elseSize emitJmp: t1 on: t2]]. elseExpr emitForValue: t1 on: t2] findMacros: t1 compilerTemps: t2 [ifExpr findMacros: t1 compilerTemps: t2. thenExpr findMacros: t1 compilerTemps: t2. elseExpr findMacros: t1 compilerTemps: t2] firstPush [ifExpr firstPush] ifExpr: t1 thenExpr: t2 elseExpr: t3 [ifExpr _ t1. thenExpr _ t2. elseExpr _ t3] printon: t1 [t1 append: 'if '. t1 print: ifExpr. t1 append: 'then '. t1 print: thenExpr. t1 append: 'else '. t1 print: elseExpr] printon: t1 indent: t2 precedence: t3 forValue: t4 decompiler: t5 | t6 t7 [ifExpr printon: t1 indent: t2 precedence: 0 forValue: true decompiler: t5. t1 append: ' '. [thenExpr position > 1 or (thenExpr  1 is: ParsedConditional)  [t1 crtab: t2 + 1] t1 space]. thenExpr printon: t1 indent: t2 + 1 precedence: 0 forValue: t4 decompiler: t5. elseExpr position = 1 and elseExpr last  nil  [] t1 crtab: t2. t6 _ t1 position. t7 _ t1 pop. elseExpr printon: t1 indent: t2 precedence: 0 forValue: t4 decompiler: t5. t1 skip: 1. t1  t6 _ t7] returns [thenExpr returns and elseExpr returns] sizeForEffect: t1 [elseSize _ elseExpr sizeForEffect: t1. jmpSize _ [thenExpr returns  [0] elseSize jmpSize]. thenSize _ (thenExpr sizeForEffect: 1) + jmpSize. ifExpr sizeForValue + thenSize bfpSize + thenSize + elseSize] sizeForValue [elseSize _ elseExpr sizeForValue. jmpSize _ [thenExpr returns  [0] elseSize jmpSize]. thenSize _ thenExpr sizeForValue + jmpSize. ifExpr sizeForValue + thenSize bfpSize + thenSize + elseSize]