/* * Table of dict subcommand names and implementations. */ static const EnsembleImplMap implementationMap[] = { {"append", DictAppendCmd, TclCompileDictAppendCmd }, {"create", DictCreateCmd }, {"exists", DictExistsCmd }, {"filter", DictFilterCmd }, {"for", DictForCmd, TclCompileDictForCmd, DictForNRCmd }, {"get", DictGetCmd, TclCompileDictGetCmd }, {"getwithdefault", DictGetWithDefaultCmd }, {"incr", DictIncrCmd, TclCompileDictIncrCmd }, {"info", DictInfoCmd }, {"keys", DictKeysCmd }, {"lappend", DictLappendCmd, TclCompileDictLappendCmd }, {"merge", DictMergeCmd }, {"remove", DictRemoveCmd }, {"replace", DictReplaceCmd }, {"set", DictSetCmd, TclCompileDictSetCmd }, {"size", DictSizeCmd }, {"unset", DictUnsetCmd }, {"update", DictUpdateCmd, TclCompileDictUpdateCmd }, {"values", DictValuesCmd }, {"with", DictWithCmd }, {NULL} }; /*********** * * * [snip] * * * ***********/ /* *---------------------------------------------------------------------- * * DictGetWithDefaultCmd -- * * This function implements the "dict getwithdefault" Tcl command. * See the user documentation for details on what it does, and * TIP#3?? for the formal specification. * * Results: * A standard Tcl result. * * Side effects: * The same as for DictExistsCmd. * *---------------------------------------------------------------------- */ static int DictGetWithDefaultCmd( ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr; int result; if (objc < 4) { Tcl_WrongNumArgs(interp, 1, objv, "dictionary key ?key ...? default"); return TCL_ERROR; } dictPtr = TclTraceDictPath(interp, objv[1], objc-4, objv+2, DICT_PATH_EXISTS); if (dictPtr == NULL) { return TCL_ERROR; } if (dictPtr == DICT_PATH_NON_EXISTENT) { Tcl_SetObjResult(interp, objv[objc-1]); return TCL_OK; } result = Tcl_DictObjGet(interp, dictPtr, objv[objc-2], &valuePtr); if (result != TCL_OK) { return result; } Tcl_SetObjResult(interp, valuePtr != NULL ? valuePtr : objv[objc-1]); return TCL_OK; } /* Material for dict.test: test dict-23.1 {dict getwithdefault command} -body { dict getwithdefault {a b} a c } -result b test dict-23.2 {dict getwithdefault command} -body { dict getwithdefault {a b} b c } -result c test dict-23.3 {dict getwithdefault command} -body { dict getwithdefault {a {b c}} a b d } -result c test dict-23.4 {dict getwithdefault command} -body { dict getwithdefault {a {b c}} a c d } -result d test dict-23.5 {dict getwithdefault command} -body { dict getwithdefault {a {b c}} b c d } -result d test dict-23.6 {dict getwithdefault command} -returnCodes error -body { dict getwithdefault {a {b c d}} a b d } -result {missing value to go with key} test dict-23.7 {dict getwithdefault command} -returnCodes error -body { dict getwithdefault } -result {wrong # args: should be\ "dict getwithdefault dictionary key ?key ...? default"} test dict-23.8 {dict getwithdefault command} -returnCodes error -body { dict getwithdefault {} } -result {wrong # args: should be\ "dict getwithdefault dictionary key ?key ...? default"} */