diff options
Diffstat (limited to 'jim.c')
-rw-r--r-- | jim.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -1371,11 +1371,18 @@ int JimParseVar(struct JimParserCtx *pc) } /* Parse [dict get] syntax sugar. */ if (*pc->p == '(') { - while (*pc->p != ')' && pc->len) { + int count = 1; + while (count && pc->len) { pc->p++; pc->len--; if (*pc->p == '\\' && pc->len >= 2) { pc->p += 2; pc->len -= 2; } + else if (*pc->p == '(') { + count++; + } + else if (*pc->p == ')') { + count--; + } } if (*pc->p != '\0') { pc->p++; pc->len--; @@ -8913,18 +8920,18 @@ int Jim_SubstObj(Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_AppendObj(interp, resObjPtr, token[i].objPtr); break; case JIM_TT_VAR: - objPtr = Jim_GetVariable(interp, token[i].objPtr, JIM_ERRMSG); + case JIM_TT_DICTSUGAR: + if (token[i].type == JIM_TT_VAR) { + objPtr = Jim_GetVariable(interp, token[i].objPtr, JIM_ERRMSG); + } + else { + objPtr = Jim_ExpandDictSugar(interp, token[i].objPtr); + } if (objPtr == NULL) goto err; Jim_IncrRefCount(objPtr); Jim_AppendObj(interp, resObjPtr, objPtr); Jim_DecrRefCount(interp, objPtr); break; - case JIM_TT_DICTSUGAR: - objPtr = Jim_ExpandDictSugar(interp, token[i].objPtr); - if (!objPtr) { - goto err; - } - break; case JIM_TT_CMD: if (Jim_EvalObj(interp, token[i].objPtr) != JIM_OK) goto err; |