diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-07-09 13:08:30 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-07-18 11:33:44 +1000 |
commit | 9c0d53835cae3b23e55ac008ce0bad626af3145a (patch) | |
tree | 0534700f10d78b43af691194e2fde059cf2e8339 | |
parent | e46851db8294d66e97e0a98a689f0a562deded4e (diff) | |
download | jimtcl-9c0d53835cae3b23e55ac008ce0bad626af3145a.zip jimtcl-9c0d53835cae3b23e55ac008ce0bad626af3145a.tar.gz jimtcl-9c0d53835cae3b23e55ac008ce0bad626af3145a.tar.bz2 |
Don't add a local proc context in source and eval
Only procedures add a local proc context. Otherwise
it is not possible to use local/upcall in Tcl packages.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 18 | ||||
-rw-r--r-- | tests/alias.test | 12 |
2 files changed, 2 insertions, 28 deletions
@@ -10426,7 +10426,6 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) char *buf; Jim_Obj *scriptObjPtr; Jim_Obj *prevScriptObj; - Jim_Stack *prevLocalProcs; struct stat sb; int retcode; int readlen; @@ -10485,16 +10484,8 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename) prevScriptObj = interp->currentScriptObj; interp->currentScriptObj = scriptObjPtr; - /* Install a new stack for local procs */ - prevLocalProcs = interp->localProcs; - interp->localProcs = NULL; - retcode = Jim_EvalObj(interp, scriptObjPtr); - /* Delete any local procs */ - JimDeleteLocalProcs(interp); - interp->localProcs = prevLocalProcs; - /* Handle the JIM_RETURN return code */ if (retcode == JIM_RETURN) { if (--interp->returnLevel <= 0) { @@ -12306,17 +12297,12 @@ static int Jim_DebugCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar static int Jim_EvalCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int rc; - Jim_Stack *prevLocalProcs; if (argc < 2) { Jim_WrongNumArgs(interp, 1, argv, "script ?...?"); return JIM_ERR; } - /* Install a new stack for local procs */ - prevLocalProcs = interp->localProcs; - interp->localProcs = NULL; - if (argc == 2) { rc = Jim_EvalObj(interp, argv[1]); } @@ -12324,10 +12310,6 @@ static int Jim_EvalCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg rc = Jim_EvalObj(interp, Jim_ConcatObj(interp, argc - 1, argv + 1)); } - /* Delete any local procs */ - JimDeleteLocalProcs(interp); - interp->localProcs = prevLocalProcs; - if (rc == JIM_ERR) { /* eval is "interesting", so add a stack frame here */ interp->addStackTrace++; diff --git a/tests/alias.test b/tests/alias.test index abbc2a0..00d3327 100644 --- a/tests/alias.test +++ b/tests/alias.test @@ -53,15 +53,6 @@ test curry-1.5 "Delete curry" { collect } {2} -test local-1.1 "local lambda in eval" { - set x 1 - eval { - local set a [lambda {b} { incr b }] - set x [$a $x] - } - list [info procs $a] $x -} {{} 2} - test local-1.2 "local curry in proc" { proc a {} { local set p [curry info exists] @@ -116,13 +107,14 @@ test local-1.8 "local on non-proc" { } {1 {not a proc: "blah"}} test local-1.9 "local on existing proc" { - eval { + proc x {} { proc a {b} {incr b} local function a set c [lambda b {incr b -1}] local function $c lappend result [a 1] [$c 2] } + set result [x] list [info procs a] $result } {{} {2 1}} |