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 > >
