Squeak/Pharo 在缺少源代码的情况下有特殊处理:它们尝试从适当的 MethodDictionary 反编译 CompiledMethod。
您在这里看到的是 Decompiler 无法正确反编译某些方法。
没有代码,IDE 将无法运行,并且您会被卡住(您无法保存代码、浏览代码、调试代码......)
这个 Pharo 1.1 版本已经很老了,你不会得到任何支持。
但有趣的是,您遇到的 Decompiler 的 bug 在当前的 Squeak trunk 开发(4.5)中仍然存在,
并且使 Decompiler 变得松散的方法是:
< aNumberWithUnits
(self compareUnits: aNumberWithUnits)
ifTrue: [self value: ((aNumberWithUnits value) < (self value) ifTrue: [^true] ifFalse: [^false]).]
ifFalse: [^Error new signal: 'Incompatible unit types.'].
这是一个非常规的代码,因为消息[self value: ...]
永远不会被发送。
原因是参数将首先被评估,条件的两个分支都将返回ifTrue: [^true] ifFalse: [^false]
。
由于您探索了一些只有新手才能探索的黑暗角落,并且我们未能测试,所以我只想说谢谢。
如果您愿意,可以在http://bugs.squeak.org上打开报告