mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-21 04:13:46 +00:00
Estimated hours taken: 3 Branches: main Provide a mechanism for resetting the trail. This allows the reuse of memory that is occupied by any entries on the trail. This can only be done safely after it is certain that any calls that added the trail entries cannot be backtracked over. For some programs doing this can prevent trail exhaustation. This diff does not provide a way of doing this at the Mercury level, nor can the compiler currently automatically add calls to reclaim memory used by trail. Both these things are future work. XXX the interaction between this and the debugger is a bit unclear since trailing and debugging don't currently work together properly. runtime/mercury_trail.h: runtime/mercury_trail.c: Add a new function MR_reset_trail(). When called this function walks back along the trail calling function trail entries with the MR_gc untrail reason. It then zeros out the trail zone and resets the ticket counter and ticket high water mark to their initial values. Define two macros, MR_TRAIL_ZONE and MR_TRAIL_BASE that expand to the addresses of the trail zone and the base of the trail respectively in a grade independent manner. Redefine MR_num_trail_entries() using the MR_TRAIL_BASE macro. Document that MR_gc is now used for this. Fix a typo. tests/trailing/Mmakefile: tests/trailing/test_trail_reset.m: tests/trailing/test_trail_reset.exp: A test of the trail reset functionality.
6 lines
197 B
Plaintext
6 lines
197 B
Plaintext
calling function trail entry with 11: commit
|
|
calling function trail entry with 10: commit
|
|
Call to test/1 succeeded
|
|
calling function trail entry with 11: gc
|
|
calling function trail entry with 10: gc
|