From 1669335e1c8aa6a2374cc3796c6d9d471becae82 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 28 Jul 2011 14:39:30 +1000 Subject: [PATCH] Add Jim_EvalSource() to replace Jim_Eval_Named() Since the line number should correspond to the first line of the script, it is easier to use with __LINE__ if the filename and line number are before the script. Signed-off-by: Steve Bennett --- jim.c | 7 +++---- jim.h | 7 +++++-- make-bootstrap-jim | 5 ++--- make-c-ext.tcl | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/jim.c b/jim.c index c50319af..8b170939 100644 --- a/jim.c +++ b/jim.c @@ -9886,7 +9886,7 @@ int Jim_EvalObj(Jim_Interp *interp, Jim_Obj *scriptObjPtr) /* If the object is of type "list", we can call * a specialized version of Jim_EvalObj() */ if (Jim_IsList(scriptObjPtr)) { - return JimEvalObjList(interp, scriptObjPtr, NULL, 0); + return JimEvalObjList(interp, scriptObjPtr, interp->emptyObj, 1); } Jim_IncrRefCount(scriptObjPtr); /* Make sure it's shared. */ @@ -10306,7 +10306,7 @@ static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, Jim_Obj *fileNameO return retcode; } -int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename, int lineno) +int Jim_EvalSource(Jim_Interp *interp, const char *filename, int lineno, const char *script) { int retval; Jim_Obj *scriptObjPtr; @@ -10314,7 +10314,6 @@ int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename, scriptObjPtr = Jim_NewStringObj(interp, script, -1); Jim_IncrRefCount(scriptObjPtr); - if (filename) { Jim_Obj *prevScriptObj; @@ -10336,7 +10335,7 @@ int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename, int Jim_Eval(Jim_Interp *interp, const char *script) { - return Jim_Eval_Named(interp, script, NULL, 0); + return Jim_EvalObj(interp, Jim_NewStringObj(interp, script, -1)); } /* Execute script in the scope of the global level */ diff --git a/jim.h b/jim.h index 37ed67ff..a6138b55 100644 --- a/jim.h +++ b/jim.h @@ -636,8 +636,11 @@ JIM_EXPORT void Jim_SetEnviron(char **env); /* evaluation */ JIM_EXPORT int Jim_Eval(Jim_Interp *interp, const char *script); /* in C code, you can do this and get better error messages */ -/* Jim_Eval_Named( interp, "some tcl commands", __FILE__, __LINE__ ); */ -JIM_EXPORT int Jim_Eval_Named(Jim_Interp *interp, const char *script,const char *filename, int lineno); +/* Jim_EvalSource( interp, __FILE__, __LINE__ , "some tcl commands"); */ +JIM_EXPORT int Jim_EvalSource(Jim_Interp *interp, const char *filename, int lineno, const char *script); +/* Backwards compatibility */ +#define Jim_Eval_Named(I, S, F, L) Jim_EvalSource((I), (F), (L), (S)) + JIM_EXPORT int Jim_EvalGlobal(Jim_Interp *interp, const char *script); JIM_EXPORT int Jim_EvalFile(Jim_Interp *interp, const char *filename); JIM_EXPORT int Jim_EvalFileGlobal(Jim_Interp *interp, const char *filename); diff --git a/make-bootstrap-jim b/make-bootstrap-jim index 38ce22e1..6dd1a942 100755 --- a/make-bootstrap-jim +++ b/make-bootstrap-jim @@ -14,14 +14,13 @@ int Jim_${basename}Init(Jim_Interp *interp) if (Jim_PackageProvide(interp, "$basename", "1.0", JIM_ERRMSG)) return JIM_ERR; - return Jim_Eval_Named(interp, + return Jim_EvalSource(interp, \"$source\", 1, EOF # Note: Keep newlines so that line numbers match in error messages sed -e 's/^[ ]*#.*//' -e 's@\\@\\\\@g' -e 's@"@\\"@g' -e 's@^\(.*\)$@"\1\\n"@' $source -#sed -e 's@^\(.*\)$@"\1\\n"@' $source -echo ",\"$source\", 1);" +echo ");" echo "}" } diff --git a/make-c-ext.tcl b/make-c-ext.tcl index 7e506ee8..fd1a056b 100644 --- a/make-c-ext.tcl +++ b/make-c-ext.tcl @@ -32,7 +32,7 @@ set pkgname [file rootname $basename] lappend lines "int Jim_${pkgname}Init(Jim_Interp *interp)" lappend lines "\{" lappend lines "\tif (Jim_PackageProvide(interp, \"$pkgname\", \"1.0\", JIM_ERRMSG)) return JIM_ERR;" -lappend lines "\treturn Jim_Eval_Named(interp, [join $sourcelines \n], \"$basename\", 1);" +lappend lines "\treturn Jim_EvalSource(interp, \"$basename\", 1, [join $sourcelines \n]);" lappend lines "\}" puts [join $lines \n]