diff options
author | Steve Bennett <steveb@workware.net.au> | 2015-06-03 08:13:08 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2015-06-03 10:53:24 +1000 |
commit | b927888eaee48eba3ce78c1887120cc219275775 (patch) | |
tree | 1127666f0b5ee450c6065f5b15321a0dc15e4fc7 /jim.h | |
parent | adcb761134c80285073a2c4728ab545dec101ff2 (diff) | |
download | jimtcl-b927888eaee48eba3ce78c1887120cc219275775.zip jimtcl-b927888eaee48eba3ce78c1887120cc219275775.tar.gz jimtcl-b927888eaee48eba3ce78c1887120cc219275775.tar.bz2 |
chained tailcalls were not always being run
There is no need to protect against merging tailcalls across
uplevel since any tailcalls should already be fully resolved.
This fixes a problem with the following only running one loop:
foreach a {b c d} {
command-with-tailcall $a
}
In particular:
dict for {a b} {1 2 3 4} { puts $a,$b }
Reported-by: Jon Povey <jon.povey@emsolutions.com.au>
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.h')
-rw-r--r-- | jim.h | 1 |
1 files changed, 0 insertions, 1 deletions
@@ -437,7 +437,6 @@ typedef struct Jim_CallFrame { Jim_Obj *fileNameObj; /* file and line of caller of this proc (if available) */ int line; Jim_Stack *localCommands; /* commands to be destroyed when the call frame is destroyed */ - int tailcall; /* non-zero if a tailcall is being evaluated at this level */ struct Jim_Obj *tailcallObj; /* Pending tailcall invocation */ struct Jim_Cmd *tailcallCmd; /* Resolved command for pending tailcall invocation */ } Jim_CallFrame; |