Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Revise empty string tests so that we avoid potentially expensive string rep generations, especially for dicts. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c2d4899eeb09aed58e73a7032bcd644e |
User & Date: | dgp 2011-05-09 13:58:40 |
Context
2011-05-09
| ||
15:24 | Reduce use of Tcl_AppendElement, which is not (and can't be) a Tcl_Obj-aware API. check-in: dbab97cbba user: dkf tags: trunk | |
13:58 | Revise empty string tests so that we avoid potentially expensive string rep generations, especially ... check-in: c2d4899eeb user: dgp tags: trunk | |
13:53 | Revise empty string tests so that we avoid potentially expensive string rep generations, especially ... check-in: 765f5fcb20 user: dgp tags: core-8-5-branch | |
2011-05-07
| ||
23:08 | Convert TclGetLoadedPackages to use Tcl_Obj API for result generation. check-in: ae2f5eda42 user: dkf tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-05-07 Donal K. Fellows <[email protected]> * generic/tclLoad.c (TclGetLoadedPackages): Convert to use Tcl_Obj API for result generation. 2011-05-07 Miguel Sofer <[email protected]> | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | 2011-05-09 Don Porter <[email protected]> * generic/tclListObj.c: Revise empty string tests so that we avoid potentially expensive string rep generations, especially for dicts. 2011-05-07 Donal K. Fellows <[email protected]> * generic/tclLoad.c (TclGetLoadedPackages): Convert to use Tcl_Obj API for result generation. 2011-05-07 Miguel Sofer <[email protected]> |
︙ | ︙ |
Changes to generic/tclListObj.c.
︙ | ︙ | |||
455 456 457 458 459 460 461 | * referenced by objv. */ Tcl_Obj ***objvPtr) /* Where to store the pointer to an array of * pointers to the list's objects. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { | | < < < < | < < < < < < < | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 | * referenced by objv. */ Tcl_Obj ***objvPtr) /* Where to store the pointer to an array of * pointers to the list's objects. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { int result; if (listPtr->bytes == tclEmptyStringRep) { *objcPtr = 0; *objvPtr = NULL; return TCL_OK; } result = SetListFromAny(interp, listPtr); if (result != TCL_OK) { return result; } } listRepPtr = ListRepPtr(listPtr); *objcPtr = listRepPtr->elemCount; |
︙ | ︙ | |||
582 583 584 585 586 587 588 | register Tcl_Obj **elemPtrs; int numElems, numRequired, newMax, newSize, i; if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjAppendElement"); } if (listPtr->typePtr != &tclListType) { | | | < < < < < < | 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 | register Tcl_Obj **elemPtrs; int numElems, numRequired, newMax, newSize, i; if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjAppendElement"); } if (listPtr->typePtr != &tclListType) { int result; if (listPtr->bytes == tclEmptyStringRep) { Tcl_SetListObj(listPtr, 1, &objPtr); return TCL_OK; } result = SetListFromAny(interp, listPtr); if (result != TCL_OK) { return result; } } listRepPtr = ListRepPtr(listPtr); |
︙ | ︙ | |||
696 697 698 699 700 701 702 | register Tcl_Obj *listPtr, /* List object to index into. */ register int index, /* Index of element to return. */ Tcl_Obj **objPtrPtr) /* The resulting Tcl_Obj* is stored here. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { | | | < < < < < < | 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 | register Tcl_Obj *listPtr, /* List object to index into. */ register int index, /* Index of element to return. */ Tcl_Obj **objPtrPtr) /* The resulting Tcl_Obj* is stored here. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { int result; if (listPtr->bytes == tclEmptyStringRep) { *objPtrPtr = NULL; return TCL_OK; } result = SetListFromAny(interp, listPtr); if (result != TCL_OK) { return result; } } listRepPtr = ListRepPtr(listPtr); |
︙ | ︙ | |||
755 756 757 758 759 760 761 | Tcl_Interp *interp, /* Used to report errors if not NULL. */ register Tcl_Obj *listPtr, /* List object whose #elements to return. */ register int *intPtr) /* The resulting int is stored here. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { | | | < < < < < < < < < < < < < < < | 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 | Tcl_Interp *interp, /* Used to report errors if not NULL. */ register Tcl_Obj *listPtr, /* List object whose #elements to return. */ register int *intPtr) /* The resulting int is stored here. */ { register List *listRepPtr; if (listPtr->typePtr != &tclListType) { int result; if (listPtr->bytes == tclEmptyStringRep) { *intPtr = 0; return TCL_OK; } result = SetListFromAny(interp, listPtr); if (result != TCL_OK) { return result; } } listRepPtr = ListRepPtr(listPtr); |
︙ | ︙ | |||
843 844 845 846 847 848 849 | register Tcl_Obj **elemPtrs; int numElems, numRequired, numAfterLast, start, i, j, isShared; if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjReplace"); } if (listPtr->typePtr != &tclListType) { | < | < < < < < < | 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 | register Tcl_Obj **elemPtrs; int numElems, numRequired, numAfterLast, start, i, j, isShared; if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjReplace"); } if (listPtr->typePtr != &tclListType) { if (listPtr->bytes == tclEmptyStringRep) { if (objc) { Tcl_SetListObj(listPtr, objc, NULL); } else { return TCL_OK; } } else { int result = SetListFromAny(interp, listPtr); |
︙ | ︙ | |||
1566 1567 1568 1569 1570 1571 1572 | * Ensure that the listPtr parameter designates an unshared list. */ if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "TclListObjSetElement"); } if (listPtr->typePtr != &tclListType) { | | | < < < < < | 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 | * Ensure that the listPtr parameter designates an unshared list. */ if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "TclListObjSetElement"); } if (listPtr->typePtr != &tclListType) { int result; if (listPtr->bytes == tclEmptyStringRep) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj("list index out of range", -1)); } Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LSET", "BADINDEX", NULL); return TCL_ERROR; |
︙ | ︙ |