For the next release of Inform 6, which will be 6.40, I’m doing some cleanup work on the command-line arguments. This is a big change – sort of – because it completely redoes how the compiler handles trace options. But these trace options are used by almost nobody. (This is the alphabet soup which you see when you type
inform -h2.) So you don’t really have to read this post, but I’m posting it anyway.
We don’t have a planned release for 6.40, but you can get the current source code from https://github.com/DavidKinder/Inform6 as usual.
Here’s the deal: instead of a poorly-documented set of single-letter switches (
-g), we will have a set of named trace options. So, instead of the
-m switch, you write
--trace MEM. The full list of trace options is appended below.
(As with other Inform options, there’s a “classic” form
$!MEM and a “Unix-style” form
--trace mem. I’m just going to use the dash format in this post. However, if you want to stick one of these options in a source header comment, you have to use the dollar format:
Many trace options have a “more verbose” form, which you can get by setting a higher number. For example,
--trace ASM shows the assembly opcodes for every statement;
--trace ASM=2 also shows the hex code for those assembly opcodes.
The point is that in the future, it will be easier to add new trace options, or new verbosity levels.
A few of these options still have single-letter synonyms:
FREQ respectively.) These are the most commonly-used options so it’s worth continuing to support the short forms. In particular, the I7 compiler uses
-s; it would be real bad to remove that.
Trace directive has always been awkward. It supports a few trace options, but not nearly all of them, and its syntax was pretty ad-hoc. But it offered a couple of trace options which weren’t available through the command line. It also lets you change a couple of trace levels in mid-compile.
In the new world, the
Trace directive is pretty well deprecated. Most everything it does has been migrated to the new trace options. (For example, you can display the game’s grammar table with
--trace VERBS, or the game’s dictionary with
Trace directive still exists, but I haven’t tried to add new functionality to it. Its syntax is a bit more consistent though. It’s still slightly useful for the “change trace level in mid-compile” thing, but that’s never been a very important feature.
While I’m on the subject of command-line options: I just deleted the
-F1 option, which uses temporary files for workspace while compiling. This is irrelevant on any machine less than twenty years old, and even the older ones didn’t use it much. The module options (
-U) are next on the chopping block.
To see this list, type
inform --helptrace. The option names are case-insensitive. The compiler accepts some obvious synonyms:
--trace OBJS and
--trace OBJECTS all work, for example.
ACTIONS: show actions defined ASM: trace assembly (same as -a) ASM=2: also show hex dumps ASM=3: also show branch optimization info ASM=4: more verbose branch info BPATCH: show backpatch results BPATCH=2: also show markers added DICT: display the dictionary table DICT=2: also the byte encoding of entries EXPR: show expression trees EXPR=2: more verbose EXPR=3: even more verbose FILES: show files opened FINDABBREVS: show selection decisions during abbreviation optimization (only meaningful with -u) FINDABBREVS=2: also show three-letter-block decisions FREQ: show how efficient abbreviations were (same as -f) (only meaningful with -e) LINKER: show module linking info LINKER=2: more verbose (or 3, 4 for even more) MAP: print memory map of the virtual machine (same as -z) MAP=2: also show percentage of VM that each segment occupies MEM: show internal memory allocations OBJECTS: display the object table PROPS: show attributes and properties defined RUNTIME: show game function calls at runtime (same as -g) RUNTIME=2: also show library calls (not supported in Glulx) RUNTIME=3: also show veneer calls (not supported in Glulx) STATS: give compilation statistics (same as -s) SYMBOLS: display the symbol table SYMBOLS=2: also show compiler-defined symbols SYMDEF: show when symbols are noticed and defined TOKENS: show token lexing TOKENS=2: also show token types TOKENS=3: also show lexical context VERBS: display the verb grammar table