colm 0.15.0 - Aug 26, 2026
--------------------------
	* Colm and ragel are distributed together, in a single colm-suite tarball.
	  Ragel's front end is written in colm, and earlier ragel 7 releases
	  required a separately installed colm of an exactly matching version.
	* Colm carries its own version number, independent of ragel's. Every
	  shipped component is versioned on its own: colm, ragel, libfsm, cgil
	  and aapl. Suite releases are calendar-named snapshots of them,
	  colm-suite-YYYY.MM, with a micro appended for fixup releases.
	* Either half of the suite can be installed on its own, with
	  --disable-install-colm or --disable-install-ragel. The whole tree is
	  built in both cases; only the install step is narrowed.
	* Added -B, which gives the build directory to run from. Colm also detects
	  this on its own, by comparing the running executable against the build
	  tree, using /proc/self/exe on linux and _NSGetExecutablePath on MAC OS.
	  The previous detection of running in the source tree could not work with
	  a separate build directory and is removed.
	* The CC and CFLAGS environment variables are honoured when compiling the
	  output program, defaulting to gcc and to no flags. When running from a
	  build directory the output is linked against libcolm.la, through libtool.
	* The includedir and libdir settings are honoured, rather than assumed to
	  be subdirectories of the prefix. They are not, under the Debian multiarch
	  scheme.
	* Out-of-tree builds work. The version.h header and the src/include/colm
	  directory are generated by config.status, and are removed by distclean
	  rather than by clean.
	* Internal dependencies are linked through the libcolm.la libtool archive,
	  which allows building with slibtool as well as with GNU libtool.
	* The cgil data files and the runtests script are installed to the package
	  data directory, PREFIX/share/colm-suite, rather than PREFIX/share, which
	  was a nuisance for packaging. The runtests script is installed
	  executable. The ragel.lm grammar still lands in PREFIX/share.
	* The manual is built only when --enable-manual is given. The packages it
	  needs are uncommon and often not present.
	* The cmake build has been repaired and extended. It builds colm, libfsm,
	  cgil and ragel. The test suite and the documentation remain autotools
	  only.
	* Added a github actions workflow that builds and tests.
	* Debug logging escapes the token text it prints. Non-printable characters
	  are shown as \xNN and long strings are truncated. The escaping compiles
	  out of a non-debug build.
	* Fixed an out-of-bounds memcpy in string_alloc_full, which copied 32 bytes
	  out of a 25 byte string.
	* Replaced the deprecated sprintf with snprintf, which warns on MAC OS.
	* Removed the empty rtvector.h header.
	* Merged README and README.md into a single README.md.
	* Ran autoupdate on the autotools input.

colm 0.14.7 - Feb 9, 2021
-------------------------
	* Removed all dependence on BUILT_SOURCES. The dependencies on generated
	  sources are now explicit. BUILT_SOURCES was still causing build failures
	  on gentoo.
	* The generated interface sources depend on their headers.
	* Creation of version.h and of the src/include/colm symlink moved out of
	  the makefile and into the configure script.
	* Fixes for cross-compiling. AC_CHECK_FILES cannot run when cross
	  compiling, so the checks for the DIST file and for an external colm fall
	  back to a plain file test.
	* Test suite: fixed a dangling pointer in the ragel parser load, where
	  c_str was taken from a temporary string.

colm 0.14.6 - Jan 18, 2021
--------------------------
	* Fixed vm_pop_type on big-endian systems. The value was read using the
	  tree type and then cast, and the cast drops the high bits, which is
	  where the value lives when the system is big-endian. The stack pointer
	  is now cast and the value read through a pointer to the requested type.

colm 0.14.5 - Jan 3, 2021
-------------------------
	* Reference counting fixes in the undoing of input pushes. A downref was
	  missing when undoing a tree push. Undoing a stream push emitted the
	  reverse code of a tree or data push, so the wrong undo operation ran;
	  the stream push now has a reverse instruction of its own. An artificial
	  ignore tree sent back to the input is upreffed.
	* Added tests for the balance of pushes and pops.

