Hi esteban In Seaside, I created a subclass of WAFileLibrary then StefWAFileLibrary addAllFilesIn: 'foo' my folder foo contained a simple sh file I got a method created in the class side of StefWAFileLibrary I created a separated package and I could not save (I could save) but the method could be included. I added other methods by hand and they were saved but not the methods created by the addAllFilesIn: I suspect that the addAllFilesIn: did not raise a proper announcement. When I put a halt in snapshot packageSet does not get any methods. Stef snapshot | packageInfo definitions categories | self halt. packageInfo := self packageSet. definitions := OrderedCollection new. categories := (packageInfo packages collect: #packageName) asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ]. packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ]. packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ]. packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ]. (packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions Stef
Probably linked to addFileIn: invokes compile: aString into: aClass classified: aSymbol "The trick here is to be as silently a possible so that the package is not marked dirty when running WAFileLibrary test. This also makes running tests much faster." | methodNode compiledMethod selector methodAndNode | methodNode := aClass compilerClass new compile: aString in: aClass notifying: nil ifFail: [ GRError signal: 'syntax error' ]. selector := methodNode selector. methodAndNode := CompiledMethodWithNode generateMethodFromNode: methodNode trailer: aClass defaultMethodTrailer. compiledMethod := methodAndNode method. compiledMethod putSource: aString fromParseNode: methodAndNode node inFile: 2 withPreamble: [ :file | aClass printCategoryChunk: aSymbol asString on: file priorMethod: (aClass compiledMethodAt: selector ifAbsent: [ nil ]). file cr ]. aClass addSelectorSilently: selector withMethod: compiledMethod. self doSilently: [ aClass organization classify: selector under: aSymbol ] And after it breaks nicelyâ¦. Stef On Jun 30, 2013, at 10:24 AM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Hi esteban
In Seaside, I created a subclass of WAFileLibrary then StefWAFileLibrary addAllFilesIn: 'foo' my folder foo contained a simple sh file
I got a method created in the class side of StefWAFileLibrary
I created a separated package and I could not save (I could save) but the method could be included. I added other methods by hand and they were saved but not the methods created by the addAllFilesIn:
I suspect that the addAllFilesIn: did not raise a proper announcement. When I put a halt in snapshot packageSet does not get any methods.
Stef
snapshot | packageInfo definitions categories | self halt. packageInfo := self packageSet. definitions := OrderedCollection new. categories := (packageInfo packages collect: #packageName) asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ].
packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ].
packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ].
packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ].
(packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions
Stef
is this 3.0? We removed CompiledMethodWithNode there⦠On Jun 30, 2013, at 10:35 AM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
Probably linked to
addFileIn: invokes
compile: aString into: aClass classified: aSymbol
"The trick here is to be as silently a possible so that the package is not marked dirty when running WAFileLibrary test. This also makes running tests much faster."
| methodNode compiledMethod selector methodAndNode | methodNode := aClass compilerClass new compile: aString in: aClass notifying: nil ifFail: [ GRError signal: 'syntax error' ]. selector := methodNode selector. methodAndNode := CompiledMethodWithNode generateMethodFromNode: methodNode trailer: aClass defaultMethodTrailer. compiledMethod := methodAndNode method. compiledMethod putSource: aString fromParseNode: methodAndNode node inFile: 2 withPreamble: [ :file | aClass printCategoryChunk: aSymbol asString on: file priorMethod: (aClass compiledMethodAt: selector ifAbsent: [ nil ]). file cr ]. aClass addSelectorSilently: selector withMethod: compiledMethod. self doSilently: [ aClass organization classify: selector under: aSymbol ]
And after it breaks nicelyâ¦.
Stef
On Jun 30, 2013, at 10:24 AM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Hi esteban
In Seaside, I created a subclass of WAFileLibrary then StefWAFileLibrary addAllFilesIn: 'foo' my folder foo contained a simple sh file
I got a method created in the class side of StefWAFileLibrary
I created a separated package and I could not save (I could save) but the method could be included. I added other methods by hand and they were saved but not the methods created by the addAllFilesIn:
I suspect that the addAllFilesIn: did not raise a proper announcement. When I put a halt in snapshot packageSet does not get any methods.
Stef
snapshot | packageInfo definitions categories | self halt. packageInfo := self packageSet. definitions := OrderedCollection new. categories := (packageInfo packages collect: #packageName) asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ].
packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ].
packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ].
packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ].
(packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions
Stef
this is Seaside30 on Pharo2.0 and also on Seaside 31 on Pharo30 Stef
is this 3.0?
We removed CompiledMethodWithNode thereâ¦
On Jun 30, 2013, at 10:35 AM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
Probably linked to
addFileIn: invokes
compile: aString into: aClass classified: aSymbol
"The trick here is to be as silently a possible so that the package is not marked dirty when running WAFileLibrary test. This also makes running tests much faster."
| methodNode compiledMethod selector methodAndNode | methodNode := aClass compilerClass new compile: aString in: aClass notifying: nil ifFail: [ GRError signal: 'syntax error' ]. selector := methodNode selector. methodAndNode := CompiledMethodWithNode generateMethodFromNode: methodNode trailer: aClass defaultMethodTrailer. compiledMethod := methodAndNode method. compiledMethod putSource: aString fromParseNode: methodAndNode node inFile: 2 withPreamble: [ :file | aClass printCategoryChunk: aSymbol asString on: file priorMethod: (aClass compiledMethodAt: selector ifAbsent: [ nil ]). file cr ]. aClass addSelectorSilently: selector withMethod: compiledMethod. self doSilently: [ aClass organization classify: selector under: aSymbol ]
And after it breaks nicelyâ¦.
Stef
On Jun 30, 2013, at 10:24 AM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Hi esteban
In Seaside, I created a subclass of WAFileLibrary then StefWAFileLibrary addAllFilesIn: 'foo' my folder foo contained a simple sh file
I got a method created in the class side of StefWAFileLibrary
I created a separated package and I could not save (I could save) but the method could be included. I added other methods by hand and they were saved but not the methods created by the addAllFilesIn:
I suspect that the addAllFilesIn: did not raise a proper announcement. When I put a halt in snapshot packageSet does not get any methods.
Stef
snapshot | packageInfo definitions categories | self halt. packageInfo := self packageSet. definitions := OrderedCollection new. categories := (packageInfo packages collect: #packageName) asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ].
packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ].
packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ].
packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ].
(packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions
Stef
I wonder if GRPharoPlatform>>compile: aString into: aClass classified: aSymbol is not just duplicating logic and as such brings subtle bugs. Now the addAllFilesIn: is broken Implementing it as compile: aString into: aClass classified: aSymbol [aClass compile: aString classified: aSymbol] on: Error do: [:ex | GRError signal: 'syntax error' ] works. I sent the information to the seaside mailing-list. May be there are some other side effects but to me duplicating core logic outside of the core can be dangerous. On Jun 30, 2013, at 10:34 AM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Probably linked to
addFileIn: invokes
compile: aString into: aClass classified: aSymbol
"The trick here is to be as silently a possible so that the package is not marked dirty when running WAFileLibrary test. This also makes running tests much faster."
| methodNode compiledMethod selector methodAndNode | methodNode := aClass compilerClass new compile: aString in: aClass notifying: nil ifFail: [ GRError signal: 'syntax error' ]. selector := methodNode selector. methodAndNode := CompiledMethodWithNode generateMethodFromNode: methodNode trailer: aClass defaultMethodTrailer. compiledMethod := methodAndNode method. compiledMethod putSource: aString fromParseNode: methodAndNode node inFile: 2 withPreamble: [ :file | aClass printCategoryChunk: aSymbol asString on: file priorMethod: (aClass compiledMethodAt: selector ifAbsent: [ nil ]). file cr ]. aClass addSelectorSilently: selector withMethod: compiledMethod. self doSilently: [ aClass organization classify: selector under: aSymbol ]
And after it breaks nicelyâ¦.
Stef
On Jun 30, 2013, at 10:24 AM, Stéphane Ducasse <Stephane.Ducasse@inria.fr> wrote:
Hi esteban
In Seaside, I created a subclass of WAFileLibrary then StefWAFileLibrary addAllFilesIn: 'foo' my folder foo contained a simple sh file
I got a method created in the class side of StefWAFileLibrary
I created a separated package and I could not save (I could save) but the method could be included. I added other methods by hand and they were saved but not the methods created by the addAllFilesIn:
I suspect that the addAllFilesIn: did not raise a proper announcement. When I put a halt in snapshot packageSet does not get any methods.
Stef
snapshot | packageInfo definitions categories | self halt. packageInfo := self packageSet. definitions := OrderedCollection new. categories := (packageInfo packages collect: #packageName) asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ].
packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ].
packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ].
packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ].
(packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions
Stef
On Jun 30, 2013, at 2:46 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
I wonder if GRPharoPlatform>>compile: aString into: aClass classified: aSymbol is not just duplicating logic and as such brings subtle bugs.
Now the addAllFilesIn: is broken
Implementing it as
compile: aString into: aClass classified: aSymbol
[aClass compile: aString classified: aSymbol] on: Error do: [:ex | GRError signal: 'syntax error' ]
works. I sent the information to the seaside mailing-list. May be there are some other side effects but to me duplicating core logic outside of the core can be dangerous.
It makes cleaning up the system very difficult⦠e.g. if we are supposed to introduce Opal while being backward compatible so that this methods still works, we can just stop now and do something else. Marcus
I wonder if GRPharoPlatform>>compile: aString into: aClass classified: aSymbol is not just duplicating logic and as such brings subtle bugs.
Now the addAllFilesIn: is broken
Implementing it as
compile: aString into: aClass classified: aSymbol
[aClass compile: aString classified: aSymbol] on: Error do: [:ex | GRError signal: 'syntax error' ]
works. I sent the information to the seaside mailing-list. May be there are some other side effects but to me duplicating core logic outside of the core can be dangerous.
It makes cleaning up the system very difficult⦠e.g. if we are supposed to introduce Opal while being backward compatible so that this methods still works, we can just stop now and do something else.
No :-) this is why we should just help the seasiders by proposing solutions and this is what I tried to do. Stef
Marcus
participants (2)
-
Marcus Denker -
Stéphane Ducasse