[squeak-dev] Closure testers needed
Eliot Miranda
eliot.miranda at gmail.com
Thu Jul 16 21:05:25 UTC 2009
Hi Ken,
On Thu, Jul 16, 2009 at 1:58 PM, Ken Causey <ken at kencausey.com> 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 <ken at kencausey.com>
> > 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...
> >
> >
> >
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20090716/48d6711e/attachment.htm
More information about the Squeak-dev
mailing list
|