colm 0.14.4 - Dec 23, 2020
--------------------------
	* Added the with_ignore iterator. It is the tree iterator, except that it
	  also visits ignore tokens, which makes it possible to rewrite comments.
	  This is primitive for now. Constructors for tokens do not work right,
	  though the data field can be set.
	* The libfsm library is installed with the version in its name, as libcolm
	  already was.
	* Removed the COLM_VERSION and COLM_PUBDATE substitutions, which duplicated
	  VERSION and PUBDATE. They were left over from the time colm and ragel
	  were in one repository.
	* Updated the copyright year in the version banner.

colm 0.14.3 - Dec 9, 2020
-------------------------
	* The standard streams are wrapped with fopencookie, when it is available.
	  A FILE opened with fdopen cannot be closed without also closing the file
	  descriptor, so the FILE structs were leaked. This matters when colm is
	  embedded in a long running program. Configure tests for fopencookie and
	  falls back to fdopen.
	* Fixed a leak of the stream line length array.
	* aapl: re-issue va_start before the second vsnprintf when formatting a
	  string. The formatting was wrong when the first attempt did not fit.
	* aapl: cast template type pointers to void* before passing them to the
	  memmove functions. Recent compilers warn about moving and copying
	  non-trivial types, a risk these containers have always carried, and the
	  cast better expresses what the code is doing.
	* GenAction no longer holds an InputLoc, which keeps it a trivial type.
	* dump_contents is compiled only when debugging is enabled.

colm 0.14.2 - Nov 25, 2020
--------------------------
	* The bare send statement is introduced with << or <-. Without a leading
	  operator it was ambiguous with the continuation of the statement before
	  it, which the language could not carry.
	* Removed the warning about a concatenation component outdented beyond the
	  first. The send operators make the check unnecessary.
	* All source code moved under src. The aapl, libfsm and cgil directories
	  are now src/aapl, src/libfsm and src/cgil.
	* Removed the ragel examples, left over from the time the repositories were
	  one.
	* Rust code generation: loop labels of the form 'l: while are recognised
	  and emitted, unsigned integers are written without a trailing u, and no
	  label is placed at the end of a loop when loop labels are used for
	  breaking, which rust does not accept.
	* Added tests for production redefinition.
	* Thinned out the rlhc test cases.
	* Added clean-local targets that remove the test working directories.

colm 0.14.1 - Apr 17, 2020
--------------------------
	* Added the redef statement, which redefines a nonterminal. A [...]
	  production stands in for the productions of the previous definition,
	  allowing them to be retained while others are added.
	* Concatenation is restored to patterns, constructors and strings. The
	  bracketed sublist form moved to the top level of each. Colm warns when a
	  component of a top-level concatenation is outdented beyond the first,
	  since that is likely an unintended concatenation with a bare send.
	* The alphabet type used by the parsing machinery is unsigned char. Added
	  the colm_alph_t type along with colm_alph_from_cstr and
	  colm_cstr_from_alph.
	* Removed the -R option. With an unsigned alphabet a range no longer
	  crosses zero, so there is nothing left for it to permit.
	* Exported variables are available from C. Each is declared as an integer
	  named colm_export_<name>, for passing to colm_get_global.
	* Pushing a string to an input uses the string's location, when it has one.
	* Added -p, which writes the C parse object to a file. It must be used with
	  -c. With -c given, -o also writes the parse object, otherwise it writes
	  the binary.
	* Corrected the usage text for the -b and -o options.
	* Colm output is packed into an archive when more than one file is written,
	  and extracted by separate make rules. Added the colm-wrap script, which
	  drives this. The command it wraps may be given as a full path.
	* The ragel state machine compiler moved to a repository of its own, and
	  the package is named colm again rather than colm-suite. Colm retains
	  libfsm, the finite state machine library, which is installed with headers
	  in include/libfsm, and cgil, the code generation intermediate language,
	  formerly rlhc, which is installed as colm source.
	* Removed the ragel tests. The runtests script is installed for use by
	  other packages.
	* Programs built in the source tree link statically against libcolm.a.
	* The cmake build supports standalone executables.
	* Fixed the variable capture in read_word on 32 bit systems.
	* Fixes for building and running the test suite on OSX. The linker wants
	  -rpath with a space, tar is used without --transform, and glibtoolize is
	  used on darwin.
	* Eliminated warnings for the case where sizeof(int) differs from
	  sizeof(long), and for an unused variable when --disable-debug is given.
	* The vim syntax file highlights redef.

