Class new title: ProcessFrame subclassof: Object fields: ' process bp ' declare: 'dOffsetTemps dOffsetBPDelta dOffsetCallersPC dOffsetNrArgs dOffsetMethod dOffsetReceiver dOffsetArgs dOffsetMethodClass ' arguments | t1 t2 t3 t4 [t1 _ self nargs. t2 _ Vector new: t1. t3 _ bp + dOffsetArgs + t1. for t4 to: t1 do [t2  t4 _ process  (t3 - t4)]. t2] bp [bp] bpCaller [self hasCaller  [bp + (process  (bp + dOffsetBPDelta))] nil] caller [self hasCaller  [ProcessFrame new process: process bp: self callerBP] nil] callerBP [self hasCaller  [bp + (process  (bp + dOffsetBPDelta)) + 1] nil] callerPC [self hasCaller  [process  (bp + dOffsetCallersPC) - 2] nil] classInit [dOffsetTemps _ 1. dOffsetBPDelta _ 0. dOffsetCallersPC _ 1. dOffsetNrArgs _ 2. dOffsetMethod _ 3. dOffsetMethodClass _ 4. dOffsetReceiver _ 5. dOffsetArgs _ 6] climb [bp _ self callerBP] from: t1 [process _ t1. bp _ process length - process remoteCopy frameOffset + 1. self climb. self climb] hasCaller [process  (bp + dOffsetBPDelta) = 0  [false] true] mclass [process  (bp + dOffsetMethodClass)] message | t1 t2 [self hasCaller  [t1 _ process  (self callerBP + dOffsetMethod). t1 messageAt: self callerPC] XXnoCallerXX] method [process  (bp + dOffsetMethod)] nargs [process  (bp + dOffsetNrArgs)] pc | t1 [t1 _ self successor. t1  nil  [nil] t1 callerPC] printon: t1 [t1 append: self mclass title. self hasCaller  [[self receiver is: self mclass  [] t1 append: '(' + self receiver class title + ')']. t1 append: ' <= '. t1 print: self message]] process: t1 bp: t2 [process _ t1. bp _ t2] receiver [process  (bp + dOffsetReceiver)] sender [self caller] stack | t1 t2 [t1 _ Stream new of: (Vector new: 20). t2 _ self. t1 next_ self. while t2 hasCaller do [t2 _ t2 caller. t1 next_ t2]. t1 contents] successor | t1 t2 [t1 _ thisContext current bp. t2 _ bp - 1. while t2  t1 do [[process  (t2 + dOffsetBPDelta) is: Integer  [process  (t2 + dOffsetBPDelta) = (bp - t2 - 1)  [process  (t2 + dOffsetCallersPC) is: Integer  [process  (t2 + dOffsetNrArgs) is: Integer  [process  (t2 + dOffsetMethod) is: CompiledMethod  [process  (t2 + dOffsetMethodClass) is: Class  [ProcessFrame new process: process bp: t2]]]]]]]. t2 _ t2 - 1]. nil] tempframe | t1 t2 t3 t4 t5 [t1 _ self nargs. t2 _ self method numTemps. t3 _ Vector new: t1 + t2. t4 _ bp + dOffsetArgs + t1. for t5 to: t1 do [t3  t5 _ process  (t4 - t5)]. t4 _ bp + dOffsetTemps + 1. for t5 to: t2 do [t3  t5 _ process  (t4 - t5)]. t3] temps | t1 t2 t3 t4 [t1 _ self method numTemps. t2 _ Vector new: t1. t3 _ bp + dOffsetTemps + 1. for t4 to: t1 do [t2  t4 _ process  (t3 - t4)]. t2] thisop [self successor message] trace | t1 t2 [while self hasCaller do [t1 _ self receiver class. [t1 = self mclass  [t2 _ ' '] t2 _ '(' + t1 title + ') ']. user show: self mclass title + t2 + self message. user cr. self climb]] variableNamesInto: t1 with: t2 | t3 t4 t5 [t3 _ self mclass. t4 _ t3 md invert: self method. t4  [t5 _ Parser new from: (t3 code: t4) asStream to: t1. t5 pattern: t2. t5 temporaries: t2. t5 terminate] t1 notify: 'thisContext is not running a currently defined method']