I've just committed a new command to languages/tcl/ (r8466). While
debugging, I've experienced some problems. Using the following Tcl in
languages/tcl/example.tcl:

    set a(a) b
    parray a

Running normally segfaults:

    mdiep$ ./parrot languages/tcl/tcl.pbc languages/tcl/example.tcl 
    Segmentation fault

Tracing causes a weird tracing error that has to do with '\0' in
string registers:

    mdiep$ ./parrot -tf languages/tcl/tcl.pbc
languages/tcl/example.tcl 2>trace.log
    invalid command name "array"

Tracing with garbage collection gives the original segfault:

    mdiep$ ./parrot -G -tf languages/tcl/tcl.pbc
languages/tcl/example.tcl 2>trace.log
    Segmentation fault

The trace reveals that this has to do with the Iterator pmc:

    mdiep$ tail trace.log 
      4873 unless P15, 47   - P15=Iterator=PMC(0xff1538), 
      4876 set I0, 1        - I0=1, 
      4879 set I1, 0        - I1=0, 
      4882 set I2, 0        - I2=0, 
      4885 set I3, 0        - I3=1, 
      4888 set I4, 0        - I4=0, 
      4891 set S1, "O"      - , 
      4894 set P2, P15      - P2=PMCNULL, P15=Iterator=PMC(0xff1538)
      4897 callmethodcc "next"
    # find_method class 'Iterator' method 'next': NCI

These GC issues with tracing have been pretty frequent. Please take a
look at languages/tcl/lib/commands/parray.pir to make sure the
iterator code is correct.

Thanks.

-- 
matt diephouse
http://matt.diephouse.com

Reply via email to