diff options
| author | Gareth Rees | 2013-05-31 00:09:33 +0100 |
|---|---|---|
| committer | Gareth Rees | 2013-05-31 00:09:33 +0100 |
| commit | 934ae05ca3c40eb957d5815c666d6b1cfef98fe7 (patch) | |
| tree | 8c6a22ba92317a3b271ec70202a3e984757afd24 /mps/code | |
| parent | caf194598595029b633efc74ea59c16124039a0e (diff) | |
| download | emacs-934ae05ca3c40eb957d5815c666d6b1cfef98fe7.tar.gz emacs-934ae05ca3c40eb957d5815c666d6b1cfef98fe7.zip | |
Rename the enumeration cbsfinddelete to finddelete in anticipation of it being shared between cbs and new freelist module.
Since ABQDisposition enumeration only has two values, it's better to use Bool.
Copied from Perforce
Change: 182347
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/abq.c | 20 | ||||
| -rw-r--r-- | mps/code/abq.h | 15 | ||||
| -rw-r--r-- | mps/code/abqtest.c | 8 | ||||
| -rw-r--r-- | mps/code/cbs.c | 35 | ||||
| -rw-r--r-- | mps/code/cbs.h | 14 | ||||
| -rw-r--r-- | mps/code/cbstest.c | 24 | ||||
| -rw-r--r-- | mps/code/mpm.h | 5 | ||||
| -rw-r--r-- | mps/code/mpmtypes.h | 12 | ||||
| -rw-r--r-- | mps/code/poolmv2.c | 19 | ||||
| -rw-r--r-- | mps/code/poolmvff.c | 8 |
10 files changed, 71 insertions, 89 deletions
diff --git a/mps/code/abq.c b/mps/code/abq.c index aa796057acc..f9317c49728 100644 --- a/mps/code/abq.c +++ b/mps/code/abq.c | |||
| @@ -241,17 +241,6 @@ Count ABQDepth(ABQ abq) | |||
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | 243 | ||
| 244 | /* ABQDispositionCheck -- check method for an ABQDisposition value */ | ||
| 245 | static Bool ABQDispositionCheck(ABQDisposition disposition) | ||
| 246 | { | ||
| 247 | CHECKL(disposition == ABQDispositionKEEP | ||
| 248 | || disposition == ABQDispositionDELETE); | ||
| 249 | UNUSED(disposition); /* <code/mpm.c#check.unused> */ | ||
| 250 | |||
| 251 | return TRUE; | ||
| 252 | } | ||
| 253 | |||
| 254 | |||
| 255 | /* ABQIterate -- call 'iterate' for each element in an ABQ */ | 244 | /* ABQIterate -- call 'iterate' for each element in an ABQ */ |
| 256 | void ABQIterate(ABQ abq, ABQIterateMethod iterate, void *closureP, Size closureS) | 245 | void ABQIterate(ABQ abq, ABQIterateMethod iterate, void *closureP, Size closureS) |
| 257 | { | 246 | { |
| @@ -266,11 +255,12 @@ void ABQIterate(ABQ abq, ABQIterateMethod iterate, void *closureP, Size closureS | |||
| 266 | 255 | ||
| 267 | while (index != in) { | 256 | while (index != in) { |
| 268 | void *element = ABQElement(abq, index); | 257 | void *element = ABQElement(abq, index); |
| 269 | ABQDisposition disposition = ABQDispositionNONE; | 258 | Bool delete = FALSE; |
| 270 | Bool cont; | 259 | Bool cont; |
| 271 | cont = (*iterate)(&disposition, element, closureP, closureS); | 260 | cont = (*iterate)(&delete, element, closureP, closureS); |
| 272 | AVERT(ABQDisposition, disposition); | 261 | AVERT(Bool, cont); |
| 273 | if (disposition == ABQDispositionKEEP) { | 262 | AVERT(Bool, delete); |
| 263 | if (!delete) { | ||
| 274 | if (copy != index) | 264 | if (copy != index) |
| 275 | mps_lib_memcpy(ABQElement(abq, copy), element, abq->elementSize); | 265 | mps_lib_memcpy(ABQElement(abq, copy), element, abq->elementSize); |
| 276 | copy = ABQNextIndex(abq, copy); | 266 | copy = ABQNextIndex(abq, copy); |
diff --git a/mps/code/abq.h b/mps/code/abq.h index 08462c9192f..7a7cc2a65d9 100644 --- a/mps/code/abq.h +++ b/mps/code/abq.h | |||
| @@ -24,8 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | typedef struct ABQStruct *ABQ; | 25 | typedef struct ABQStruct *ABQ; |
| 26 | typedef Res (*ABQDescribeElement)(void *element, mps_lib_FILE *stream); | 26 | typedef Res (*ABQDescribeElement)(void *element, mps_lib_FILE *stream); |
| 27 | typedef unsigned ABQDisposition; | 27 | typedef Bool (*ABQIterateMethod)(Bool *deleteReturn, void *element, void *closureP, Size closureS); |
| 28 | typedef Bool (*ABQIterateMethod)(ABQDisposition *dispositionReturn, void *element, void *closureP, Size closureS); | ||
| 29 | 28 | ||
| 30 | extern Res ABQInit(Arena arena, ABQ abq, void *owner, Count elements, Size elementSize); | 29 | extern Res ABQInit(Arena arena, ABQ abq, void *owner, Count elements, Size elementSize); |
| 31 | extern Bool ABQCheck(ABQ abq); | 30 | extern Bool ABQCheck(ABQ abq); |
| @@ -59,18 +58,6 @@ typedef struct ABQStruct | |||
| 59 | Sig sig; | 58 | Sig sig; |
| 60 | } ABQStruct; | 59 | } ABQStruct; |
| 61 | 60 | ||
| 62 | enum { | ||
| 63 | ABQIterationCONTINUE = 1, /* continue iterating */ | ||
| 64 | ABQIterationSTOP, /* stop iterating */ | ||
| 65 | ABQIterationNONE /* no iteration (error) */ | ||
| 66 | }; | ||
| 67 | |||
| 68 | enum { | ||
| 69 | ABQDispositionKEEP = 1, /* keep item in queue */ | ||
| 70 | ABQDispositionDELETE, /* delete element from queue */ | ||
| 71 | ABQDispositionNONE /* no disposition (error) */ | ||
| 72 | }; | ||
| 73 | |||
| 74 | #endif /* abq_h */ | 61 | #endif /* abq_h */ |
| 75 | 62 | ||
| 76 | 63 | ||
diff --git a/mps/code/abqtest.c b/mps/code/abqtest.c index 4588af97954..32987836dae 100644 --- a/mps/code/abqtest.c +++ b/mps/code/abqtest.c | |||
| @@ -95,17 +95,17 @@ typedef struct TestClosureStruct { | |||
| 95 | Res res; | 95 | Res res; |
| 96 | } TestClosureStruct; | 96 | } TestClosureStruct; |
| 97 | 97 | ||
| 98 | static Bool TestDeleteCallback(ABQDisposition *dispositionReturn, | 98 | static Bool TestDeleteCallback(Bool *deleteReturn, void *element, |
| 99 | void *element, void *closureP, Size closureS) | 99 | void *closureP, Size closureS) |
| 100 | { | 100 | { |
| 101 | TestBlock *a = (TestBlock *)element; | 101 | TestBlock *a = (TestBlock *)element; |
| 102 | TestClosure cl = (TestClosure)closureP; | 102 | TestClosure cl = (TestClosure)closureP; |
| 103 | UNUSED(closureS); | 103 | UNUSED(closureS); |
| 104 | if (*a == cl->b) { | 104 | if (*a == cl->b) { |
| 105 | *dispositionReturn = ABQDispositionDELETE; | 105 | *deleteReturn = TRUE; |
| 106 | cl->res = ResOK; | 106 | cl->res = ResOK; |
| 107 | } else { | 107 | } else { |
| 108 | *dispositionReturn = ABQDispositionKEEP; | 108 | *deleteReturn = FALSE; |
| 109 | } | 109 | } |
| 110 | return TRUE; | 110 | return TRUE; |
| 111 | } | 111 | } |
diff --git a/mps/code/cbs.c b/mps/code/cbs.c index 658af95c022..45a708f2ba7 100644 --- a/mps/code/cbs.c +++ b/mps/code/cbs.c | |||
| @@ -690,13 +690,14 @@ void CBSIterate(CBS cbs, CBSIterateMethod iterate, | |||
| 690 | } | 690 | } |
| 691 | 691 | ||
| 692 | 692 | ||
| 693 | /* CBSFindDeleteCheck -- check method for a CBSFindDelete value */ | 693 | /* FindDeleteCheck -- check method for a FindDelete value */ |
| 694 | 694 | ||
| 695 | static Bool CBSFindDeleteCheck(CBSFindDelete findDelete) | 695 | Bool FindDeleteCheck(FindDelete findDelete) |
| 696 | { | 696 | { |
| 697 | CHECKL(findDelete == CBSFindDeleteNONE || findDelete == CBSFindDeleteLOW | 697 | CHECKL(findDelete == FindDeleteNONE |
| 698 | || findDelete == CBSFindDeleteHIGH | 698 | || findDelete == FindDeleteLOW |
| 699 | || findDelete == CBSFindDeleteENTIRE); | 699 | || findDelete == FindDeleteHIGH |
| 700 | || findDelete == FindDeleteENTIRE); | ||
| 700 | UNUSED(findDelete); /* <code/mpm.c#check.unused> */ | 701 | UNUSED(findDelete); /* <code/mpm.c#check.unused> */ |
| 701 | 702 | ||
| 702 | return TRUE; | 703 | return TRUE; |
| @@ -708,7 +709,7 @@ static Bool CBSFindDeleteCheck(CBSFindDelete findDelete) | |||
| 708 | static void cbsFindDeleteRange(Addr *baseReturn, Addr *limitReturn, | 709 | static void cbsFindDeleteRange(Addr *baseReturn, Addr *limitReturn, |
| 709 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 710 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 710 | CBS cbs, Addr base, Addr limit, Size size, | 711 | CBS cbs, Addr base, Addr limit, Size size, |
| 711 | CBSFindDelete findDelete) | 712 | FindDelete findDelete) |
| 712 | { | 713 | { |
| 713 | Bool callDelete = TRUE; | 714 | Bool callDelete = TRUE; |
| 714 | 715 | ||
| @@ -718,23 +719,23 @@ static void cbsFindDeleteRange(Addr *baseReturn, Addr *limitReturn, | |||
| 718 | AVER(base < limit); | 719 | AVER(base < limit); |
| 719 | AVER(size > 0); | 720 | AVER(size > 0); |
| 720 | AVER(AddrOffset(base, limit) >= size); | 721 | AVER(AddrOffset(base, limit) >= size); |
| 721 | AVERT(CBSFindDelete, findDelete); | 722 | AVERT(FindDelete, findDelete); |
| 722 | 723 | ||
| 723 | switch(findDelete) { | 724 | switch(findDelete) { |
| 724 | 725 | ||
| 725 | case CBSFindDeleteNONE: | 726 | case FindDeleteNONE: |
| 726 | callDelete = FALSE; | 727 | callDelete = FALSE; |
| 727 | break; | 728 | break; |
| 728 | 729 | ||
| 729 | case CBSFindDeleteLOW: | 730 | case FindDeleteLOW: |
| 730 | limit = AddrAdd(base, size); | 731 | limit = AddrAdd(base, size); |
| 731 | break; | 732 | break; |
| 732 | 733 | ||
| 733 | case CBSFindDeleteHIGH: | 734 | case FindDeleteHIGH: |
| 734 | base = AddrSub(limit, size); | 735 | base = AddrSub(limit, size); |
| 735 | break; | 736 | break; |
| 736 | 737 | ||
| 737 | case CBSFindDeleteENTIRE: | 738 | case FindDeleteENTIRE: |
| 738 | /* do nothing */ | 739 | /* do nothing */ |
| 739 | break; | 740 | break; |
| 740 | 741 | ||
| @@ -762,7 +763,7 @@ static void cbsFindDeleteRange(Addr *baseReturn, Addr *limitReturn, | |||
| 762 | 763 | ||
| 763 | Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, | 764 | Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, |
| 764 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 765 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 765 | CBS cbs, Size size, CBSFindDelete findDelete) | 766 | CBS cbs, Size size, FindDelete findDelete) |
| 766 | { | 767 | { |
| 767 | Bool found; | 768 | Bool found; |
| 768 | SplayNode node; | 769 | SplayNode node; |
| @@ -775,7 +776,7 @@ Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, | |||
| 775 | AVER(size > 0); | 776 | AVER(size > 0); |
| 776 | AVER(SizeIsAligned(size, cbs->alignment)); | 777 | AVER(SizeIsAligned(size, cbs->alignment)); |
| 777 | AVER(cbs->fastFind); | 778 | AVER(cbs->fastFind); |
| 778 | AVERT(CBSFindDelete, findDelete); | 779 | AVERT(FindDelete, findDelete); |
| 779 | 780 | ||
| 780 | METER_ACC(cbs->splaySearch, cbs->splayTreeSize); | 781 | METER_ACC(cbs->splaySearch, cbs->splayTreeSize); |
| 781 | found = SplayFindFirst(&node, splayTreeOfCBS(cbs), &cbsTestNode, | 782 | found = SplayFindFirst(&node, splayTreeOfCBS(cbs), &cbsTestNode, |
| @@ -801,7 +802,7 @@ Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, | |||
| 801 | 802 | ||
| 802 | Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, | 803 | Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, |
| 803 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 804 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 804 | CBS cbs, Size size, CBSFindDelete findDelete) | 805 | CBS cbs, Size size, FindDelete findDelete) |
| 805 | { | 806 | { |
| 806 | Bool found; | 807 | Bool found; |
| 807 | SplayNode node; | 808 | SplayNode node; |
| @@ -814,7 +815,7 @@ Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, | |||
| 814 | AVER(size > 0); | 815 | AVER(size > 0); |
| 815 | AVER(SizeIsAligned(size, cbs->alignment)); | 816 | AVER(SizeIsAligned(size, cbs->alignment)); |
| 816 | AVER(cbs->fastFind); | 817 | AVER(cbs->fastFind); |
| 817 | AVERT(CBSFindDelete, findDelete); | 818 | AVERT(FindDelete, findDelete); |
| 818 | 819 | ||
| 819 | METER_ACC(cbs->splaySearch, cbs->splayTreeSize); | 820 | METER_ACC(cbs->splaySearch, cbs->splayTreeSize); |
| 820 | found = SplayFindLast(&node, splayTreeOfCBS(cbs), &cbsTestNode, | 821 | found = SplayFindLast(&node, splayTreeOfCBS(cbs), &cbsTestNode, |
| @@ -840,7 +841,7 @@ Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, | |||
| 840 | 841 | ||
| 841 | Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, | 842 | Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, |
| 842 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 843 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 843 | CBS cbs, CBSFindDelete findDelete) | 844 | CBS cbs, FindDelete findDelete) |
| 844 | { | 845 | { |
| 845 | Bool found = FALSE; | 846 | Bool found = FALSE; |
| 846 | SplayNode root; | 847 | SplayNode root; |
| @@ -852,7 +853,7 @@ Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, | |||
| 852 | AVER(baseReturn != NULL); | 853 | AVER(baseReturn != NULL); |
| 853 | AVER(limitReturn != NULL); | 854 | AVER(limitReturn != NULL); |
| 854 | AVER(cbs->fastFind); | 855 | AVER(cbs->fastFind); |
| 855 | AVERT(CBSFindDelete, findDelete); | 856 | AVERT(FindDelete, findDelete); |
| 856 | 857 | ||
| 857 | notEmpty = SplayRoot(&root, splayTreeOfCBS(cbs)); | 858 | notEmpty = SplayRoot(&root, splayTreeOfCBS(cbs)); |
| 858 | if (notEmpty) { | 859 | if (notEmpty) { |
diff --git a/mps/code/cbs.h b/mps/code/cbs.h index 4ac99ad8254..544df0a0586 100644 --- a/mps/code/cbs.h +++ b/mps/code/cbs.h | |||
| @@ -49,23 +49,15 @@ extern void CBSIterate(CBS cbs, CBSIterateMethod iterate, | |||
| 49 | 49 | ||
| 50 | extern Res CBSDescribe(CBS cbs, mps_lib_FILE *stream); | 50 | extern Res CBSDescribe(CBS cbs, mps_lib_FILE *stream); |
| 51 | 51 | ||
| 52 | typedef unsigned CBSFindDelete; | ||
| 53 | enum { | ||
| 54 | CBSFindDeleteNONE = 1,/* don't delete after finding */ | ||
| 55 | CBSFindDeleteLOW, /* delete precise size from low end */ | ||
| 56 | CBSFindDeleteHIGH, /* delete precise size from high end */ | ||
| 57 | CBSFindDeleteENTIRE /* delete entire range */ | ||
| 58 | }; | ||
| 59 | |||
| 60 | extern Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, | 52 | extern Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, |
| 61 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 53 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 62 | CBS cbs, Size size, CBSFindDelete findDelete); | 54 | CBS cbs, Size size, FindDelete findDelete); |
| 63 | extern Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, | 55 | extern Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, |
| 64 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 56 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 65 | CBS cbs, Size size, CBSFindDelete findDelete); | 57 | CBS cbs, Size size, FindDelete findDelete); |
| 66 | extern Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, | 58 | extern Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, |
| 67 | Addr *oldBaseReturn, Addr *oldLimitReturn, | 59 | Addr *oldBaseReturn, Addr *oldLimitReturn, |
| 68 | CBS cbs, CBSFindDelete findDelete); | 60 | CBS cbs, FindDelete findDelete); |
| 69 | 61 | ||
| 70 | 62 | ||
| 71 | #endif /* cbs_h */ | 63 | #endif /* cbs_h */ |
diff --git a/mps/code/cbstest.c b/mps/code/cbstest.c index 9a3191530dc..3588d488204 100644 --- a/mps/code/cbstest.c +++ b/mps/code/cbstest.c | |||
| @@ -317,7 +317,7 @@ static void deallocate(CBS cbs, Addr block, BT allocTable, | |||
| 317 | 317 | ||
| 318 | 318 | ||
| 319 | static void find(CBS cbs, void *block, BT alloc, Size size, Bool high, | 319 | static void find(CBS cbs, void *block, BT alloc, Size size, Bool high, |
| 320 | CBSFindDelete findDelete) | 320 | FindDelete findDelete) |
| 321 | { | 321 | { |
| 322 | Bool expected, found; | 322 | Bool expected, found; |
| 323 | Index expectedBase, expectedLimit; | 323 | Index expectedBase, expectedLimit; |
| @@ -336,23 +336,23 @@ static void find(CBS cbs, void *block, BT alloc, Size size, Bool high, | |||
| 336 | remainderLimit = origLimit = addrOfIndex(block, expectedLimit); | 336 | remainderLimit = origLimit = addrOfIndex(block, expectedLimit); |
| 337 | 337 | ||
| 338 | switch(findDelete) { | 338 | switch(findDelete) { |
| 339 | case CBSFindDeleteNONE: { | 339 | case FindDeleteNONE: { |
| 340 | /* do nothing */ | 340 | /* do nothing */ |
| 341 | } break; | 341 | } break; |
| 342 | case CBSFindDeleteENTIRE: { | 342 | case FindDeleteENTIRE: { |
| 343 | remainderBase = remainderLimit; | 343 | remainderBase = remainderLimit; |
| 344 | } break; | 344 | } break; |
| 345 | case CBSFindDeleteLOW: { | 345 | case FindDeleteLOW: { |
| 346 | expectedLimit = expectedBase + size; | 346 | expectedLimit = expectedBase + size; |
| 347 | remainderBase = addrOfIndex(block, expectedLimit); | 347 | remainderBase = addrOfIndex(block, expectedLimit); |
| 348 | } break; | 348 | } break; |
| 349 | case CBSFindDeleteHIGH: { | 349 | case FindDeleteHIGH: { |
| 350 | expectedBase = expectedLimit - size; | 350 | expectedBase = expectedLimit - size; |
| 351 | remainderLimit = addrOfIndex(block, expectedBase); | 351 | remainderLimit = addrOfIndex(block, expectedBase); |
| 352 | } break; | 352 | } break; |
| 353 | } | 353 | } |
| 354 | 354 | ||
| 355 | if (findDelete != CBSFindDeleteNONE) { | 355 | if (findDelete != FindDeleteNONE) { |
| 356 | newSize = AddrOffset(remainderBase, remainderLimit); | 356 | newSize = AddrOffset(remainderBase, remainderLimit); |
| 357 | } | 357 | } |
| 358 | 358 | ||
| @@ -371,7 +371,7 @@ static void find(CBS cbs, void *block, BT alloc, Size size, Bool high, | |||
| 371 | Insist(expectedBase == indexOfAddr(block, foundBase)); | 371 | Insist(expectedBase == indexOfAddr(block, foundBase)); |
| 372 | Insist(expectedLimit == indexOfAddr(block, foundLimit)); | 372 | Insist(expectedLimit == indexOfAddr(block, foundLimit)); |
| 373 | 373 | ||
| 374 | if (findDelete != CBSFindDeleteNONE) { | 374 | if (findDelete != FindDeleteNONE) { |
| 375 | Insist(oldBase == origBase); | 375 | Insist(oldBase == origBase); |
| 376 | Insist(oldLimit == origLimit); | 376 | Insist(oldLimit == origLimit); |
| 377 | BTSetRange(alloc, expectedBase, expectedLimit); | 377 | BTSetRange(alloc, expectedBase, expectedLimit); |
| @@ -397,7 +397,7 @@ extern int main(int argc, char *argv[]) | |||
| 397 | BT allocTable; | 397 | BT allocTable; |
| 398 | Size size; | 398 | Size size; |
| 399 | Bool high; | 399 | Bool high; |
| 400 | CBSFindDelete findDelete = CBSFindDeleteNONE; | 400 | FindDelete findDelete = FindDeleteNONE; |
| 401 | 401 | ||
| 402 | randomize(argc, argv); | 402 | randomize(argc, argv); |
| 403 | 403 | ||
| @@ -445,10 +445,10 @@ extern int main(int argc, char *argv[]) | |||
| 445 | switch(cbsRnd(6)) { | 445 | switch(cbsRnd(6)) { |
| 446 | case 0: | 446 | case 0: |
| 447 | case 1: | 447 | case 1: |
| 448 | case 2: findDelete = CBSFindDeleteNONE; break; | 448 | case 2: findDelete = FindDeleteNONE; break; |
| 449 | case 3: findDelete = CBSFindDeleteLOW; break; | 449 | case 3: findDelete = FindDeleteLOW; break; |
| 450 | case 4: findDelete = CBSFindDeleteHIGH; break; | 450 | case 4: findDelete = FindDeleteHIGH; break; |
| 451 | case 5: findDelete = CBSFindDeleteENTIRE; break; | 451 | case 5: findDelete = FindDeleteENTIRE; break; |
| 452 | } | 452 | } |
| 453 | find(cbs, dummyBlock, allocTable, size, high, findDelete); | 453 | find(cbs, dummyBlock, allocTable, size, high, findDelete); |
| 454 | } break; | 454 | } break; |
diff --git a/mps/code/mpm.h b/mps/code/mpm.h index 4292f9fa671..1f7ffa15f9b 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h | |||
| @@ -799,6 +799,11 @@ extern AllocPattern AllocPatternRamp(void); | |||
| 799 | extern AllocPattern AllocPatternRampCollectAll(void); | 799 | extern AllocPattern AllocPatternRampCollectAll(void); |
| 800 | 800 | ||
| 801 | 801 | ||
| 802 | /* FindDelete -- see <code/cbs.c> and <code/freelist.c> */ | ||
| 803 | |||
| 804 | extern Bool FindDeleteCheck(FindDelete findDelete); | ||
| 805 | |||
| 806 | |||
| 802 | /* Format Interface -- see <code/format.c> */ | 807 | /* Format Interface -- see <code/format.c> */ |
| 803 | 808 | ||
| 804 | extern Bool FormatCheck(Format format); | 809 | extern Bool FormatCheck(Format format); |
diff --git a/mps/code/mpmtypes.h b/mps/code/mpmtypes.h index e9797863bb8..49265c35a72 100644 --- a/mps/code/mpmtypes.h +++ b/mps/code/mpmtypes.h | |||
| @@ -109,6 +109,7 @@ typedef struct AllocPatternStruct *AllocPattern; | |||
| 109 | typedef struct AllocFrameStruct *AllocFrame; /* <design/alloc-frame/> */ | 109 | typedef struct AllocFrameStruct *AllocFrame; /* <design/alloc-frame/> */ |
| 110 | typedef struct ReservoirStruct *Reservoir; /* <design/reservoir/> */ | 110 | typedef struct ReservoirStruct *Reservoir; /* <design/reservoir/> */ |
| 111 | typedef struct StackContextStruct *StackContext; | 111 | typedef struct StackContextStruct *StackContext; |
| 112 | typedef unsigned FindDelete; /* <design/cbs/> */ | ||
| 112 | 113 | ||
| 113 | 114 | ||
| 114 | /* Arena*Method -- see <code/mpmst.h#ArenaClassStruct> */ | 115 | /* Arena*Method -- see <code/mpmst.h#ArenaClassStruct> */ |
| @@ -424,6 +425,17 @@ enum { | |||
| 424 | }; | 425 | }; |
| 425 | 426 | ||
| 426 | 427 | ||
| 428 | /* FindDelete operations -- see <design/cbs/> */ | ||
| 429 | |||
| 430 | enum { | ||
| 431 | FindDeleteNONE = 1, /* don't delete after finding */ | ||
| 432 | FindDeleteLOW, /* delete precise size from low end */ | ||
| 433 | FindDeleteHIGH, /* delete precise size from high end */ | ||
| 434 | FindDeleteENTIRE, /* delete entire range */ | ||
| 435 | FindDeleteLIMIT /* not a FindDelete operation; the limit of the enum. */ | ||
| 436 | }; | ||
| 437 | |||
| 438 | |||
| 427 | /* Types for WriteF formats */ | 439 | /* Types for WriteF formats */ |
| 428 | /* These should be used with calls to WriteF. */ | 440 | /* These should be used with calls to WriteF. */ |
| 429 | /* These must be unpromotable types. */ | 441 | /* These must be unpromotable types. */ |
diff --git a/mps/code/poolmv2.c b/mps/code/poolmv2.c index ac0e4e87b50..e2642f23c43 100644 --- a/mps/code/poolmv2.c +++ b/mps/code/poolmv2.c | |||
| @@ -588,16 +588,16 @@ done: | |||
| 588 | 588 | ||
| 589 | 589 | ||
| 590 | /* MVTDeleteOverlapping -- ABQIterate callback used by MVTInsert and | 590 | /* MVTDeleteOverlapping -- ABQIterate callback used by MVTInsert and |
| 591 | * MVTDelete. It receives a Range in its closureP argument, and | 591 | * MVTDelete. It receives a Range in its closureP argument, and sets |
| 592 | * returns the DELETE disposition for ranges in the ABQ that overlap | 592 | * *deleteReturn to TRUE for ranges in the ABQ that overlap with it, |
| 593 | * with it, and the KEEP disposition for ranges that do not. | 593 | * and FALSE for ranges that do not. |
| 594 | */ | 594 | */ |
| 595 | static Bool MVTDeleteOverlapping(ABQDisposition *dispositionReturn, | 595 | static Bool MVTDeleteOverlapping(Bool *deleteReturn, void *element, |
| 596 | void *element, void *closureP, Size closureS) | 596 | void *closureP, Size closureS) |
| 597 | { | 597 | { |
| 598 | Range oldRange, newRange; | 598 | Range oldRange, newRange; |
| 599 | 599 | ||
| 600 | AVER(dispositionReturn != NULL); | 600 | AVER(deleteReturn != NULL); |
| 601 | AVER(element != NULL); | 601 | AVER(element != NULL); |
| 602 | AVER(closureP != NULL); | 602 | AVER(closureP != NULL); |
| 603 | UNUSED(closureS); | 603 | UNUSED(closureS); |
| @@ -605,12 +605,7 @@ static Bool MVTDeleteOverlapping(ABQDisposition *dispositionReturn, | |||
| 605 | oldRange = element; | 605 | oldRange = element; |
| 606 | newRange = closureP; | 606 | newRange = closureP; |
| 607 | 607 | ||
| 608 | if (RangesOverlap(oldRange, newRange)) { | 608 | *deleteReturn = RangesOverlap(oldRange, newRange); |
| 609 | *dispositionReturn = ABQDispositionDELETE; | ||
| 610 | } else { | ||
| 611 | *dispositionReturn = ABQDispositionKEEP; | ||
| 612 | } | ||
| 613 | |||
| 614 | return TRUE; | 609 | return TRUE; |
| 615 | } | 610 | } |
| 616 | 611 | ||
diff --git a/mps/code/poolmvff.c b/mps/code/poolmvff.c index 95e09d90b26..e5335377175 100644 --- a/mps/code/poolmvff.c +++ b/mps/code/poolmvff.c | |||
| @@ -247,7 +247,7 @@ static Bool MVFFFindFirstFree(Addr *baseReturn, Addr *limitReturn, | |||
| 247 | MVFF mvff, Size size) | 247 | MVFF mvff, Size size) |
| 248 | { | 248 | { |
| 249 | Bool foundBlock; | 249 | Bool foundBlock; |
| 250 | CBSFindDelete findDelete; | 250 | FindDelete findDelete; |
| 251 | Addr oldBase, oldLimit; | 251 | Addr oldBase, oldLimit; |
| 252 | 252 | ||
| 253 | AVER(baseReturn != NULL); | 253 | AVER(baseReturn != NULL); |
| @@ -256,7 +256,7 @@ static Bool MVFFFindFirstFree(Addr *baseReturn, Addr *limitReturn, | |||
| 256 | AVER(size > 0); | 256 | AVER(size > 0); |
| 257 | AVER(SizeIsAligned(size, PoolAlignment(MVFF2Pool(mvff)))); | 257 | AVER(SizeIsAligned(size, PoolAlignment(MVFF2Pool(mvff)))); |
| 258 | 258 | ||
| 259 | findDelete = mvff->slotHigh ? CBSFindDeleteHIGH : CBSFindDeleteLOW; | 259 | findDelete = mvff->slotHigh ? FindDeleteHIGH : FindDeleteLOW; |
| 260 | 260 | ||
| 261 | foundBlock = | 261 | foundBlock = |
| 262 | (mvff->firstFit ? CBSFindFirst : CBSFindLast) | 262 | (mvff->firstFit ? CBSFindFirst : CBSFindLast) |
| @@ -370,7 +370,7 @@ static Res MVFFBufferFill(Addr *baseReturn, Addr *limitReturn, | |||
| 370 | 370 | ||
| 371 | /* Hoping the largest is big enough, delete it and return if small. */ | 371 | /* Hoping the largest is big enough, delete it and return if small. */ |
| 372 | foundBlock = CBSFindLargest(&base, &limit, &oldBase, &oldLimit, | 372 | foundBlock = CBSFindLargest(&base, &limit, &oldBase, &oldLimit, |
| 373 | CBSOfMVFF(mvff), CBSFindDeleteENTIRE); | 373 | CBSOfMVFF(mvff), FindDeleteENTIRE); |
| 374 | if (foundBlock && AddrOffset(base, limit) < size) { | 374 | if (foundBlock && AddrOffset(base, limit) < size) { |
| 375 | Addr newBase, newLimit; | 375 | Addr newBase, newLimit; |
| 376 | foundBlock = FALSE; | 376 | foundBlock = FALSE; |
| @@ -388,7 +388,7 @@ static Res MVFFBufferFill(Addr *baseReturn, Addr *limitReturn, | |||
| 388 | if (res != ResOK) | 388 | if (res != ResOK) |
| 389 | return res; | 389 | return res; |
| 390 | foundBlock = CBSFindLargest(&base, &limit, &oldBase, &oldLimit, | 390 | foundBlock = CBSFindLargest(&base, &limit, &oldBase, &oldLimit, |
| 391 | CBSOfMVFF(mvff), CBSFindDeleteENTIRE); | 391 | CBSOfMVFF(mvff), FindDeleteENTIRE); |
| 392 | AVER(foundBlock); /* We will find the new segment. */ | 392 | AVER(foundBlock); /* We will find the new segment. */ |
| 393 | } | 393 | } |
| 394 | 394 | ||