I was creating a new video tutorial to show how to find all comments in all classes but I'm getting errors in both Squeak 4.3 and Pharo 1.3.
In Squeak 4.3, the error is: Key not found: Comment
In Pharo 1.3, the error is: Improper store into indexable object.
the code is:
myNav := SystemNavigation default.
(myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString, ' => ', ( each actualClass commentsIn: each sourceString);cr ]
In Pharo, the error shows up after the Transcript output:
UndefinedObject>>DoIt (myNav is Undeclared)
In Squeak the error shows up each time after the Transcript output:
[...] AbstractSound class updateScorePlayers => an OrderedCollection('Force all ScorePlayers to update their instrument list from the sound library. This may done after loading, unloading, or replacing a sound to make all ScorePlayers feel the change.')
UndefinedObject>>DoIt (myNav is Undeclared) UndefinedObject>>DoIt (myNav is Undeclared)
Help? Error shows up in Squeak 4.3 image running both in the all-in-one distribution, and running on Cog VM.
In Pharo 1.3 using Cog VM.
Mac OS X 10.6.8.
Thanks,
Lawson
Le 2 mars 2012 04:21, Lawson English lenglish5@cox.net a écrit :
I was creating a new video tutorial to show how to find all comments in all classes but I'm getting errors in both Squeak 4.3 and Pharo 1.3.
In Squeak 4.3, the error is: Key not found: Comment
In Pharo 1.3, the error is: Improper store into indexable object.
the code is:
myNav := SystemNavigation default.
(myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString, ' => ', ( each actualClass commentsIn: each sourceString);cr ]
Yes, this doesn't work:
'abc' , #( 'de' 'fgh').
But you could simply do this:
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr ]
Nicolas
In Pharo, the error shows up after the Transcript output:
UndefinedObject>>DoIt (myNav is Undeclared)
In Squeak the error shows up each time after the Transcript output:
[...] AbstractSound class updateScorePlayers => an OrderedCollection('Force all ScorePlayers to update their instrument list from the sound library. This may done after loading, unloading, or replacing a sound to make all ScorePlayers feel the change.')
UndefinedObject>>DoIt (myNav is Undeclared) UndefinedObject>>DoIt (myNav is Undeclared)
Help? Error shows up in Squeak 4.3 image running both in the all-in-one distribution, and running on Cog VM.
In Pharo 1.3 using Cog VM.
Mac OS X 10.6.8.
Thanks,
Lawson
On 3/2/12 4:29 AM, Nicolas Cellier wrote:
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr ]
Now I get the same error in the same place with Pharo 1.3 as I do in Squeak 4.3 though the error message is different:
MNU: CommentReference>>sourceString.
So my original code mostly works with Squeak 4.3, but doesn't work at all with Pharo 1.3
Your code has errors in the same place as mine does in Squeak 4.3, but at least it mostly works in Pharo 1.3 as well as Squeak 4.3.
I'm pretty sure this isn't proper behavior, either way.
Lawson
Le 2 mars 2012 13:24, Lawson English lenglish5@cox.net a écrit :
On 3/2/12 4:29 AM, Nicolas Cellier wrote:
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr ]
Now I get the same error in the same place with Pharo 1.3 as I do in Squeak 4.3 though the error message is different:
Sure, I should have written Transcript print: ... ; cr; endEntry
Or Transcript show: each asString , ' => ' , ( each actualClass commentsIn: each sourceString) printString;cr
Nicolas
MNU: CommentReference>>sourceString.
So my original code mostly works with Squeak 4.3, but doesn't work at all with Pharo 1.3
Your code has errors in the same place as mine does in Squeak 4.3, but at least it mostly works in Pharo 1.3 as well as Squeak 4.3.
I'm pretty sure this isn't proper behavior, either way.
Lawson
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
Ah sorry, I missed one part of your report (and no, I did not have an image handy).
My answer was more for Pharo since you cannot concatenate 'foo' , Object new You need to use explicitely asString or printString or storeString or... 'foo' , Object new asString
Then, the #Comment failure sounds wrong indeed. That's just because allMethodsWithSourceString: also scan class comments... And this is hackish because: - the class comment is not a method, so allMethodsWithSourceString: is quite a surprising behavior-name mismatch - the least we should do would be to return a ClassCommentReference rather than a MethodReference if we want to maintain this feature.
Nicolas
Le 2 mars 2012 21:57, Lawson English lenglish5@cox.net a écrit :
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
This code runs with no errors on both images:
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| each methodSymbol = #Comment ifTrue: ["handle true case later"] ifFalse: [Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr ]]
but this line only works in Squeak 4.3: ifFalse: [Transcript show: each asString, '=>', ( each actualClass commentsIn: each sourceString);cr ]]
Interesting divergence in the code there.
Lawson
On 3/2/12 3:52 PM, Nicolas Cellier wrote:
Ah sorry, I missed one part of your report (and no, I did not have an image handy).
My answer was more for Pharo since you cannot concatenate 'foo' , Object new You need to use explicitely asString or printString or storeString or... 'foo' , Object new asString
Then, the #Comment failure sounds wrong indeed. That's just because allMethodsWithSourceString: also scan class comments... And this is hackish because:
- the class comment is not a method, so allMethodsWithSourceString: is
quite a surprising behavior-name mismatch
- the least we should do would be to return a ClassCommentReference
rather than a MethodReference if we want to maintain this feature.
Nicolas
Le 2 mars 2012 21:57, Lawson Englishlenglish5@cox.net a écrit :
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
If you change
MethodReference>>sourceString so that it looks like this:
sourceString
self methodSymbol = #Comment ifTrue: [^self actualClass comment]. ^ (self actualClass sourceCodeAt: self methodSymbol) asString
your code will run in Squeak 4.2 and presumably 4.3.
Cheers, Bob
On 3/2/12 3:57 PM, Lawson English wrote:
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
Is that a bug fix, or a workaround, I wonder?
Regardless, I'll redo the video but add the caveat that due to an existing issue, one needs to add an extra line of code to skip printing out methods whose symbol is #Comment.
L.
On 3/2/12 3:57 PM, Bob Arning wrote:
If you change
MethodReference>>sourceString so that it looks like this:
sourceString
self methodSymbol = #Comment ifTrue: [^self actualClass comment]. ^ (self actualClass sourceCodeAt: self methodSymbol) asString
your code will run in Squeak 4.2 and presumably 4.3.
Cheers, Bob
On 3/2/12 3:57 PM, Lawson English wrote:
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
Le 3 mars 2012 00:04, Lawson English lenglish5@cox.net a écrit :
Is that a bug fix, or a workaround, I wonder?
It's the shortest hack to make your sentence work. Certainly not a long term scaling solution, because we would have to spread some more ifTrue: here and there - in both MethodReference - and its users. The former is a way to accomplish poor man polymorphism The later is a way to have complex code which can't abstract and delegate, but instead has to be omniscient See for example MessageSet>>contents:notifying:
I'd say Squeak can tolerate such hack (it's just one more in the image). But Pharo wouldn't. MethodReference has already been cleaned up in 1.4 ;)
Nicolas
Regardless, I'll redo the video but add the caveat that due to an existing issue, one needs to add an extra line of code to skip printing out methods whose symbol is #Comment.
L.
On 3/2/12 3:57 PM, Bob Arning wrote:
If you change
MethodReference>>sourceString so that it looks like this:
sourceString
self methodSymbol = #Comment ifTrue: [^self actualClass comment]. ^ (self actualClass sourceCodeAt: self methodSymbol) asString
your code will run in Squeak 4.2 and presumably 4.3.
Cheers, Bob
On 3/2/12 3:57 PM, Lawson English wrote:
On 3/2/12 5:55 AM, Nicolas Cellier wrote:
Transcript print: ... ; cr; endEntry
myNav := SystemNavigation default. (myNav allMethodsWithSourceString: '"' matchCase: false) do: [:each| Transcript show: each asString -> ( each actualClass commentsIn: each sourceString);cr;endEntry ]
Still generates the error MNU: ComentReference>>sourceString
On Pharo 1.3
Still generates the error: MNU: Key not found: Comment
On Squeak 4.3
AFTER many hundreds of lines of valid output.
In the same place as before in both images with 2 different VMs.
Are you testing the code you are writing and not seeing the error?
L
squeak-dev@lists.squeakfoundation.org