Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change bytecode flag names to match their related instruction |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk | main |
Files: | files | file ages | folders |
SHA3-256: |
37bed521977b5d626d05f5bd4b8485e8 |
User & Date: | dkf 2025-06-26 07:53:31.361 |
Context
2025-06-26
| ||
09:56 | Merge 9.0 check-in: 52ff13f312 user: jan.nijtmans tags: trunk, main | |
07:56 | merge trunk check-in: 01861c022a user: dkf tags: compile-lpop-ledit | |
07:53 | Change bytecode flag names to match their related instruction check-in: 37bed52197 user: dkf tags: trunk, main | |
2025-06-25
| ||
16:41 | Merge 9.0 - Fix [40b1814b93] and [7c2716733a] Window handle use-after-frees. check-in: 54eb90319d user: apnadkarni tags: trunk, main | |
Changes
Changes to generic/tclCompCmdsGR.c.
︙ | ︙ | |||
1416 1417 1418 1419 1420 1421 1422 | for (i=3 ; i<numWords ; i++,tokenPtr=TokenAfter(tokenPtr)) { PUSH_TOKEN( tokenPtr, i); } /* * First operand is count of arguments. * Second operand is bitmask | | | | | 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 | for (i=3 ; i<numWords ; i++,tokenPtr=TokenAfter(tokenPtr)) { PUSH_TOKEN( tokenPtr, i); } /* * First operand is count of arguments. * Second operand is bitmask * TCL_LREPLACE_END_IS_LAST - end refers to last element * TCL_LREPLACE_SINGLE_INDEX - second index is not present * indicating this is a pure insert */ OP41( LREPLACE, numWords - 1, TCL_LREPLACE_SINGLE_INDEX); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLreplaceCmd -- |
︙ | ︙ | |||
1470 1471 1472 1473 1474 1475 1476 | for (i=4; i<numWords; i++,tokenPtr=TokenAfter(tokenPtr)) { PUSH_TOKEN( tokenPtr, i); } /* * First operand is count of arguments. * Second operand is bitmask | | | | 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 | for (i=4; i<numWords; i++,tokenPtr=TokenAfter(tokenPtr)) { PUSH_TOKEN( tokenPtr, i); } /* * First operand is count of arguments. * Second operand is bitmask * TCL_LREPLACE_END_IS_LAST - end refers to last element */ OP41( LREPLACE, numWords - 1, TCL_LREPLACE_END_IS_LAST); return TCL_OK; } /* *---------------------------------------------------------------------- * * TclCompileLsetCmd -- |
︙ | ︙ |
Changes to generic/tclCompile.c.
︙ | ︙ | |||
864 865 866 867 868 869 870 | /* String Less or equal: push (stknext <= stktop) */ TCL_INSTRUCTION_ENTRY( "strge", -1), /* String Greater or equal: push (stknext >= stktop) */ TCL_INSTRUCTION_ENTRY2( "lreplace", 6, INT_MIN, OPERAND_UINT4, OPERAND_LRPL1), /* Operands: number of arguments, flags | | | 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 | /* String Less or equal: push (stknext <= stktop) */ TCL_INSTRUCTION_ENTRY( "strge", -1), /* String Greater or equal: push (stknext >= stktop) */ TCL_INSTRUCTION_ENTRY2( "lreplace", 6, INT_MIN, OPERAND_UINT4, OPERAND_LRPL1), /* Operands: number of arguments, flags * flags: Combination of TCL_LREPLACE_* flags * Stack: ... listobj index1 ?index2? new1 ... newN => ... newlistobj * where index2 is present only if TCL_LREPLACE_SINGLE_INDEX is not * set in flags. */ TCL_INSTRUCTION_ENTRY1( "constImm", 5, -1, OPERAND_LVT4), /* Create constant. Index into LVT is immediate, value is on stack. |
︙ | ︙ |
Changes to generic/tclCompile.h.
︙ | ︙ | |||
969 970 971 972 973 974 975 | OPERAND_LIT1, /* One byte unsigned index into table of * literals. */ OPERAND_LIT4, /* Four byte unsigned index into table of * literals. */ OPERAND_SCLS1, /* Index into tclStringClassTable. */ OPERAND_UNSF1, /* Flags for [unset] */ OPERAND_CLK1, /* Index into [clock] types. */ | | | 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 | OPERAND_LIT1, /* One byte unsigned index into table of * literals. */ OPERAND_LIT4, /* Four byte unsigned index into table of * literals. */ OPERAND_SCLS1, /* Index into tclStringClassTable. */ OPERAND_UNSF1, /* Flags for [unset] */ OPERAND_CLK1, /* Index into [clock] types. */ OPERAND_LRPL1 /* Combination of TCL_LREPLACE_* flags. */ } InstOperandType; typedef struct InstructionDesc { const char *name; /* Name of instruction. */ int numBytes; /* Total number of bytes for instruction. */ int stackEffect; /* The worst-case balance stack effect of the * instruction, used for stack requirements |
︙ | ︙ | |||
2005 2006 2007 2008 2009 2010 2011 | TCL_NO_ELEMENT = 2 /* Do not push the array element. */ }; /* * Flags bits used by lreplace4 instruction */ enum Lreplace4Flags { | | | | 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 | TCL_NO_ELEMENT = 2 /* Do not push the array element. */ }; /* * Flags bits used by lreplace4 instruction */ enum Lreplace4Flags { TCL_LREPLACE_END_IS_LAST = 1, /* "end" refers to last element */ TCL_LREPLACE_SINGLE_INDEX = 2 /* Second index absent (pure insert) */ }; /* * Helper functions for jump tables that call other internal API bits. */ static inline Tcl_Size |
︙ | ︙ |
Changes to generic/tclDisassemble.c.
︙ | ︙ | |||
710 711 712 713 714 715 716 | case OPERAND_LRPL1: opnd = TclGetUInt1AtPtr(pc+numBytes); numBytes++; switch (opnd) { case 0: Tcl_AppendPrintfToObj(bufferObj, "0 "); break; | | | | 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 | case OPERAND_LRPL1: opnd = TclGetUInt1AtPtr(pc+numBytes); numBytes++; switch (opnd) { case 0: Tcl_AppendPrintfToObj(bufferObj, "0 "); break; case TCL_LREPLACE_END_IS_LAST: Tcl_AppendPrintfToObj(bufferObj, "endLast "); break; case TCL_LREPLACE_SINGLE_INDEX: Tcl_AppendPrintfToObj(bufferObj, "singleIdx "); break; default: Tcl_AppendPrintfToObj(bufferObj, "endLast,singleIdx "); break; } break; |
︙ | ︙ |
Changes to generic/tclExecute.c.
︙ | ︙ | |||
5466 5467 5468 5469 5470 5471 5472 | numArgs = TclGetUInt4AtPtr(pc + 1); int flags = TclGetInt1AtPtr(pc + 5); /* Stack: ... listobj index1 ?index2? new1 ... newN */ valuePtr = OBJ_AT_DEPTH(numArgs - 1); /* haveSecondIndex==0 => pure insert */ | | | | 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 | numArgs = TclGetUInt4AtPtr(pc + 1); int flags = TclGetInt1AtPtr(pc + 5); /* Stack: ... listobj index1 ?index2? new1 ... newN */ valuePtr = OBJ_AT_DEPTH(numArgs - 1); /* haveSecondIndex==0 => pure insert */ int haveSecondIndex = (flags & TCL_LREPLACE_SINGLE_INDEX) == 0; size_t numNewElems = numArgs - 2 - haveSecondIndex; /* end_indicator==1 => "end" is last element's index, 0=>index beyond */ int endIndicator = (flags & TCL_LREPLACE_END_IS_LAST) != 0; Tcl_Obj *fromIdxObj = OBJ_AT_DEPTH(numArgs - 2); Tcl_Obj *toIdxObj = haveSecondIndex ? OBJ_AT_DEPTH(numArgs - 3) : NULL; if (Tcl_ListObjLength(interp, valuePtr, &length) != TCL_OK) { TRACE_ERROR(interp); goto gotError; } |
︙ | ︙ |