Changeset 0ca15b7
- Timestamp:
- Oct 19, 2021, 9:55:27 PM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
- Children:
- 2b30370
- Parents:
- fe18b46
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/containers/string_res.cfa
rfe18b46 r0ca15b7 405 405 406 406 verify( shareEditSetEndPeer->Handle.s >= shareEditSetStartPeer->Handle.s ); 407 size_t editSetLength = shareEditSetEndPeer->Handle.s + shareEditSetEndPeer->Handle.lnth - shareEditSetStartPeer->Handle.s;408 verify( editSetLength >= this.Handle.lnth );407 size_t origEditSetLength = shareEditSetEndPeer->Handle.s + shareEditSetEndPeer->Handle.lnth - shareEditSetStartPeer->Handle.s; 408 verify( origEditSetLength >= this.Handle.lnth ); 409 409 410 410 if ( this.shareEditSet_owns_ulink ) { // assigning to private context … … 418 418 if ( char * oldBytes = VbyteTryAdjustLast( *this.Handle.ulink, delta ) ) { 419 419 // growing: copy from old to new 420 char * dest = VbyteAlloc( *this.Handle.ulink, editSetLength);420 char * dest = VbyteAlloc( *this.Handle.ulink, origEditSetLength + delta ); 421 421 char *destCursor = dest; memcpy(destCursor, prefixStartOrig, prefixLen); 422 422 destCursor += prefixLen; memcpy(destCursor, buffer , bsize ); … … 424 424 assignEditSet(this, shareEditSetStartPeer, shareEditSetEndPeer, 425 425 dest, 426 editSetLength,426 origEditSetLength + delta, 427 427 0p, bsize); 428 428 free( oldBytes ); … … 434 434 assignEditSet(this, shareEditSetStartPeer, shareEditSetEndPeer, 435 435 shareEditSetStartPeer->Handle.s, 436 editSetLength,436 origEditSetLength + delta, 437 437 0p, bsize); 438 438 } 439 439 440 440 } else if ( // assigning to shared context 441 this.Handle.lnth == editSetLength &&// overwriting entire run of SES441 this.Handle.lnth == origEditSetLength && // overwriting entire run of SES 442 442 & valSrc && // sourcing from a managed string 443 443 valSrc.Handle.ulink == this.Handle.ulink ) { // sourcing from same heap -
tests/collections/string-overwrite.cfa
rfe18b46 r0ca15b7 1 1 #include <containers/string.hfa> 2 #include <string_sharectx.hfa> 2 3 3 4 /* … … 11 12 WE = witness end 12 13 13 The dest does:14 The test does: 14 15 starts with the entire string being, initially, the alphabet; prints this entire alphabet 15 16 sets up modifier and witness as ranges within it, and prints a visualization of those ranges … … 24 25 This API's convention has Start positions being inclusive and end positions being exclusive. 25 26 27 v Case number in output 26 28 With 1 equivalence class: 27 29 MS = ME = WS = WE 1 … … 118 120 struct { int ms; int me; int ws; int we; char *replaceWith; char *label; } cases[] = { 119 121 { 12, 14, 10, 20, "xxxxx", "warmup" }, 120 // { 12, 14, 12, 14, "xxxxx", "" }, // the bug that got me into this test (should be a dup with case 6)121 122 { 10, 10, 10, 10, "=====", "1" }, 122 123 { 10, 10, 10, 10, "==" , "" }, … … 223 224 { 12, 14, 10, 16, "=" , "" }, 224 225 { 12, 14, 10, 16, "" , "" }, 225 /*226 { , , , , "=====", "NN" },227 { "==" , "" },228 { "=" , "" },229 { "" , "" },230 */231 226 }; 232 227 for ( i; sizeof(cases)/sizeof(cases[0]) ) { … … 238 233 239 234 240 // void f( string & s, string & toEdit ) {241 242 // sout | s | "|" | toEdit | "|";243 244 // s(14, 16) = "-";245 // sout | s | "|" | toEdit | "|";246 // }247 248 235 int main() { 236 237 #ifdef STRING_SHARING_OFF 238 string_sharectx c = { NO_SHARING }; 239 #endif 240 241 249 242 // 0 1 2 250 243 // 01234567890123456789012345
Note: See TracChangeset
for help on using the changeset viewer.