return from block inside ensured blocks 的语义是什么?

What's the semantics of return from block inside ensured blocks?

假设我们有以下方法序列:

m1
    self m2: [^1]

m2: block
    self m3: block.
    Processor := nil "crash!"

m3: block
    [block value] ensure: [^2]

问题是 anObject m1 的值是多少?

换句话说,[ˆ2] 的语义是否被明确定义为一个安全块?有两种可能:

  1. 来自块的return在确保块中被忽略:在这种情况下m1将return与1
  2. 块中的 return 在确保块中得到尊重:在这种情况下图像会崩溃。

请注意,我不是在问会发生什么。我对执行流程的定义比较感兴趣。


编辑

推论 1(Lukas 在下面的回答中证实了这一点):这不是一种好的编程风格!

查看 Draft of ANSI Smalltalk Standard 的第 23 页,其中描述了 return 语句及其与 ensure: 块的交互:

If the evaluation of a termination block concludes with the execution of a return statement the result is undefined.