Class new title: ParsedLoop subclassof: Object fields: 'whileExpr doExpr whileSize doSize' declare: ''; sharing: ByteCodes doExpr [doExpr] emitForEffect: t1 on: t2 [whileExpr emitForValue: t1 on: t2. doSize emitBfp: t1 on: t2. doExpr emitForEffect: t1 on: t2. 0 - doSize - whileSize - doSize jmpSize emitJmp: t1 on: t2] emitForValue: t1 on: t2 [self emitForEffect: t1 on: t2. toLoadNil emitForValue: t1 on: t2] findMacros: t1 compilerTemps: t2 [whileExpr findMacros: t1 compilerTemps: t2. doExpr findMacros: t1 compilerTemps: t2] firstPush [whileExpr firstPush] printon: t1 [t1 append: 'while '. t1 print: whileExpr. t1 append: 'do '. t1 print: doExpr] printon: t1 indent: t2 precedence: t3 forValue: t4 decompiler: t5 [[whileExpr is: ParsedNegation  [t1 append: 'until '. whileExpr negated printon: t1 indent: t2 precedence: 2 forValue: true decompiler: t5] t1 append: 'while '. whileExpr printon: t1 indent: t2 precedence: 2 forValue: true decompiler: t5]. t1 append: ' do'. t1 crtab: t2 + 1. doExpr printon: t1 indent: t2 + 1 precedence: 0 forValue: false decompiler: t5] sizeForEffect: t1 [doSize _ (doExpr sizeForEffect: 1) + 2. whileSize _ whileExpr sizeForValue. whileSize + doSize + doSize jmpSize] sizeForValue [(self sizeForEffect: 1) + 1] whileExpr [whileExpr] whileExpr: t1 doExpr: t2 [whileExpr _ t1. doExpr _ t2]