From: SourceForge.net <no...@so...> - 2006-03-08 09:58:59
|
Bugs item #1445454, was opened at 2006-03-08 05:30 Message generated for change (Comment added) made by msofer You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1445454&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 46. Bytecode Compiler Group: current: 8.5a3 Status: Open Resolution: None Priority: 9 Submitted By: Andreas Leitgeb (avl42) Assigned to: miguel sofer (msofer) Summary: incr on undefined array fails in procedures Initial Comment: on a fresh tclsh8.5: % incr foo(1) 1 # so far so good, but: % proc abc {} { incr foo(1) } % abc can't read "foo(1)": no such variable (with scalars it works both ways) ---------------------------------------------------------------------- >Comment By: miguel sofer (msofer) Date: 2006-03-08 06:58 Message: Logged In: YES user_id=148712 Note that the problem is the non-existing array, and not the non-existing component: % proc x {} {incr a(1)} % proc y {} {set a(2) 1; incr a(1)} % x can't read "a(1)": no such variable % y 1 ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2006-03-08 06:02 Message: Logged In: YES user_id=79902 Looks to be a difference in behaviour between bytecodes. :-( % set tcl_traceExec 3; time {incr foo(1)}; set tcl_traceExec 0 1: (10) invoking "time" "incr foo(1)" Executing ByteCode 0x814d960, refCt 2, epoch 0, interp 0x8158d50 (epoch 0) Source: "incr foo(1)" Cmds 1, src 11, inst 7, litObjs 2, aux 0, stkDepth 2, code/src 10.91 Code 120 = header 100+inst 7+litObj 8+exc 0+aux 0+cmdMap 4 Starting stack top=1 2: 1 (0) push1 0 # "foo" 2: 2 (0) push1 0 => "foo" 2: 2 (2) push1 1 # "1" 2: 3 (2) push1 1 => "1" 2: 3 (4) incrArrayStkImm +1 2: 3 (4) incrArrayStkImm "foo(1)" (by 1) => 1 2: 2 (6) done 2: 2 (6) done => return code=0, result="1" ... no enclosing catch, returning TCL_OK 0 % set tcl_traceExec 3;catch { abc }; set tcl_traceExec 0 1: (18) invoking "abc" Calling proc "abc" Executing ByteCode 0x814d260, refCt 2, epoch 0, interp 0x8158d50 (epoch 0) Source: "incr foo(1)" Cmds 1, src 11, inst 6, litObjs 1, aux 0, stkDepth 1, code/src 10.91 Code 120 = header 100+inst 6+litObj 4+exc 0+aux 0+cmdMap 4 Proc 0x816fb90, refCt 2, args 0, compiled locals 1 Starting stack top=24 2: 24 (0) push1 0 # "1" 2: 25 (0) push1 0 => "1" 2: 25 (2) incrArray1Imm %v0 +1 # var "foo" 2: 25 (2) incrArray1Imm 0 "1" (by 1) => ERROR: can't read "foo(1)": no such v ... no enclosing catch, returning TCL_ERROR 0 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=1445454&group_id=10894 |