On Mon, Dec 23, 2013 at 07:01:16PM +0100, Holger Hans Peter Freyther wrote:

>  st> a := 0. p := [a := 3] newProcess
> 
> The code does not get across Dictionary>>findIndex: (Dictionary.st:588).


translate_method()
...
            if (!lbl_define (*this_label))
            {
              define_ip_map_entry (bp - bc);
              emit_interrupt_check (JIT_NOREG, bp - bc);
            }


Dictionary>>#findIndex: 
        [((element := self primAt: index) isNil or: [element key = anObject])
            ifTrue: [^index].
        index == size ifTrue: [index := 1] ifFalse: [index := index + 1]]
                repeat

so it does appear to loop over this statement. index and sp never increase:

An instance of MethodContext
  parent: Dictionary(HashedCollection)>>findIndexOrNil: (HashedColl.st:359)
  nativeIP: 0
  ip: 22
  sp: 3
  receiver: Dictionary (
        #p->Process(nil at userSchedulingPriority, ready to run)
        #a->nil
)
  method: Dictionary>>findIndex:
  flags: 0
  args:
    anObject -> #a
  temps:
    index -> 11
    size -> 16
    element -> #a->3
  optimized temps:
  stack: 



So I think we might need to export the SP when moving out?

_______________________________________________
help-smalltalk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-smalltalk

Reply via email to