Denis' idea is good.

There is one problem with the implementation of jump though.

MyClass>>iv
iv := 1.
[ 2 ] value.
1halt.

MyClass new
beReadOnlyObject ;
iv

When reaching the halt we see there is an extra nil on stack.

I think this is better than the process hack, at least until we add VM support for this case.

On Thu, Jan 26, 2017 at 11:36 AM, Denis Kudriashov <dionisiydk@gmail.com> wrote:

2017-01-26 10:59 GMT+01:00 Cl��ment Bera <bera.clement@gmail.com>:
Let's rewrite the method this way:

attemptToAssign: value withIndex: index��
�� �� �� ����| process |
�� �� �� �� "INSERT CODE HERE"
process := Processor activeProcess.
[ process suspendedContext: process suspendedContext sender ] fork.��
Processor yield.
self error: 'should not be reached'.

I guess I found simplest solution to problem. Instead of process logic we can just use "thisContext sender jump".

attemptToAssign: value withIndex: index��
�� �� �� ����| process |
�� thisContext sender jump.
�� self error: 'should not be reached'.

In my tests it works correctly. I use this method:

ValueHolder>>contents2: anObject
| result |
result := (contents :=��anObject).
self halt.
^result printString.

So debugger is opened at halt. And #result var contains anObject.