> On 17 Aug 2018, at 13:00, Tim Mackinnon <tim@testit.works> 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 > <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 <marcus.den...@inria.fr > <mailto:marcus.den...@inria.fr>> wrote: > >> >> >>> On 10 Aug 2018, at 23:16, Tim Mackinnon <tim@testit.works >>> <mailto:tim@testit.works>> 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 >> >>