Hi Ken,
On Thu, Jul 16, 2009 at 1:58 PM, Ken Causey <[hidden email]> wrote: What '3.9 final image' are you referring to? I see none of these You reported a failure in trying to load the closure configuration in an image that was equipped with traits, specifically an MNU for variablesAndOffsetsDo:. I took the nearest traits-equipped image I have to hand, which is Squeak3.9-final-7067.image and looked. I was then able to explain that this method and a couple of others could be copied from Behavior & ClassDescription into TraitBehavior and TraitDescription to fix the problem.
Does that help? best Eliot
|
These methods are in Pharo and stamped eem (almost one year old).
I presume Andreas just missed a 3.9 specific changeSet. Trait>>variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Since Traits don't confer state there is nothing to do here." 2009/7/16 Eliot Miranda <[hidden email]>: > Hi Ken, > > On Thu, Jul 16, 2009 at 1:58 PM, Ken Causey <[hidden email]> wrote: >> >> What '3.9 final image' are you referring to? I see none of these >> methods in 3.9-7067. Why are we talking about 3.9 anyway? > > You reported a failure in trying to load the closure configuration in an > image that was equipped with traits, specifically an MNU for > variablesAndOffsetsDo:. I took the nearest traits-equipped image I have to > hand, which is Squeak3.9-final-7067.image and looked. I was then able to > explain that this method and a couple of others could be copied from > Behavior & ClassDescription into TraitBehavior and TraitDescription to fix > the problem. > Does that help? > best > Eliot > >> >> Ken >> >> On Thu, 2009-07-16 at 12:31 -0700, Eliot Miranda wrote: >> > So someone needs to implement variablesAndOffsetsDo: for TraitBehavior >> > analogous to Behavior>> variablesAndOffsetsDo:. >> > variablesAndOffsetsDo: is the interface I added between the compiler >> > and the class its compiling in to abstract away from instance >> > variable/slot implementation. See Encoder>>init:context:notifying: >> > ... >> > class variablesAndOffsetsDo: >> > [:variable "<String|CFieldDefinition>" :offset "<Integer|nil>" | >> > offset isNil >> > ifTrue: [scopeTable at: variable name put: (FieldNode new >> > fieldDefinition: variable)] >> > ifFalse: [scopeTable >> > at: variable >> > put: (offset >= 0 >> > ifTrue: [InstanceVariableNode new >> > name: variable index: offset] >> > ifFalse: [MaybeContextInstanceVariableNode new >> > name: variable index: offset negated])]]. >> > ... >> > >> > >> > FieldNode is the Tweak compiler extension that compiles Tweak property >> > access as message sends to slot accessors. The negative offset hack >> > allows ContextPart (actually InstructionStream and subclasses) to >> > access its instance variables specially, allowing the VM to hide >> > context-to-sack mapping and make contexts appear like normal objects >> > even though inside the VM they may actually be proxies for stack >> > frames. >> > >> > >> > Quickly looking at the 3.9 final image I'd say that you'd do the >> > following copies: >> > Behavior variablesAndOffsetsDo: => TraitBehavior >> > Behavior instVarNamesAndOffsetsDo: -> TraitBehavior >> > ClassDescription instVarNamesAndOffsetsDo: -> TraitDescription >> > >> > >> > and then things have a good chance of working. >> > >> > >> > HTH >> > Eliot >> > >> > On Thu, Jul 16, 2009 at 10:47 AM, Ken Causey <[hidden email]> >> > wrote: >> > So I decided I would try to run all the tests and almost >> > immediately I >> > got a debugger. This is with an image built using the >> > directions >> > running on 32-bit linux with exupery 0.15.1 VM. The failure >> > seems to be >> > in the setup of TraitsResource >> > >> > Ken >> > >> > SecurityManager state: >> > Restricted: false >> > FileAccess: true >> > SocketAccess: true >> > Working Dir /home/ken/projects/squeak/ncdm >> > Trusted Dir /home/ken/projects/squeak/ncdm/secure >> > Untrusted Dir /home/ken/projects/squeak/ncdm/My Squeak >> > >> > ClassTrait(Object)>>doesNotUnderstand: #variablesAndOffsetsDo: >> > Receiver: T2 classTrait >> > Arguments and temporary variables: >> > aMessage: variablesAndOffsetsDo: >> > [closure] in >> > EncoderForV3PlusClosures(Encoder)...etc... >> > Receiver's instance variables: >> > methodDict: a MethodDictionary() >> > traitComposition: {} >> > localSelectors: nil >> > users: an IdentitySet() >> > organization: nil >> > baseTrait: T2 >> > >> > EncoderForV3PlusClosures(Encoder)>>init:context:notifying: >> > Receiver: {an EncoderForV3PlusClosures} >> > Arguments and temporary variables: >> > aClass: T2 classTrait >> > aContext: nil >> > req: a Parser >> > homeNode: nil >> > Receiver's instance variables: >> > comment: nil >> > pc: nil >> > scopeTable: a Dictionary('false'->{false} >> > 'nil'->{nil} 'self'->{self} >> > 'super'->...etc... >> > nTemps: 0 >> > supered: false >> > requestor: a Parser >> > class: T2 classTrait >> > selector: nil >> > literalStream: a WriteStream #() >> > selectorSet: a Dictionary(#*->{*} #+->{+} >> > #-->{-} #/->{/} #'//'->{//} >> > #<->{<} #...etc... >> > litIndSet: a Dictionary() >> > litSet: a LiteralDictionary(-1->{-1} >> > 0->{0} 1->{1} 2->{2} ) >> > sourceRanges: nil >> > globalSourceRanges: nil >> > stream: nil >> > position: nil >> > rootNode: nil >> > blockExtentsToLocals: nil >> > >> > [] in >> > Parser>>parse:class:category:noPattern:context:notifying:ifFail: >> > Receiver: a Parser >> > Arguments and temporary variables: >> > <<error during printing> >> > Receiver's instance variables: >> > source: a ReadStream 'm2ClassSide: a >> > ^a' >> > mark: 14 >> > hereChar: Character space >> > aheadChar: $^ >> > token: 'a' >> > tokenType: #word >> > currentComment: nil >> > buffer: a WriteStream 'a' >> > typeTable: #(#xBinary #xBinary #xBinary >> > #xBinary #xBinary #xBinary >> > #xBinary #xB...etc... >> > here: 'm2ClassSide:' >> > hereType: #keyword >> > hereMark: 1 >> > hereEnd: 12 >> > prevMark: 1 >> > prevEnd: nil >> > encoder: {an EncoderForV3PlusClosures} >> > requestor: nil >> > parseNode: nil >> > failBlock: [closure] in >> > Compiler>>translate:noPattern:ifFail: >> > requestorOffset: 0 >> > tempsMark: nil >> > doitFlag: false >> > properties: nil >> > category: #'as yet unclassified' >> > >> > BlockClosure>>on:do: >> > Receiver: [closure] in >> > Parser>>parse:class:category:noPattern:context:notifying:ifFail: >> > Arguments and temporary variables: >> > exception: ReparseAfterSourceEditing >> > handlerAction: [closure] in >> > Parser>>parse:class:category:noPattern:context:noti...etc... >> > handlerActive: true >> > Receiver's instance variables: >> > outerContext: >> > Parser>>parse:class:category:noPattern:context:notifying:ifFail: >> > startpc: 131 >> > numArgs: 0 >> > >> > >> > --- The full stack --- >> > ClassTrait(Object)>>doesNotUnderstand: #variablesAndOffsetsDo: >> > EncoderForV3PlusClosures(Encoder)>>init:context:notifying: >> > [] in >> > Parser>>parse:class:category:noPattern:context:notifying:ifFail: >> > BlockClosure>>on:do: >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> > - - >> > Parser>>parse:class:category:noPattern:context:notifying:ifFail: >> > Compiler>>translate:noPattern:ifFail: >> > Compiler>>compile:in:classified:notifying:ifFail: >> > >> > ClassTrait(TraitBehavior)>>compile:classified:notifying:trailer:ifFail: >> > >> > ClassTrait(TraitDescription)>>compile:classified:withStamp:notifying:logSource: >> > ClassTrait>>compile:classified:withStamp:notifying:logSource: >> > >> > ClassTrait(TraitDescription)>>compile:classified:withStamp:notifying: >> > ClassTrait(TraitDescription)>>compile:classified:notifying: >> > ClassTrait(TraitDescription)>>compile:notifying: >> > ClassTrait(TraitBehavior)>>compile: >> > [] in TraitsResource>>setUp >> > [] in SystemChangeNotifier>>doSilently: >> > BlockClosure>>ensure: >> > SystemChangeNotifier>>doSilently: >> > TraitsResource>>setUp >> > TraitsResource(TestResource)>>initialize >> > TraitsResource class(Behavior)>>new >> > TraitsResource class(TestResource class)>>current >> > TraitsResource class(TestResource class)>>isAvailable >> > [] in TestRunner>>basicSetUpSuite: >> > Set>>do: >> > TestRunner>>basicSetUpSuite: >> > TestRunner>>basicRunSuite:do: >> > TestRunner>>runSuite: >> > TestRunner>>runAll >> > PluggableButtonMorphPlus(PluggableButtonMorph)>>performAction >> > PluggableButtonMorphPlus>>performAction >> > [] in PluggableButtonMorphPlus(PluggableButtonMorph)>>mouseUp: >> > ...etc... >> > >> > >> > >> > >> > >> > > > > > > |
In reply to this post by Mariano Martinez Peck
On Thu, 2009-07-16 at 13:03 -0100, Mariano Martinez Peck wrote:
> > > On Thu, Jul 16, 2009 at 5:28 AM, Andreas Raab <[hidden email]> > wrote: > Folks - > > I have a closure version for the trunk that's ready for > testing. Since converting an image to closures is tricky I > would like a couple of people to give it a test run before I > push it for real. I am interested in both positive feedback > ("works for me") as well as negative feedback ("crashes, > hangs, core-dumps when trying to load x,y,z") in particular if > you use custom 3.10[.2] based images. > > In order to test the load process you need to: > > 1) Get a closure-enabled VM from: > http://squeakvm.org/win32/release/SqueakVM-Win32-3.11.3-bin.zip (win) > ftp://ftp.smalltalkconsulting.com/Squeak% > 204.1.1beta2U.app.zip (mac) > > I am on Linux. In Pharo we have to use Exupery VM because it was > compiled with Closure changes and Standard VM doesn't. If someone > makes a binary of Linux I can give it a try. You should be able to use the Exupery VM for squeak-dev images too. I supplied it to enable closure images to be built and debugged. It does have a few extra changes from the base VM that can be safely ignored. Bryce |
Free forum by Nabble | Edit this page |