When you’ve found a DMD bug in your thousands-of-lines programs and want to submit a bug report, your first step is always to reduce it to the minimal test case possible. Without a minimal example, nothing is going to be done about it. But paring your code down can be a bear of a job. Enter DustMite, a tool that will reduce your code to something Walter will be happy with. From the newsgroup announcement:
Inspired by Tigris Delta and the “Want to help DMD bugfixing? Write a simple utility” thread from digitalmars.D.learn. I hope the DMD development team will find this useful.
Advantages over Tigris delta:
* Easy to use (takes only two arguments, no need to fiddle with levels)
* Readable output (comments and indentation are preserved)
* Native support for multiple files (accepts a path to an entire directory for input)
* Written for D
* Written in D
* Not written in Perl
* Can recognize constructs such as try/catch, function invariants (in/out/body)
* Only 440 lines of source code
If you’ve never used delta: this is a tool which attempts to shrink files by deleting fragments iteratively, as long as the file satisfies a user-specified condition (for example, a specific error message when passed through the compiler).
Usage:
1. Formulate a condition command, which should exit with a status code of 0 when DustMite is on the right track, and anything else otherwise.
Example: dmd test.d 2>&1 | grep -qF “Assertion failed”
2. Place all the files that dustmite is to minimize in a new directory.
3. If you’d like to test your condition command, don’t forget to clean up temporary files afterwards.
4. Run: dustmite path/to/directory test-command
5. After a while, dustmite will finish working and create path/to/directory.reduced