colm 0.14 (unreleased) - Jan 2020
---------------------------------
	* Added the left-recursive repeat operators <* and <+. The existing * and +
	  operators are right-recursive.
	* A production element can be a parenthesized sublist, with alternation
	  inside and an optional repeat operator following.
	* Added a third bootstrap stage, which allows the grammar to be transformed
	  by a colm program before it is compiled. The left-recursive lists and the
	  production sublists are implemented this way.
	* The token keyword can be used in place of literal when defining literal
	  tokens.
	* Backtick literals can be closed with a second backtick, which allows an
	  operator to follow without an intervening space, as in [`,`?]. The
	  backtick character is excluded from literals. The ] character remains
	  excluded in the second and greater positions.
	* Reverted the exclusion of ? from the second and greater positions of a
	  literal. Closing the literal serves the same purpose and is general.
	* A named right-hand-side element of a tree can be set.
	* Added -R, which allows a hex range to cross zero. The alphabet is signed,
	  so a range such as 0x20 .. 0xa0 is otherwise an error, which is a
	  nuisance for utf8.
	* Exported C++ classes derive from a common ExportTree class, declared in
	  the new colmex.h header. Added RepeatIter, a non-recursive iterator over
	  repetitions that works with both left-recursive and right-recursive
	  lists. Added colm_get_left_repeat_next and colm_get_left_repeat_val.
	* When more than one output file is written, the files are packed into an
	  archive and extracted by separate make rules.
	* The containing package is versioned separately from the programs in it.
	  This is colm-suite 1, containing colm 0.14 and ragel 7.0.
	* Added a github workflow that builds and tests, including from the
	  distribution tarball.
	* Test suite: failures propagate to the exit status, the tests that failed
	  are listed at the end of a run, and configure checks for the ASM,
	  objective-c and julia tools before enabling those tests.
	* Improvements to the --with-colm build.
	* The cmake build is brought up to date.
	* Added colm grammars for C++, Python and Go.
	* Fixed backtracking across literal blocks in constructors and added it to
	  patterns.
	* Fixes for building with clang 9, including on android.
	* The vim syntax file highlights the token keyword and end-quoted backtick
	  literals.

colm 0.13.1 (unreleased) - Nov 18, 2019
---------------------------------------
	* The trim decision is made at run time. Streams and parser inputs carry an
	  auto_trim setting, which an explicit operator in the expression
	  overrides. Added the auto_trim function to input and stream.
	* The trim and no-trim operators ^ and @ are general unary operators in
	  expressions. The @ prefix is no longer specific to constructors,
	  accumulators and strings.
	* Printing tracks an indentation level. The _IN_ and _EX_ language elements
	  raise and lower it, in streams and in string accumulators.
	* Excluded ? from the second and greater positions of a literal token, so
	  that the operator can follow a backtick literal without a space.
	* Added -r, which runs the output program, replacing the colm process.
	* Added --with-colm, which builds the colm parser with an external colm
	  program, skipping the bootstrap.
	* The ragel and aapl repositories are merged into this one. The package is
	  colm-suite, containing colm 0.13.1 and ragel 7.0.1, with a single
	  configure script, one copy of aapl, and the documentation collected under
	  doc.
	* The test suite is configured from the top-level configure script and
	  covers aapl, colm, rlhc, the ragel parser and the translations. The
	  compilers and interpreters it needs are located by configure.
	* The aapl headers are installed.
	* The cmake build reads its configuration from configure.ac and exports
	  from both the build tree and the project directory.
	* Added colm grammars for Rust and PCRE.
	* Added a CREDITS file.
	* The manual build conditional is set after --enable-manual is checked, and
	  the pdf is included in the built targets.
	* Reset tokend when a scan for ignores ahead of a region change fails.
	* Fixed the error message for a literal type reference that is not found.
	* config.h is present, so that --enable-debug works.
	* The vim syntax file contains all keywords inside [] regions.

