summaryrefslogtreecommitdiffstats
path: root/generic/tclCompCmds.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2019-04-18 22:57:12 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2019-04-18 22:57:12 (GMT)
commit8b9a3558a42cba96fe30f272517260aef43ec7f8 (patch)
tree746ed45f250192ce777a12d31690f1b0847a5474 /generic/tclCompCmds.c
parent9cf9c0a5e5c1bc1e2cf81abce0c91a9acd632977 (diff)
downloadtcl-8b9a3558a42cba96fe30f272517260aef43ec7f8.zip
tcl-8b9a3558a42cba96fe30f272517260aef43ec7f8.tar.gz
tcl-8b9a3558a42cba96fe30f272517260aef43ec7f8.tar.bz2
Compilation for [dict getwithdefault].
Diffstat (limited to 'generic/tclCompCmds.c')
-rw-r--r--generic/tclCompCmds.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c
index c472b8c..4844dd8 100644
--- a/generic/tclCompCmds.c
+++ b/generic/tclCompCmds.c
@@ -1177,6 +1177,38 @@ TclCompileDictGetCmd(
}
int
+TclCompileDictGetWithDefaultCmd(
+ Tcl_Interp *interp, /* Used for looking up stuff. */
+ Tcl_Parse *parsePtr, /* Points to a parse structure for the command
+ * created by Tcl_ParseCommand. */
+ Command *cmdPtr, /* Points to defintion of command being
+ * compiled. */
+ CompileEnv *envPtr) /* Holds resulting instructions. */
+{
+ Tcl_Token *tokenPtr;
+ int i;
+ DefineLineInformation; /* TIP #280 */
+
+ /*
+ * There must be at least three arguments after the command.
+ */
+
+ /* TODO: Consider support for compiling expanded args. */
+ if (parsePtr->numWords < 4) {
+ return TCL_ERROR;
+ }
+ tokenPtr = TokenAfter(parsePtr->tokenPtr);
+
+ for (i=1 ; i<parsePtr->numWords ; i++) {
+ CompileWord(envPtr, tokenPtr, interp, i);
+ tokenPtr = TokenAfter(tokenPtr);
+ }
+ TclEmitInstInt4(INST_DICT_GET_DEF, parsePtr->numWords-3, envPtr);
+ TclAdjustStackDepth(-2, envPtr);
+ return TCL_OK;
+}
+
+int
TclCompileDictExistsCmd(
Tcl_Interp *interp, /* Used for looking up stuff. */
Tcl_Parse *parsePtr, /* Points to a parse structure for the command