Hi - but I guess my question is (and excuse my basic knowledge in this area) - 
when a class isn’t found - can we do better than return nil so that the 
debugger can give a better msg and presumably the code I’ve written could live 
on that undefined object? Or am  thinking about this wrong?

I will also put together a pr for this in Pharo 7 if you think it’s a decent 
fix.

Tim

Sent from my iPhone



Sent from my iPhone
> On 22 Aug 2018, at 09:51, Marcus Denker <[email protected]> wrote:
> 
> Hi,
> 
> I played with it, nice!
> 
> I guess the case when you really get a DNU on nil (and want to create  method 
> there) does not really happen… extending nil is for special cases.
> 
>   Marcus
> 
> 
>> On 22 Aug 2018, at 13:39, Tim Mackinnon <[email protected]> wrote:
>> 
>> Sorry Marcus - you needed to follow the exercism instructions and right 
>> click on the exercism package to get an exercism menu to fetch a new 
>> exercise (e.g. hello-world). The is then using the TonalReader to pull in 
>> code - and then you get a test class that can reference a class that isn’t 
>> there yet. (But you need to have the exercism cli installed as per the 
>> instructions etc).
>> 
>> In retrospect I think it might be simpler to download this 6.1 image that 
>> already has done that - 
>> https://www.dropbox.com/s/x2ot9f8arbbvlyb/PharoExercism.zip?dl=0
>> It has TwoFerTest that is in that state. If you click on the  TestWithName 
>> orb, you will see "#new was sent to nil” - can you can see how my Create 
>> button has been fixed per you suggestions to create a class. (The code I 
>> wrote is in 
>> ExercismTools:DoesNotUnderstandDebugAction>>createMissingClassIn:)
>> 
>> Tim
>> 
>> 
>>> On 22 Aug 2018, at 04:44, Marcus Denker <[email protected]> wrote:
>>> 
>>> 
>>> 
>>>> On 17 Aug 2018, at 14:20, Tim Mackinnon <[email protected]> wrote:
>>>> 
>>>> The direct link to instructions is here: 
>>>> https://exercism.io/tracks/pharo/installation (not sure if you have to be 
>>>> signed up to see it otherwise its in the repo here: 
>>>> https://github.com/exercism/pharo/blob/master/docs/INSTALLATION.md)
>>> 
>>> Hm… AllExercismTests seems to not be there (just a green test in Welcome)
>>> 
>>> Is this supposed to contain the code below (the 
>>> createMissingClassActionFor:in:) ?
>>> 
>>> It would be nice to have an image that shows exactly the problem (I do not 
>>> have  that much time sadly to work on it,but I do have some time to check 
>>> if I have an image that is set up to the point where i can easily recreate 
>>> the problem)
>>> 
>>>   Marcus
>>> 
>>> 
>>>> Tim
>>>> 
>>>>> On 17 Aug 2018, at 07:17, Marcus Denker <[email protected]> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>>> On 17 Aug 2018, at 13:00, Tim Mackinnon <[email protected]> wrote:
>>>>>> 
>>>>>> 
>>>>>> Hi Marcus - I can put an image somewhere if that helps (do you just need 
>>>>>> the .image and .changes)?
>>>>>> 
>>>>>> Or you can repro from a fresh 6.1 if you follow the exercism Pharo 
>>>>>> instructions (https://exercism.io/tracks/pharo) to load the first hello 
>>>>>> world-world example and run the tests. This has my code changes to make 
>>>>>> create work with a nil class - but maybe we can do better?
>>>>> I will do that and have a look!
>>>>> 
>>>>>> Tim
>>>>>> 
>>>>>> 
>>>>>> Sent from my iPhone
>>>>>> 
>>>>>>> On 17 Aug 2018, at 06:21, Marcus Denker <[email protected]> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>> On 10 Aug 2018, at 23:16, Tim Mackinnon <[email protected]> wrote:
>>>>>>>> 
>>>>>>>> Actually I think I figured that bit out - a bit clumsily - (pointers 
>>>>>>>> appreciated)
>>>>>>>> 
>>>>>>>> createMissingClassActionFor: aMessage in: aContext
>>>>>>>> |errorNode senderContext newClass variableNode |
>>>>>>>> senderContext := aContext sender.
>>>>>>>> errorNode := senderContext method sourceNodeExecutedForPC: 
>>>>>>>> senderContext pc. 
>>>>>>>> variableNode := errorNode receiver receiver.
>>>>>>>> 
>>>>>>>> newClass := OCUndeclaredVariableWarning new node: variableNode; 
>>>>>>>> defineClass: variableNode name.
>>>>>>>> aContext restart.
>>>>>>>> 
>>>>>>>> However that last line is wrong, as it doesn’t restart with my newly 
>>>>>>>> defined class - I also tried
>>>>>>>> 
>>>>>>>> aContext restartWithNewReceiver: newClass
>>>>>>>> 
>>>>>>>> But again, I get a debugger where my class is still bound to nil. So 
>>>>>>>> what’s the trick to re-evaluate with the new class I’ve created? Or 
>>>>>>>> maybe I’m totally on the wrong track (still its very interesting…)
>>>>>>> 
>>>>>>> 
>>>>>>> what is a bit bad is that you catch the problem “too late” (that is, 
>>>>>>> the DNU to nil, not the read of nil), so nil is already pushed on the 
>>>>>>> stack at this point.
>>>>>>> 
>>>>>>> I tried it in the inspector and at least the class binding was correct 
>>>>>>> after defining the class… do you have an image with the whole code to 
>>>>>>> try?
>>>>>>> 
>>>>>>> Marcus
> 
> 


Reply via email to