colm 0.13.0.7 - May 14, 2019
----------------------------
	* The input and stream types are separated. A parser's input object has its
	  own type with its own set of functions, and the stream functions moved to
	  stream.c. A parser's input can be set before parsing begins.
	* The bare send statement sends to the variable named _, rather than to the
	  stds list of streams. The choice between a parser and a plain stream is
	  made at compile time.
	* Reduction actions can reference a tree with $*name and $*N.
	* The right-hand side of a switch variable is available in the case
	  clauses.
	* Tokens have file and col fields, which give the file name and column of
	  the location.
	* Added colm_set_reduce_clean, which controls whether trees are freed after
	  each reduction action. Retaining them leaves the trees underneath a
	  reduction available.
	* Made tree_to_str available in the library.
	* Streams track line lengths and use them to restore locations during push
	  back. The starting line need not be 1.
	* colm_tree_upref takes the program as an argument. Structs are neither
	  upreffed nor downreffed, and the runtime asserts this.
	* The generated commit code no longer emits the postfix reduce, which
	  relied on a GNU extension header that is not available on MAC OS.
	* Programs are linked with an rpath when run from an installed location.
	* Use -Wl,--no-undefined only on linux.
	* Removed the test case directory.
	* Fixed a segfault in the production label lookup when a production has no
	  label.
	* Parse errors are no longer sent to cerr as text.
	* Various fixes to the balance of pushes and pulls in the input system, and
	  to the undoing of consumed data. Freed leaked buffers.
	* The vim syntax file highlights the $*name and $*N reduction references.

colm 0.13.0.6 - May 18, 2018
----------------------------
	* Trees can be printed in a postfix notation, which serves as a streaming
	  tree format for both output and input. Added the postfix function.
	* Added the read_reduce statement, which runs a reduction over a stream in
	  the postfix format.
	* Removed the print_xml and print_xml_ac statements. The xml and xmlac
	  functions, which collect to strings, do the same job.
	* All printing is now handled with the send instructions. The print and
	  prints statements are implemented using send.
	* The prints statement takes the stream as an explicit first argument.
	* Added the bare send statement, which sends to stds, a list of streams.
	* Sending to a list of streams is allowed.
	* Removed the expression statement and added a call statement. The parse,
	  reduce, send, construct, match, make_tree, make_token and new forms can
	  be used as either a statement or a factor.
	* Removed string concatenation from patterns, constructors and strings.
	  Only the send accumulator concatenates. This avoids an ambiguity between
	  a concatenation and a bare send.
	* Case clauses accept a production name in place of a pattern, and also a
	  production name together with a pattern.
	* void is a keyword and a non-tree type, rather than a language element.
	* Added gets to parser, which returns the stream.
	* Parse and embedded strings no longer trim, which makes them consistent
	  with send.
	* Sending a tree to a stream no longer converts it to a string. The
	  conversion was the reason indentation was not coming out right.
	* Added a CMake project.
	* The manual is built only if asciidoc and pygments are available.
	* Struct and language element identifiers are drawn from disjoint sets,
	  which allows the runtime to verify that trees and structs are not mixed.
	* Streams are given a unique struct id.
	* Whether revert is enabled is tracked at runtime.
	* The unescape function is generated only if it is needed.
	* Fixed downrefs of the stream struct in the parse append, of the list
	  struct in the list length, of structs in the reverse code, of the map in
	  the map list length, and of values of void type. The list iterator
	  destroy no longer downrefs its arguments, which are not trees.
	* Fixed the comparison of reduce actions.
	* The reduction info array is declared static.
	* Handle the in-source-tree case when built by libtool.

