diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-05-10 16:35:53 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-05-10 16:35:53 (GMT) |
| commit | 8ffde10c063dd49dd207d2c8cf8b09e4487edf18 (patch) | |
| tree | 103b667a0137ede85b2de0abd509bd7a12e87cd9 /generic/tclAssembly.c | |
| parent | d50da922b1c1a3043e6ee9f24282a638ee143b48 (diff) | |
| parent | b1139d3d2099aad8ad1981deaa0f689e1b4c322a (diff) | |
| download | tcl-8ffde10c063dd49dd207d2c8cf8b09e4487edf18.zip tcl-8ffde10c063dd49dd207d2c8cf8b09e4487edf18.tar.gz tcl-8ffde10c063dd49dd207d2c8cf8b09e4487edf18.tar.bz2 | |
Merge 8.7
Diffstat (limited to 'generic/tclAssembly.c')
| -rw-r--r-- | generic/tclAssembly.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c index 5db2676..47f7100 100644 --- a/generic/tclAssembly.c +++ b/generic/tclAssembly.c @@ -145,6 +145,8 @@ typedef enum TalInstType { * 1 */ ASSEM_DICT_GET, /* 'dict get' and related - consumes N+1 * operands, produces 1, N > 0 */ + ASSEM_DICT_GET_DEF, /* 'dict getwithdefault' - consumes N+2 + * operands, produces 1, N > 0 */ ASSEM_DICT_SET, /* specifies key count and LVT index, consumes * N+1 operands, produces 1, N > 0 */ ASSEM_DICT_UNSET, /* specifies key count and LVT index, consumes @@ -362,6 +364,7 @@ static const TalInstDesc TalInstructionTable[] = { {"dictExists", ASSEM_DICT_GET, INST_DICT_EXISTS, INT_MIN,1}, {"dictExpand", ASSEM_1BYTE, INST_DICT_EXPAND, 3, 1}, {"dictGet", ASSEM_DICT_GET, INST_DICT_GET, INT_MIN,1}, + {"dictGetDef", ASSEM_DICT_GET_DEF, INST_DICT_GET_DEF, INT_MIN,1}, {"dictIncrImm", ASSEM_SINT4_LVT4, INST_DICT_INCR_IMM, 1, 1}, {"dictLappend", ASSEM_LVT4, INST_DICT_LAPPEND, 2, 1}, @@ -619,10 +622,14 @@ BBUpdateStackReqs( if (consumed == INT_MIN) { /* - * The instruction is variadic; it consumes 'count' operands. + * The instruction is variadic; it consumes 'count' operands, or + * 'count+1' for ASSEM_DICT_GET_DEF. */ consumed = count; + if (TalInstructionTable[tblIdx].instType == ASSEM_DICT_GET_DEF) { + consumed++; + } } if (produced < 0) { /* @@ -1396,6 +1403,7 @@ AssembleOneLine( break; case ASSEM_DICT_GET: + case ASSEM_DICT_GET_DEF: if (parsePtr->numWords != 2) { Tcl_WrongNumArgs(interp, 1, &instNameObj, "count"); goto cleanup; |
