The Trunk: Compiler-bf.390.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Compiler-bf.390.mcz

commits-2
Bert Freudenberg uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-bf.390.mcz

==================== Summary ====================

Name: Compiler-bf.390
Author: bf
Time: 19 August 2018, 11:24:12.350952 pm
UUID: d76ef6ae-8303-476d-bb1e-640b2476c276
Ancestors: Compiler-eem.389

Fix source range for caseOf: debugging

=============== Diff against Compiler-eem.389 ===============

Item was changed:
  ----- Method: MessageNode>>emitCodeForCase:encoder:value: (in category 'code generation') -----
  emitCodeForCase: stack encoder: encoder value: forValue
 
  | braceNode sizeStream allReturn |
  forValue ifFalse:
  [^super emitCodeForEffect: stack encoder: encoder].
  braceNode := arguments first.
  sizeStream := ReadStream on: sizes.
  receiver emitCodeForValue: stack encoder: encoder.
  "There must be at least one branch around the otherwise/caseError
   so the decompiler can identify the end of the otherwise/caseError."
  allReturn := true. "assume every case ends with a return"
  braceNode casesForwardDo:
  [:keyNode :valueNode :last | | thenSize elseSize |
  thenSize := sizeStream next.
  elseSize := sizeStream next.
  last ifFalse: [encoder genDup. stack push: 1].
  keyNode emitCodeForEvaluatedValue: stack encoder: encoder.
+ keyNode pc: encoder pc.
  equalNode emitCode: stack args: 1 encoder: encoder.
  self emitCodeForBranchOn: false dist: thenSize pop: stack encoder: encoder.
  last ifFalse: [encoder genPop. stack pop: 1].
  valueNode emitCodeForEvaluatedValue: stack encoder: encoder.
  last ifTrue: [stack pop: 1].
  valueNode returns ifFalse:
  [self emitCodeForJump: elseSize encoder: encoder.
  allReturn := false].
  (last and: [allReturn]) ifTrue:
  [self emitCodeForJump: elseSize encoder: encoder]].
  arguments size = 2
  ifTrue:
  [arguments last emitCodeForEvaluatedValue: stack encoder: encoder] "otherwise: [...]"
  ifFalse:
  [NodeSelf emitCodeForValue: stack encoder: encoder.
  caseErrorNode emitCode: stack args: 0 encoder: encoder]!