diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-06-22 12:11:40 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-06-22 12:13:52 +1000 |
commit | 87f59e02aed624d2fa58b0d67e3d6ab8e8a0af08 (patch) | |
tree | 009d200676299307f296e11da3e0778319388cad | |
parent | 0833e0816f84d76c655e47fa5fd09bb3c1e11f34 (diff) | |
download | jimtcl-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.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -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)); |