colm 0.13.0.5 - May 11, 2017
----------------------------
	* Migrated from the GPL version 2 to the MIT license.
	* Print, send and construct now trim automatically, which is consistent
	  with the $ operator. The trim can be turned off with the @ operator in
	  front of an expression. The rationale is that test inputs often have no
	  surrounding ignores, making it easy to forget a trim is needed, and the
	  occasional tree that does have them then gives an undesired result.
	* Added the -E name=value option, which sets a string value available in
	  the program.
	* The -I and -L options now work, giving additional include paths to the
	  compiler and library paths to the linker. Include paths are checked when
	  opening includes.
	* The usage message lists the full set of options.
	* Added colm_error, for extracting the error string.
	* Added a function for retrieving the reducer context.
	* Program arguments can be passed in with lengths, which allows binary data
	  to be passed.
	* Matching a ref returns a tree type. A match turns a ref into a tree.
	* An or block in a regular expression that produces nothing now yields the
	  lambda machine.
	* Fixed a crash in lookup when the left hand side has no object.
	* No longer closing stdin, stdout and stderr.
	* Added an asciidoc manual, with autoconf and automake support for building
	  it. The .adoc input files are in the distribution.
	* Added a coding conventions document.
	* Call ldconfig in a postinst, since a shared library is now exported.
	* Removed the proprietary tests and flattened the test directory.
	* Updated the README to reflect the build and run-time dependencies.
	* Fixed the type of the strtol return value in lexFactorRepNum, a class
	  versus struct inconsistency for FsmCodeGen, a missing cast, a comma at
	  the end of an enum and some redefined typedefs.
	* Removed an obsolete include of alloca.h.
	* vim syntax: the C++ keywords are restricted to inside reduction blocks.

colm 0.13.0.4 - Jul 11, 2016
----------------------------
	* Added a fail-parsing flag, which allows a reduction action to abort a
	  parse immediately. All alternate parsing paths are abandoned.
	* A stream made with new collects the text sent to it. The text is
	  available as a string in the tree field. This is much faster than sending
	  to a line parser and extracting the tree just to convert it to text.
	* Correct position information is computed in the top-level stream, which
	  gives correct line numbers when parsing out of a string.
	* File names used in locations are managed by the program and can be
	  exported, allowing them to outlive the program they came from.
	* Host adapter functions have unique names and are reached through function
	  pointers, so that more than one colm program can be linked into a binary.
	* libcolm is built shared, using the -release linker option.
	* No longer building the p and d (production and debug) versions of the
	  library. There is just libcolm.
	* The reduction commit walks with tree_child, otherwise ignores and
	  attributes put the walks out of sync.
	* The commit shift count is initialized to -1. An initial value of zero
	  could erroneously fail a parse when backing up to zero shifts.
	* Fixed a string leak and a missing free in the system function.

colm 0.13.0.3 - Jan 28, 2016
----------------------------
	* Added reductions. A reduction block is declared with reduction <id> ...
	  end and holds host language code to be run as the parse tree is reduced.
	  An action is attached either to a nonterminal, with type_ref { ... }, or
	  to a named production, with type_ref: label { ... }.
	* Reduction actions refer to the left hand side with $$, to right hand side
	  elements by name with $name or by position with $1, $2, and to the
	  locations of right hand side elements with @name, @1, @2. The location
	  can be omitted.
	* Added the reduce expression, which runs a named reduction over parsed
	  input.
	* A program can contain more than one reduction.
	* Added the $$ operator, which converts a tree to a string, including the
	  attributes.
	* Added the -m option, which writes the C++ commit code to a file.
	* Added the -b option, which names the program object. It also omits the
	  host adapter functions, which need to appear only once in a binary that
	  contains colm code.
	* Generated reduction code carries line directives back to the colm source.
	* The parse tree allocator is a pointer in the parser, so it can be
	  overridden.
	* Run buffers are sized dynamically when a token is extracted.
	* Tokens taken from strings are given a default location.
	* Data pushed in front of a stream sources its location.
	* Added vim syntax highlighting for reduction blocks.

