Diff
Not logged in

Differences From Artifact [9151e7b352]:

To Artifact [a5cf03e1d5]:


806
807
808
809
810
811
812
813

814
815
816
817
818
819
820
821


822
823
824








825
826
827
828
829
830
831
832
833
834
835
836
837

838
839

840
841
842
843
844
845
846
806
807
808
809
810
811
812

813
814
815
816
817
818
819
820
821
822
823



824
825
826
827
828
829
830
831

832
833
834
835
836
837
838
839
840
841
842

843
844

845
846
847
848
849
850
851
852







-
+








+
+
-
-
-
+
+
+
+
+
+
+
+
-











-
+

-
+







		    ir.wideValue = level;
		    Tcl_StoreIntRep(objPtr, &levelReferenceType, &ir);
		    result = 1;
		}
	    } else {
		result = -1;
	    }
	} else if (TclGetWideBitsFromObj(interp, objPtr, &w) == TCL_OK) {
	} else if (TclGetWideBitsFromObj(NULL, objPtr, &w) == TCL_OK) {
	    /*
	     * If this were an integer, we'd have succeeded already.
	     * Docs say we have to treat this as a 'bad level'  error.
	     */
	    result = -1;
	}
    }

    if (result != -1) {
	/* if relative current level */
    if (result == 0) {
	level = curLevel - 1;
    }
	if (result == 0) {
	    if (!curLevel) {
		/* we are in top-level, so simply generate bad level */
		name = "1";
		goto badLevel;
	    }
	    level = curLevel - 1;
	}
    if (result != -1) {
	if (level >= 0) {
	    CallFrame *framePtr;
	    for (framePtr = iPtr->varFramePtr; framePtr != NULL;
		    framePtr = framePtr->callerVarPtr) {
		if (framePtr->level == level) {
		    *framePtrPtr = framePtr;
		    return result;
		}
	    }
	}
    }

badLevel:
    if (name == NULL) {
	name = TclGetString(objPtr);
	name = objPtr ? TclGetString(objPtr) : "1" ;
    }
    Tcl_SetObjResult(interp, Tcl_ObjPrintf("bad level \"%s\"", name));
    Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "LEVEL", name, NULL);
    return -1;
}

/*