summaryrefslogtreecommitdiffstats
path: root/generic/tclAssembly.c
diff options
context:
space:
mode:
authorKevin B Kenny <kennykb@acm.org>2010-10-01 13:20:45 (GMT)
committerKevin B Kenny <kennykb@acm.org>2010-10-01 13:20:45 (GMT)
commite4330954164421336f3ea7141c105f8af0281e88 (patch)
tree3d0ace9350a17ec3422638bdb0934c18df143f09 /generic/tclAssembly.c
parentc29a16c4c113cb6b5d276e3900b0a3ab3bec6fbc (diff)
downloadtcl-e4330954164421336f3ea7141c105f8af0281e88.zip
tcl-e4330954164421336f3ea7141c105f8af0281e88.tar.gz
tcl-e4330954164421336f3ea7141c105f8af0281e88.tar.bz2
Added listIn, listNotIn, and dictGet.
Diffstat (limited to 'generic/tclAssembly.c')
-rw-r--r--generic/tclAssembly.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c
index cac051f..94b1ff8 100644
--- a/generic/tclAssembly.c
+++ b/generic/tclAssembly.c
@@ -102,6 +102,7 @@ TalInstDesc TalInstructionTable[] = {
{"bitor", ASSEM_1BYTE , INST_BITOR , 2 , 1},
{"bitxor", ASSEM_1BYTE , INST_BITXOR , 2 , 1},
{"concat", ASSEM_CONCAT1, INST_CONCAT1, INT_MIN,1},
+ {"dictGet", ASSEM_DICT_GET, INST_DICT_GET, INT_MIN,1},
{"div", ASSEM_1BYTE, INST_DIV, 2, 1},
{"dup", ASSEM_1BYTE , INST_DUP , 1 , 2},
{"eq", ASSEM_1BYTE , INST_EQ , 2 , 1},
@@ -179,6 +180,7 @@ TalInstDesc TalInstructionTable[] = {
INST_LIST_INDEX_MULTI,
INT_MIN,1},
{"list", ASSEM_LIST, INST_LIST, INT_MIN,1},
+ {"listIn", ASSEM_1BYTE, INST_LIST_IN, 2, 1},
{"listIndex",
ASSEM_1BYTE, INST_LIST_INDEX,2, 1},
{"listIndexImm",
@@ -187,6 +189,9 @@ TalInstDesc TalInstructionTable[] = {
{"listLength",
ASSEM_1BYTE, INST_LIST_LENGTH,
1, 1},
+ {"listNotIn",
+ ASSEM_1BYTE, INST_LIST_NOT_IN,
+ 2, 1},
{"load", ASSEM_LVT, (INST_LOAD_SCALAR1 << 8
| INST_LOAD_SCALAR4),
0, 1},
@@ -335,7 +340,7 @@ BBUpdateStackReqs(BasicBlock* bbPtr,
consumed = count;
}
if (produced < 0) {
- /* The instruction leaves some of its operations on the stack,
+ /* The instruction leaves some of its variadic operands on the stack,
* with net stack effect of '-1-produced' */
produced = consumed - produced - 1;
}
@@ -1015,6 +1020,18 @@ AssembleOneLine(AssembleEnv* assemEnvPtr)
BBEmitInstInt1(assemEnvPtr, tblind, opnd, opnd);
break;
+ case ASSEM_DICT_GET:
+ if (parsePtr->numWords != 2) {
+ Tcl_WrongNumArgs(interp, 1, &instNameObj, "count");
+ goto cleanup;
+ }
+ if (GetIntegerOperand(assemEnvPtr, &tokenPtr, &opnd) != TCL_OK
+ || CheckStrictlyPositive(interp, opnd) != TCL_OK) {
+ goto cleanup;
+ }
+ BBEmitInstInt4(assemEnvPtr, tblind, opnd, opnd+1);
+ break;
+
case ASSEM_EVAL:
/* TODO - Refactor this stuff into a subroutine
* that takes the inst code, the message ("script" or "expression")