colm 0.13.0.2 - Sep 20, 2015
----------------------------
	* Structs are now a distinct non-tree runtime object, with their own
	  allocation, field access instructions and destruction. The global object,
	  stream, parser, list and map are all built on them.
	* Removed the deref syntax. Derefs are implicit under object semantics.
	* Removed the list2, list2el, map2 and map2el types. The link fields
	  declared with list_el and map_el are now used by the list and map types
	  themselves.
	* int and bool are now values rather than trees.
	* new requires an argument list, and takes an optional capture name, as in
	  new Var: type().
	* A new parser of a context type must be given the context at new time.
	* Added list_iter, rev_list_iter and map_iter, removing the need to walk
	  lists and maps with while loops.
	* Iterators always yield nil at the end.
	* Functions can be declared inside namespaces, and are scoped to them.
	* Globals can be declared inside namespaces.
	* Added C extensions. A function declared with = c_name is implemented by a
	  C function, which is called with the program and the stack pointer.
	* Added str.prefix and str.suffix, and global versions of atoi, atoo,
	  prefix, suffix and the uord and sord functions.
	* Added string.atoo, the octal version of atoi.
	* Added exit_hard, which calls the system exit directly.
	* The system function handles signals and returns the correct exit status.
	* Switch clauses take commit points, and switch statements can be wrapped
	  in curly braces.
	* alias declarations are allowed inside context declarations.
	* List elements can refer to their own type recursively.
	* nil can be cast to a struct or a generic.
	* Brought back the comma as a separator in parameter and argument lists.
	* Sending to a parser no longer trims trees, making it consistent with
	  sending to a stream.
	* Absolute indentation is incremented and decremented on the _IN_ and _EX_
	  types, which can be sent to a stream or embedded in a parser.
	* Renamed argv0 to arg0 and fixed a leak in it.
	* New backtrack-halt strategy. Shifts are counted and a checkpoint is
	  stored on commit, limiting backup to that point.
	* Fixed a segfault following a parse error in an included file.
	* Fixed missing downrefs in the logical operators and in the map key and
	  find arguments.
	* Fixed a couple of opcodes with missing breaks.
	* Function arguments are passed in contiguous space on the caller's stack
	  and return values come back in a register.
	* Large scale renaming in the C runtime to snake case. Merged fsm_run and
	  pda_run.
	* Removed the fd-based IO functions. All stream IO goes through FILE
	  structs, which buffers the many small writes made when printing trees.
	* Restored the GPL license file and the GPL and LGPL headers in the
	  sources.
	* Install internal.h with the other headers.
	* Determine CPPFLAGS and LDFLAGS for the source tests in configure.

colm 0.13.0.1 - Dec 14, 2014
----------------------------
	* The list, map, parser and stream types now have object semantics. A type
	  reference resolves to a pointer to the object and instances are made with
	  the new operator.
	* Added the new operator, which allocates an object and yields a pointer to
	  it.
	* The keyword struct was added as a synonym for context.
	* Added the deref operator.
	* Added the switch statement.
	* Added list_el and map_el declarations, for naming the list and map link
	  fields inside a struct.
	* Added the list2, list2el, map2 and map2el types, which are lists and maps
	  built from links declared in the element struct, rather than from
	  separately allocated cells.
	* Iterators automatically deref lists and maps.
	* The list push and pop functions now operate on the head of the list.
	  Added push_head, push_tail, pop_head and pop_tail. Removed append and
	  remove_end.
	* The send statement now converts trees to strings. Added send_tree, which
	  retains the previous behaviour.
	* The parse statement now converts trees to strings. Added parse_tree,
	  which retains the previous behaviour.
	* Added print as a synonym for send stdout.
	* Parse statements can take functions that return void.
	* String construction lists convert non-string trees to strings.
	* Added the close function to stream.
	* Added the append open mode ('a') to the open function.
	* argv no longer contains the program name. It is available in the separate
	  argv0 variable.
	* Production label enum values in the generated C++ export interface no
	  longer have a leading underscore.
	* Removed the vector type.
	* The -o option now works when compiling to a binary.
	* Handle partially matched tokens on EOF.
	* The include load now checks that the file was opened.
	* Bounds check in the object field lookup.
	* Free the input list when a parser is cleaned up.
	* Streams embedded in a parse are downrefed when consumed.
	* Can break from a for loop when the iterator argument is not a reference.
	* Removed the GPL license file and stripped the GPL and LGPL headers from
	  the sources.
	* The test suite is built with autotools and honours the COLM environment
	  variable, allowing an installed colm to be tested.
	* Removed the test directory and the generated sources from the
	  distribution.

