diff options
author | Kevin B Kenny <kennykb@acm.org> | 2010-10-01 13:20:45 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2010-10-01 13:20:45 (GMT) |
commit | e4330954164421336f3ea7141c105f8af0281e88 (patch) | |
tree | 3d0ace9350a17ec3422638bdb0934c18df143f09 /generic/tclAssembly.c | |
parent | c29a16c4c113cb6b5d276e3900b0a3ab3bec6fbc (diff) | |
download | tcl-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.c | 19 |
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") |