aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-06-22 12:11:40 +1000
committerSteve Bennett <steveb@workware.net.au>2011-06-22 12:13:52 +1000
commit87f59e02aed624d2fa58b0d67e3d6ab8e8a0af08 (patch)
tree009d200676299307f296e11da3e0778319388cad
parent0833e0816f84d76c655e47fa5fd09bb3c1e11f34 (diff)
downloadjimtcl-87f59e02aed624d2fa58b0d67e3d6ab8e8a0af08.zip
jimtcl-87f59e02aed624d2fa58b0d67e3d6ab8e8a0af08.tar.gz
jimtcl-87f59e02aed624d2fa58b0d67e3d6ab8e8a0af08.tar.bz2
Fix script line numbering for multi-line commands
The line number stored with each line of the script should be the line number of the first token, not the last token. Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/jim.c b/jim.c
index 3ef60be..2a5fb4b 100644
--- a/jim.c
+++ b/jim.c
@@ -2932,9 +2932,15 @@ static Jim_Obj *JimNewScriptLineObj(Jim_Interp *interp, int argc, int line)
{
Jim_Obj *objPtr;
- objPtr = Jim_NewObj(interp);
- objPtr->typePtr = &scriptLineObjType;
+#ifdef DEBUG_SHOW_SCRIPT
+ char buf[100];
+ snprintf(buf, sizeof(buf), "line=%d, argc=%d", line, argc);
+ objPtr = Jim_NewStringObj(interp, buf, -1);
+#else
+ objPtr = Jim_NewEmptyStringObj(interp);
objPtr->bytes = JimEmptyStringRep;
+#endif
+ objPtr->typePtr = &scriptLineObjType;
objPtr->internalRep.scriptLineValue.argc = argc;
objPtr->internalRep.scriptLineValue.line = line;
@@ -3275,8 +3281,11 @@ static void ScriptObjAddTokens(Jim_Interp *interp, struct ScriptObj *script,
}
}
+ if (lineargs == 0) {
+ /* First real token on the line, so record the line number */
+ linenr = tokenlist->list[i].line;
+ }
lineargs++;
- linenr = tokenlist->list[i].line;
/* Add each non-separator word token to the line */
while (wordtokens--) {
@@ -3303,7 +3312,7 @@ static void ScriptObjAddTokens(Jim_Interp *interp, struct ScriptObj *script,
assert(script->len < count);
#ifdef DEBUG_SHOW_SCRIPT
- printf("==== Script ====\n");
+ printf("==== Script (%s) ====\n", script->fileName);
for (i = 0; i < script->len; i++) {
const ScriptToken *t = &script->token[i];
printf("[%2d] %s %s\n", i, jim_tt_name(t->type), Jim_String(t->objPtr));