colm 0.12.0 - Feb 1, 2014
-------------------------
	* allow matching against reference types
	* refcount fixes for setting references
	* can use 'in' expr to search ref types
	* can take refs of temps in expresssions
	* error handling improvements
	* fixed the colm input open check
	* added a default capture name to all production definition rhs elements,
	  defaults to the type name
	* allow var ref as the target of a send construct
	* added the cast operator
	* return nil from open if file open fails
	* improvements to locals downrefs (large func offset overflow and iters)
	* fixed the typeref for stdout and stderr, now working
	* evaluate print arguments left to right
	* improved separation of declare, resolve/lookup, and compile passes
	* lookup of types in cons/pats uses the cons type or pattern tree namespace
	* added the void type, useful for calling func in send expression
	* can re-enter namespaces that already exist
	* don't search parent scopes when qualifications are present
	* added a new syntax for literal tokens; a single backtick is starts the
	  literal, ends at whitespace or ] in second or greater position
	* removed comma as separator in literal statement
	* single-quoted strings are now treated like double-quoted strings; they
	  may appear in expressions and are concatenated with the other string forms
	* new syntax for collect-ignore tokens "token <id> -"
	* added the system function, which calls C's system
	* fixes for contiguous stack regions that fixes some segfaults
	* don't use stack top offsets in print instructions
	* allow make_tree anywhere
	* don't use sp offset for make_tree, removes need for contiguous
	* eliminated stack offset from make-token instruction
	* print function names in call op debug stmts

colm 0.11 - May 26, 2013
------------------------
	* Require <> around ref and ptr type declarations (eg: ptr<type_ref>)
	* Added production labels, which follow a production with the form
	  :Label. Labels are exposed in the C++ interface using an enum. They
	  are prefixed with _ to avoid conflict with member access functions.
	* It's now possible to access Tree::tokdata from the C++ interface.
	* The print, stream print, stream push, and stream append operations all
	  no longer trim trees by default. This makes these functions
	  consistent with constructor, which refrains from trimming to avoid
	  extra work. A construct with a tree trim is accomplished with an
	  additional operator. The above print and stream operations now have
	  the same usage patterns.
	* Fixes to prodNum preservation through tree copy, and to the parser

colm 0.10 - Apr 18, 2013
------------------------
	* Implemented the colm parser in colm. Bootstrapping with a parse tree
	  construction in C++. Using that generated parser to to parse the colm
	  grammar, from which the primary parser is produced.
	* Improved error reporting.
	* Added some tracking of progress through a stream for better
	  backtracking over includes that are pushed onto a stream.
	* Updated the vim syntax, no longer highlighting parser, list, etc
	  (types).
	* Parse expressions are now returning trees again. Returning the parser
	  results in semantics inconsistent with many other areas of the
	  program.
	* Can now put '.' or eos on the end of a send expression to terminate
	  the parse
	* Removed the original send syntax (<<).
	* Lowercased and otherwise improved the C interface.
	* The default binary name no longer has .bin suffix.
	* Fixed -o option, now using -c to mean compile on (library). The
	  export filename options are now -e and -x.

colm 0.9 - Feb 19, 2013
-----------------------
	* The parse loop now scans data that is owned by the input stream. It
	  is copied into a contiguous block in the scanner when the token is
	  consumed.
	* The syntax of lexical regions was altered to omit the name. The
	  curlies were replaced with lex ... end syntax.
	* The syntax of namespaces were altered. Curlies were replaced with 
	  namespace <ID> ... end.

colm 0.8 - Dec 29, 2012
-----------------------
	* The parse statement now includes a call to the finish operation. It
	  returns a value of type parser<Type>. The result tree and any error
	  message can be retrieved from this object using 'tree' and 'error'
	  members.
	* Dropped curly brackets and the name from the syntax of lexical region
	  defintition. Using "lex ... end"
	* Dropped curly brackets from the syntax of namespaces and context blocks.
	  Using "namespace N ... end N" and "context N ... end N"
	* Now have a growable stack instead of a large, fixed, pre-allocated stack.
