Skip to content

Commit

Permalink
Add Jim_EvalSource() to replace Jim_Eval_Named()
Browse files Browse the repository at this point in the history
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 <steveb@workware.net.au>
  • Loading branch information
msteveb committed Jul 29, 2011
1 parent 3a8ccfd commit 1669335
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 10 deletions.
7 changes: 3 additions & 4 deletions jim.c
Expand Up @@ -9886,7 +9886,7 @@ int Jim_EvalObj(Jim_Interp *interp, Jim_Obj *scriptObjPtr)
/* If the object is of type "list", we can call /* If the object is of type "list", we can call
* a specialized version of Jim_EvalObj() */ * a specialized version of Jim_EvalObj() */
if (Jim_IsList(scriptObjPtr)) { 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. */ Jim_IncrRefCount(scriptObjPtr); /* Make sure it's shared. */
Expand Down Expand Up @@ -10306,15 +10306,14 @@ static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, Jim_Obj *fileNameO
return retcode; 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; int retval;
Jim_Obj *scriptObjPtr; Jim_Obj *scriptObjPtr;


scriptObjPtr = Jim_NewStringObj(interp, script, -1); scriptObjPtr = Jim_NewStringObj(interp, script, -1);
Jim_IncrRefCount(scriptObjPtr); Jim_IncrRefCount(scriptObjPtr);



if (filename) { if (filename) {
Jim_Obj *prevScriptObj; Jim_Obj *prevScriptObj;


Expand All @@ -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) 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 */ /* Execute script in the scope of the global level */
Expand Down
7 changes: 5 additions & 2 deletions jim.h
Expand Up @@ -636,8 +636,11 @@ JIM_EXPORT void Jim_SetEnviron(char **env);
/* evaluation */ /* evaluation */
JIM_EXPORT int Jim_Eval(Jim_Interp *interp, const char *script); JIM_EXPORT int Jim_Eval(Jim_Interp *interp, const char *script);
/* in C code, you can do this and get better error messages */ /* in C code, you can do this and get better error messages */
/* Jim_Eval_Named( interp, "some tcl commands", __FILE__, __LINE__ ); */ /* Jim_EvalSource( interp, __FILE__, __LINE__ , "some tcl commands"); */
JIM_EXPORT int Jim_Eval_Named(Jim_Interp *interp, const char *script,const char *filename, int lineno); 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_EvalGlobal(Jim_Interp *interp, const char *script);
JIM_EXPORT int Jim_EvalFile(Jim_Interp *interp, const char *filename); JIM_EXPORT int Jim_EvalFile(Jim_Interp *interp, const char *filename);
JIM_EXPORT int Jim_EvalFileGlobal(Jim_Interp *interp, const char *filename); JIM_EXPORT int Jim_EvalFileGlobal(Jim_Interp *interp, const char *filename);
Expand Down
5 changes: 2 additions & 3 deletions make-bootstrap-jim
Expand Up @@ -14,14 +14,13 @@ int Jim_${basename}Init(Jim_Interp *interp)
if (Jim_PackageProvide(interp, "$basename", "1.0", JIM_ERRMSG)) if (Jim_PackageProvide(interp, "$basename", "1.0", JIM_ERRMSG))
return JIM_ERR; return JIM_ERR;
return Jim_Eval_Named(interp, return Jim_EvalSource(interp, \"$source\", 1,
EOF EOF


# Note: Keep newlines so that line numbers match in error messages # 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/^[ ]*#.*//' -e 's@\\@\\\\@g' -e 's@"@\\"@g' -e 's@^\(.*\)$@"\1\\n"@' $source
#sed -e 's@^\(.*\)$@"\1\\n"@' $source


echo ",\"$source\", 1);" echo ");"
echo "}" echo "}"
} }


Expand Down
2 changes: 1 addition & 1 deletion make-c-ext.tcl
Expand Up @@ -32,7 +32,7 @@ set pkgname [file rootname $basename]
lappend lines "int Jim_${pkgname}Init(Jim_Interp *interp)" lappend lines "int Jim_${pkgname}Init(Jim_Interp *interp)"
lappend lines "\{" lappend lines "\{"
lappend lines "\tif (Jim_PackageProvide(interp, \"$pkgname\", \"1.0\", JIM_ERRMSG)) return JIM_ERR;" 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 "\}" lappend lines "\}"
puts [join $lines \n] puts [join $lines \n]

0 comments on commit 1669335

Please sign in to comment.