Version 2.40 of MinimalBASIC compiler release

This release continues the effort to implement all of the ECMA-116 Full BASIC
mathematical functions by adding DATE and TIME.  It also adds our first string
functions, DATE$ and TIME$, also from ECMA-116 Full BASIC.  It also fixes the
bug where PI and MAXNUM didn't work as functions in DATA statements when -X was
specified.  AVX code generation was removed since it actually generated
programs that were slower since this compiler has no vectorization logic.
Finally, a new appendix has been added to the included book, and
the generated PDF for the book is compressed and linearized, while still
remaining PDF/A-1b.

New Features:

* Add support for DATE and TIME numeric functions from ECMA-116 Full BASIC
  (available when extensions are enabled with -X).
* Add support for DATE$ and TIME$ string functions from ECMA-116 Full BASIC
  (available when extensions are enabled with -X).
* Add support for back-tick, backslash, and tilde
  (available when extensions are enabled with -X).  This feature enhancement
  was requested by Doug Kearns.

Bug Fixes:

* Fix undefined bit-shift behavior in dtoa5_normal.c found by clang 12.0
  undefined behavior sanitizer.
* Fix undefined bit-shift behavior in robert1.c found by clang 12.0
  undefined behavior sanitizer.
* Fix bug where PI and MAXNUM didn't generate the appropriate numeric
  constant values in DATA statements when extensions are enabled with -X.
* Fix bug where '@' was permitted without extensions.  This bug was reported
  by Doug Kearns.
* Fixes for spelling errors in both the source code and the included
  Learn BASIC book, using a patch from Doug Kearns.
* Fixed error message when strange characters are encountered by the
  scanner.  This was prompted by a bug report from Doug Kearns who noted that
  the error message when he had a horizontal tab in his source code wrongly
  complained that lower-case letters were not allowed.

Improvements to the software:

* Simplify zonermore.c's genheaderline0 to avoid a cppcheck 3.4 warning.
* Add support for clang 12.X.
* Silence warnings which show up with newer tcc and clang.
* Enable control-flow protection for compilers that support it (gcc & clang).
* Enable static analyzer for gcc. (but see notes in README)
* Make scanner3 self-test logic simpler and more robust.
* Generate DATA statement assembly directly instead of using indirect macros.
* Move code generation for data from symbol_table module into codegen module
  where it should be.
* Add P417 test for PI and MAXNUM in DATA statements in extended mode.
* Update P388 test to include assignment test for MAXNUM.
* Update makefiles to build unit tests more efficiently using a single
  combined compile+link step instead of using two discrete compile and link
  steps.
* Improve makefiles to perform canrelease testing more simply and efficiently.
* Stop using gas macros in code generation, to ease debugging.
* Improve Makefile.runtests so it shows diff output when there are
  differences.
* Add P418 test for ECMA-116 TIME$ string function.
* Add P419 test for ECMA-116 DATE$ string function.
* Add P420 test for ECMA-116 TIME numeric function.
* Add P421 test for ECMA-116 DATE numeric function.
* Add BASICC.clang, BASICCS.clang, & BASICCW.clang which use llvm-mc and
  ld.lld instead of as and gold/ld.
* Add testing of wide (-w) mode.

Improvements to the documentation:

* Added new flochart appendix with common flowchart shapes and how to
  implement them with ECMA-55 Minimal BASIC.
* Update book's references to specify page numbers for all off-page
  references.
* The ncluded book is now compressed and linearized for better viewing over
  the web, smaller storage requirements, etc.  The PDF version is still
  PDF/A-1b, so it should display and print correctly and does not depend on
  having any particular fonts installed on your system.

Other Changes:

* Removed pcc support, since pcc is once again unsupported and unmaintained.
* Removed AVX support, since simple scalar AVX didn't improve performance.
  Until vectorization is implemented, AVX instructions provide no benefit yet
  add extra complexity and increase testing requirements.

Version 2.31 of MinimalBASIC compiler release

This release is composed of a few bug fixes, some build improvements, and an
upgrade of the runtime mathematical function assembly code which is now based
on SLEEF-3.5.1.

Bug Fixes:

* Fix problems in parseinput found with cppcheck.
* Fix some memory leaks in symbol_table module self-tests.
* Change Makefile.clang so that if PIE=1 is selected, small code model
  is used, because after 4 major versions it appears clang will never
  fix their large mode code generation to work reliably with PIE.
* Change clang compiler detection so it works even on Ubuntu 20.10 where
  they intentionally sabotage the usual --version identification string.
* Fix obviously incorrect comments in load_textdata.[ch] files.
* Convert a few tabs that crept into the runtime assembly to spaces.
* Fix warning in robert1.c's realint().
* Fix warning in semantic_check.c's sc_nvar().

New Features:

* Add support to build system for llvm/clang 11.X versions.
* Make COMPILE_MODE=DEBUG enable bounds-checking for tcc.
* Make -V option to ecma55 show code model used for gcc and clang.
* Make -V option show glibc version (for glibc versions >= 2.3.2).
* Make -V option show Linux kernel version.

Improvements to the software:

* Improve discussion about unary minus problems in grammar.txt file.
* Add test of parseinput to canrelease builds.
* Change maximum possible subscript to 10000000 to allow larger arrays.
* Upgrade SINH/COSH/TANH/ASIN/ACOS/ATAN/ATAN2/POW/EXP/SIN/COS/TAN/
  LOG/LOG2/LOG10 run-time support with new versions from Naoki Shibata's
  SLEEF-3.5.1 upstream version.

Other Changes:

* Drop special-case Makefile.clang support for clang versions < 7.x.

Version 2.30 of MinimalBASIC compiler release

This is another big release with many new features, including many
more of the ECMA-116 Full BASIC mathematical functions, fixes for
a couple of rare corner cases with the power operator, more accurate
LOG2 and LOG10 runtime routines, and finally a switch from calling
the kernel directly to properly using the vDSO for access to kernel
time information.  To make reading the assembly easier, source lines
from the input BASIC program are now inserted as comments in the
assembly language output.

Bug Fixes:

* Raise a specific 'NEGATIVE QUANTITY RAISED TO A NON-INTEGRAL POWER'
  exception for that case in POW instead of just raising the 'BAD POWER'
  exception.  Also correct some incorrect comments and dodgy re-use of a
  register in the binary_power macro.
* Stop chopping off built-in function names at 3 bytes internally.
* Fix two corner cases for ^ operator (power)
  1.  -1^+INF now properly returns 1
  2.  -1^-INF now properly returns 1

New Features:

* Add support for ACOS(), ASIN(), COSH(), SINH(), TANH(), SEC(), CSC(),
  COT(), ROUND(), TRUNCATE() and ANGLE() functions from ECMA-116 Full BASIC
  (available when extensions are enabled with -X).
* Include BASIC source lines in the assembly code as comments.  Each
  comment line of BASIC source is inserted just before the corresponding
  assembly code implementing that line.

Improvements to the software:

* Update hint in Makefile.runtests for removing stale NBS_runtests.?
  directory to include the required DIRNO=? setting.
* Added many more tests for corner cases of ^ operator (power).
* Use SLEEF-3.4.1 LOG10() implementation instead of LOG(x)*(1/LOG(10)).
* Use SLEEF-3.4.1 LOG2() implementation instead of LOG(x)*(1/LOG(2)).
* Properly use vDSO to access time using clock_gettime() for RANDOMIZE
  instead of making direct kernel calls to gettimeofday().
* Source lines are stored in the AST used internally by the compiler,
  making them available to all parts of the compiler which run after
  the parser.

Improvements to the documentation:

* Update book's BASIC Numeric Functions appendix to include brief descriptions
  of the ACOS(), ASIN(), COSH(), SINH(), TANH(), SEC(), CSC(), COT(), ROUND(),
  TRUNCATE(), and ANGLE() functions.
* Updated ecma55 man page to note existence of the ACOS(), ASIN(), COSH(),
  SINH(), TANH(), SEC(), CSC(), COT(), ROUND(), TRUNCATE() and ANGLE()
  functions.

Version 2.29 of MinimalBASIC compiler release

This is a big release with major bugfixes and many new features.  Even if you
don't use the new features, you'll get to enjoy the improvements in accuracy.
This is especially true for people who use the '-s' option (32 bit math).  If
you are actually reading the assembly code, there are more comments and a
little bit less indirection.  And last, but certainly not least, the included
book continues to improve, and its appendix does document all the newly added
math functions.

Bug fixes:

* Fix DAG deletion to properly handle n-ary DAGs.
* Fix very hard to hit bug that occurred if you used some built-in math
  functions but never printed a floating-point value.  This caused the code
  emitter to omit required support for printing floating-point values which
  was necessary for error messages.
* Fixes for rare bug in self-test system for HAM test suite when testing
  floats in extended mode.
* Fix clearing symbol table to clear static tables.  Before this fix it was
  freeing dynamic information, but it did not reset the static table values.
* Fix bug in semantic_checks module where accessing numeric variables without
  any PRINT statements failed to include the required printing support for
  error messages that could occur.
* Fix some exception generation problems with +/-INFINITY constant literal
  values.
* Implemented underflow exception reporting for EXP function.  This is
  arguably a new feature since it never worked before, but it is one of the
  `recommended' features for ANSI according to the NBS test suite.  Since
  the X64 instruction set doesn't support reliable floating point underflow
  detection, and SLEEF's exp implementation doesn't report underflow either,
  this was especially tricky to implement.

New features:

* Add support for CEIL(), PI, DEG(), RAD(), MIN(), MAX(), IP(), FP(), LOG2(),
  LOG10(), and MAXNUM functions from ECMA-116 Full BASIC (available when
  extensions are enabled with -X).

Improvements to the software:

* Upgrade SIN/COS/TAN/ATAN/POW/EXP/POW run-time support with new versions
  from Naoki Shibata's SLEEF-3.4.1 upstream version.
* Add/Improve comments for most of the hand-written assembly code.
* Add support to build system for llvm/clang 10.X versions.
* Add support for built-in functions with two parameters.
* Use DAG representation for all programs so only one copy of each jump target
  exists.  This simplifies renumbering and reduces memory usage.  The
  conversion from tree to DAG is done in a separate pass after the parse and
  jump target verification.
* Updated self-tests to support COMPILE_MODE=DEBUG3 (MJOLNIR heap debugger).
* Update MJOLNIR leak display to actually hexdump every single leaked byte.
  I hope you never need it, but when all else fails and it's time to break out
  the _BIG_ hammer, at least it will be ready.  This is how I finally figured
  out why the DAG was leaking after two days of seeing valgrind whine
  mysteriously.  Valgrind was correct about the leak, but it wouldn't really
  show me what was leaking.
* Add support to build system for running semantic_checks module self-test.
* Add self-test for semantic_checks module.
* Improve handling of +/-INFINITY constant literal values.
* Delay conversions of constant literal values until assembly generation,
  yielding more accurate code regeneration with -P/-R.
* Rewrite log_macro assembly macro to avoid requiring a second XMM register.
* Refactor giant routine get_next_token() in scanner3, yielding a
  process_letters() function which has been updated to use a more idiomatic
  C language style which is easier to read and modify.
* Make -l and -L options output all licenses used.

Improvements to the documentation:

* Update book's BASIC Numeric Functions appendix to include brief descriptions
  of the CEIL(), PI, DEG(), RAD(), MIN(), MAX(), IP(), FP(), LOG2(), LOG10(),
  and MAXNUM functions.
* Updated ecma55 man page to note existence of CEIL(), PI, DEG(), RAD(),
  MIN(), MAX(), IP(), FP(), LOG2(), LOG10(), and MAXNUM functions.
* Fix some incorrect comments in dumpregs.s file.

Version 2.28.1 of MinimalBASIC compiler release

Bug fix:

* Move pos variable outside of __GLIBC__ ifdef like it should be, and add
  comment.  This fixes building with musl.

Version 2.28 of MinimalBASIC compiler release

Bug Fixes:

* Fixed many typographical errors in NBS tests 12, 39, 43, 115, and 128 which
  were reported by Jorge Giner Cordero (author of bas55 interpreter).
* Fixed some outright wrong comments for FATAL and ICE functions.

Improvements to the software:

* Use strdup() when it makes sense to simplify code.
* Updated expected output for updated NBS tests.
* Add CSCLASSICS/FIBOR.BAS, a small program with a recursive implementation
  of Fibonacci sequence generator.
* Replace opaque FSM-based scanner with a switch-based scanner that, while
  perhaps not quite as fast, is easier to understand, update, and extend.
  This resulted in many changes to error output, so if you were grepping
  for that, you'll need to update your scripts.

Improvements to the documentation:

* Update book's bas55 appendix for new bas55 1.18 version.
* Improve book's ecma55 appendix installation instructions.
* Expand book with a new example showing the three common ways of reading
  lists of data from DATA statements.
* Expand book with a detailed explanation of the bubble sort BASIC program.
* Improve book's discussion of OPTION BASE 0.
* Expand book's coverage of multi-way branching by adding a dedicated
  chapter, and as a side effect simplify the chapter on multicolumn output.

Version 2.27 of MinimalBASIC compiler release

Bug Fixes:

* Fix DAG folding so it works for floats too, not just doubles.  For the
  end user, this means that using ecma55 with the options -s -X -O3 all
  active simultaneously now finally works correctly.
* Fix some corner cases for non-default INPUT_WIDTH compile-time constant
  values.

Improvements:

* Replaced buggy run_tests NBS test harness with an all-new test harness
  written using GNU make.
* Replaced buggy run_tests2 and run_tests3 HAM test harness with an all-new
  test harness written using GNU make.
* Stop allocating large arrays on the stack, and allocate them with malloc()
  as it should be instead.
* Stop using static buffers for g_fmt() conversions.
* Stop using duplicate field names in different structures in the symbol
  table.
* Add tests for add_data_literal() to symbol table self-test code.

Version 2.26 of MinimalBASIC compiler release

Bug Fixes:

* Fixed bug in READ statement runtime support code where an error message
  was referenced, but not defined.
* Since clang cannot build a working program with PIE, updated build to
  disallow building with clang and PIE.
* Fixed problem in test harness which made it break with file 5.33.
* Fixed problems with clang builds by using llvm-mc instead of gas for them
  since clang no longer produces assembly output that is compatible with gas.
* Fixed ASAN violation in tree code.
* Fixed run_tests, run_tests2, run_tests3 broken logic.

Improvements:

* Added support for clang 8 & 9.
* Improved ROFF code in man pages.
* Made many small cleanups in unit tests.
* Fixed some issues with the tutorial book Bubble Sort diagrams.
* Improved tracing output in parser.
* Used puts() instead of printf() when possible.
* Add test cases P375 & P376 to test READ into 1D and 2D array variables.
* Make the Makefiles more uniform.
* Added 3 x 3 matrix multiplication, determinant, and inverse demo programs.

Version 2.25 of MinimalBASIC compiler release

Bug Fixes:

* Fix a bug in the "Subroutine Example Flowchart (2 of 2)" in the tutorial
  book.
* Fix bug in AST module self-test where LEN() was treated like PRINT.
* Fix bug in scanner2 module self-test where LEN() was tested without -X
  option being specified.
* Fix rounding of array subscript expression values.

Improvements:

* Only emit len_macro in generated assembly when it is needed.
* Only call gettimeofday syscall for RND if RANDOMIZE is used,
  since it is not needed to generate a repeatable sequence for the case when
  RND is used without RANDOMIZE.
* Use smarter assembly sequences for clearing/initializing buffers.
* Use smarter FOR .. NEXT loop code generation that does one branch per
  iteration instead of two.
* Enable stack protector when building the compiler with pcc.
* Use proper TeX double quotes in the tutorial book.
* Add a new section in arrays chapter of book that explains non-integral
  subscripts and why you do not really want to use them with examples.
* Generalize sequential search flowchart in the tutorial book to work for N
  elements.
* Clarify preface of book to specify only an AMD64 _compatible_ CPU is needed.
  Originally, if the text was interpreted literally, it mandated an actual AMD
  brand CPU.
* Improve loop chapter in the book by adding a summary detailing the critical
  ideas about loops from the chapter.
* Improve array chapter in the book by rewriting several parts, and being more
  pedantic in explanations about OPTION BASE and DIM.  Add a new example
  program that shows issues when using floating point values for subscripts
  and loop increments.

Notes:

* This release has been successfully tested with the official tcc-0.9.27
  compiler release.
* This release has been successfully tested with the official LLVM/Clang 5.0.1
  compiler release.

Version 2.24 of MinimalBASIC compiler release

Improvements:

* Add new chapter about singly linked lists to included tutorial book.
* Rewrite BASICC, BASICCS, and BASICCW man pages so that they are easier to
  understand.
* Use a more portable style of roff in the manual pages.  They have been
  tested and work fine with mandoc in addition to the groff for which they
  were originally written.
* Use mmap() for reading BASIC source file.
* Improve self-tests for parser2, ast, dag, asmgen, scanner2, and
  symbol_table modules.
* Add standard LEN() function for string length (available with -X option).
* Add test P374 to test LEN().
* Make clean targets of Makefile.* remove core files.
* Stop using pinsrd/pextrd for moving data between low 32 bits of fp registers
  and 32 bit gp registers and just used movd in assembly code.
* String comparison is extended to support { '<', '<=', '>', '>=' } (available
  with -X option).
* Improve test harness.

Bug Fixes:

* Fix compilation of scanner2 module with DEEP_DEBUG.
* Fix parser2 module to show grammar expansions for PRINT argument lists when
  using verbose mode.
* Remove references to .opt files from BASICC, BASICCS, and BASICCW manual
  pages.  The external peephole optimizer was removed in version 2.18, but the
  man pages were never updated to reflect that change.
* Fix bug in run_tests2 where ECMA55FLAGS were lost for X tests.
* Fix typo in NBS test P206.
* Fix expected output for test P205 (it runs with -X now).

Version 2.23 of MinimalBASIC compiler release

Improvements:
* Add self-test code to asmgen module.
* Use a more straight-forward implementation of unary minus.
* Prevent warnings on switch statement intentional fall through cases
  when using gcc version 7 and newer.
* Align floating point literal constants on 8 byte boundaries.
* Use '_' instead of '-' for unary minus in debug output to distinguish
  it from binary minus.
* Only call fold_numeric_expression() in emit_numeric_expression() for
  trees; DAGs do their own folding.
* Make dag_binop() smarter about register usage for commutative operators.
* Improve the way text assembly files are included in the compiler.
* Refactor some large functions into pieces to simplify the code.
* Rearchitect the text assembly language routine access to allow a single
  load of an array indices instead of loading address for each routine
  one at a time.  It adds support for lookups of address in the program
  for PIE programs in addition to the existing support for traditional
  executables.
* Small improvements to generated assembly to use 32 xor and mov when
  possible.
* The Makefile.* files have been improved and they run more self-tests.
* The -V output to ecma55 now indicates if the stack protector and/or
  address sanitizers were used when ecma55 was built.
* Fix many, many typographical errors in comments.
* Add test P373 to test INT() more thoroughly.

Bug Fixes:
* Fix bug in ON..GOTO error handling that manifested after unary minus
  code was replaced.
* Change .type statements to use @object instead of %object.
* Fix g_integer() function so it sets the type to R_REAL after
  converting the literal values.
* Fix typo in '-h' output text.
* Fix unsigned integer wraparound bug in dump_floatregs() used by
  raw_registers module self-test.
* Rewrote INT() assembly language implementation so that it handles
  numbers with magnitude outside the range of 64 signed integers
  instead of throwing an exception.  In addition, the new
  implementation now uses ROUNDSD when it is available (SSE4.1).
* Updated tests P330 and P345 expected output to match improved
  behavior of INT().

Warning:

Linux kernel versions 4.12.3 through 4.12.8 and version 4.11.12 are
known to break the gcc and clang address sanitizers.  Kernel 4.12.9
is OK.

Version 2.22 of MinimalBASIC compiler release

Improvements:
* Improve implementations of runtime library code for myisinf, myisnan,
  and mystrcmp.
* Improve comments in memcpy, mystrlen, mystrcpy.
* Improve runtime library code and add comments to it for initbuffer,
  outputbuffer, flushoutputln, appendbuffer, nextzone, and isterminal.
* Add new test case P371 which tests DAG simplification more thoroughly.
* Improve indexing in included tutorial book, and add a note that SGN()
  is often called signum in math textbooks.

Bug Fixes:
* Fix special-case handling of -9223372036854775808 in myitoa
  runtime library routine.
* Fix bug in DAG delete code where children were deleted before checking
  if the node itself would be deleted or not (which depends on the number
  of remaining parents).
* Fix bug in '-R' option where '-P' should be implied but wasn't.

Version 2.21 of MinimalBASIC compiler release

This release has internal improvements for both correctness (the
compiler was relying on undefined behavior) and ease of maintenance
(more assembly routines were moved to separate files).  Finally,
the runtime string routines were improved.

Improvements:
* Make the test harness rerun valgrind if a leak is detected to show where
  the leak was in the code.
* Add -fsanitize=integer to clang ASAN and DEBUG builds.
* Convert NULL pointer checks to a use more natural C idiom.
* Convert empty string checks to a use more natural C idiom.
* Move the static (same for every program) assembly routines to separate
  files and link them directly.
* Improve runtime library routines for mystrlen, mystrcmp, memcpy, and
  mystrcpy.
* Split Makefile into 4 separate files, one for each supported compiler.
* Use gold linker for gcc.
* Upstream pcc (>=20170327) fixed the asm problems, so enable building
  zonermore and parseinput when using pcc.

Bug Fixes:
* Fix undefined behavior of unsigned integer math which was revealed by the
  clang integer sanitizer static analyzer.
* Registers in asm() constraints should not have a percent sign.
* Add missing SIN() invocation to P358.BAS test.

Version 2.20 of MinimalBASIC compiler release

Improved DAG optimizer so it knows that add and multiply are commutative.
Updated SLEEF to version 2.110, fixed stack smashing protection, added
support for position independent executables, added support for link time
optimization, and updated the build for current tools.  Moved third-party
runtime code to plain assembly source files and now those are linked
directly into the ecma55 executable, making maintenance much easier.

Improvements:
* The 20161008 pcc/pcc-libs snapshot pair fixes the pcc/cpp problems, so the
  special cases to avoid building and testing robert1 in the Makefile have
  been removed.  Also, the silly '-D__THROW= -D__LEAF' flags are no longer
  needed on Ubuntu, so they have been removed as well.
* Teach dag optimizer that add and multiply are commutative.
* Add test P369 for testing commutative transformations.
* When using gcc and clang, build with -D_FORTIFY_SOURCE=2 for safety for
  non-debugging builds.
* Add compiler and platform information to the output of 'ecma55 -V'.
* Support building PIE programs for gcc and clang, and use that as the
  default mode when using gcc on systems where the gcc was configured to
  generate PIE by default.
* Simplify selecting LTO and PIE (see README file for details).
* Upgrade SIN/COS/TAN/ATN/LOG/EXP/POW runtime routines to SLEEF version 2.110.
* Link in runtime assembly code source directly when possible instead of using
  huge printf() sequences.

Bug Fixes:
* Update command-line argument processing to require that exactly one
  file is specified instead of ignoring extra arguments.
* Fix the build on Ubuntu 16.10 which has gcc defaulting to position
  independent executables.
* Fix broken stack smashing protection (SSP).  Before the fix, the compiler
  options requested SSP, but the Makefile failed to link with it, meaning
  that SSP did not actually get enabled.

Version 2.19 of MinimalBASIC compiler release

Most of the work for this release involved fixing the dag module.  It appeared
to be working because none of the existing test cases were complex enough, but
that was just luck.  Once this was fixed, the very same complex test case
showed errors never seen before in the pretty printing code regeneration
parenthesis handling when using the unary minus operator, so the ast module
was updated to handle those cases.  As part of tracking these bugs down, many
other small corrections were made, especially in the dag module self-tests
which were improved and expanded.  Other work included converting the
generated code sequences for unary minus to use macros like the other
operations making the expressions in the assembly file easier to follow.

Improvements:
* Remove unused code for dofpspill()/dofpfill() routines.
* Create unary_minus macro and use it so all fp math uses macros
  and reading the code is easier.
* Continue improving documentation and code formatting.
* When using -P, do not emit the skipping peephole warning message.
* Add -v option support to stand-alone dag self-test.
* Remove unused global trim() routine.

Bug Fixes:
* Update datum.dot to reflect change in scanner where +/- are no
  longer merged into constants.
* Numerous fixes for the dag module self-test code where fields
  were not specified.
* Fixes for tree heights in DAG processing.
* Fixes for ugly bugs in DAG processing memory management.  These
  did not manifest themselves in the existing testsuite cases, but
  did occur during some fairly simple new code, which became test
  P367.BAS.
* Fixed regeneration of expressions for pretty printing when they
  involve the unary minus operator.  Like the DAG processing bug,
  these problems did not manifest themselves in the existing testsuite
  cases.  A new test P368.BAS was added to exercise these cases.

Version 2.18 of MinimalBASIC compiler release

This release adds two new types of expression code generation.  For -O1 mode a
new bottom-up expression code generator is used which uses fewer registers.
For -O2 mode a new DAG expression code generator is used to remove common
sub-expressions.  For the new -O3 mode, which requires you set -X too, you get
some aggressive constant folding with the DAG expression generation.  In
addition, the stand-alone peephole scan has been merged into the main
compiler.

New Features:
* Add new DAG-based arithmetic expression code generation which is used when
  -O2 or higher is specified.  This provides per-expression common
  subexpression elimination.
* Add new -O3 optimization level (requires -X too) that does some symbolic
  constant folding that is normally fine, but might break when dealing with
  +/-INFINITY or miss some exceptions.  This is much like -Ofast in popular C
  compilers.
* DAG has folding at -O3 -X too, to catch things like expr-expr and expr/expr.
* Add new bottom-up tree expression code emitter and use it for -O1.  This
  emitter always chooses the tallest subtree when there are two trees, thus
  minimizing register usage.

Improvements:
* doatan(), dosin(), docos(), dotan(), dolog(), and doexp() do their own
  save/restore of FPU state, so they now have a regname parameter and can use
  any xmm register as input/output.
* asmgen has been updated to remove spill/fill sequence for ATN, SIN, COS,
  EXP, INT, LOG, SIN, SQR, and TAN.
* teach constant folder to convert 0+anything and anything+0 to just anything,
  and add associated test P363.
* teach constant folder to convert 0-anything to -(anything) and anything-0
  to anything, and add associated test P364.
* teach constant folder to convert 1*anything and anything*1 to just anything,
  and add associated test P365.
* teach constant folder to convert 0*anything and anything*0 to zero.
* teach constant folder to convert anything/1 to anything.
* teach constant folder to convert anything^1 to anything.
* teach constant folder to convert anything^0 to 1.
* teach constant folder to convert 1^anything to 1.
* push FPU state save/restore down into TAN(), SIN(), COS(), ATN(), LOG(), and
  EXP() implementations, resulting in easier to read mainline code.
* INT() does not need a complete state save, so remove it and just save xmm0
  when necessary.
* Merge register_count.h into raw_registers.c
* Removed old register allocator
* Removed all the ugly register spill/fill code since measuring register usage
  showed that with the current code generation, no spill is ever needed for
  any of the many test programs.
* Add test P366 for testing DAG folding.
* Use a consistent style for C source code that uses more whitespace to
  separate operators and function arguments, making it a little easier to read
  the source code.
* Integrate the very simple peephole scan into the main program instead of
  having it be a separate executable.
* Update test harness to test using '-X -O3' flags when possible.

Bug Fixes:
* Fix tests P222, P223, P244, and P362.
* Fix RND to return proper 32 bit float result in 32 bit mode, and expected
  output for corresponding tests P132, P134, P141,and P142.
* Fix bug in run_tests where valgrind testing was still testing ecma55 using
  64 bit math even when 32 bit was selected.
* Fix AST self-test bugs with line number display.
* Fix run_tests to actually reformat 32 bit code in 32 bit mode.
* Fix ast to properly handle infinity for 32 bit code when reformatting.
* Fix bug where when the parser was rewound in -X mode relational expression
  parsing when dealing with the ambiguous left parenthesis case, the column
  position was not rolled back to the old value, so the computed length of the
  line was too large after the rewind.  This bug was only found now because of
  the update to the test harness to add tests using the '-X -O3' options.

Version 2.17 of MinimalBASIC compiler release

This release fixes an embarrassing, long-standing bug in unary +/- handling.
It also includes a complete open source book on learning to program using
ECMA-55 Minimal BASIC.  In addition, this release includes improvements in
both the quantity and quality of source code comments.

This release was tested with gcc 5.3.1, gcc 6.1.0, clang 3.8.0, tcc mob,
and pcc 1.2.0.DEVEL 20150511.

New Features:
* Added a complete book on programming using Minimal BASIC, using a classic
  flowchart-centric style.

New Features Added Now To Support Future Development:
* Add dag module to convert an abstract syntax tree (AST) into a directed
  acyclic graph (DAG), removing any duplicated common
  subexpressions.
* Add raw_registers module with simpler register allocation/deallocation
  for use by an as yet unwritten DAG-based arithmetic expression code
  generator.

Improvements:
* Added comments to manual pages explicitly stating their copyright and
  license.
* Improve source code comments for tree.[ch], ast.[ch], optimizer.[ch],
  registers.[ch], parser2.[ch], and scanner2.c
* Make error messages more uniform, and move more of them to the emsg[] array
  in the error_messages.c file.
* Remove unfinished and fragile locked register support.
* Add mytrim() function to remove leading and trailing whitespace from ASCIIZ
  strings.
* Improve diagnostic error messages from parser.

Bug Fixes:
* Fix handling of signs in arithmetic expressions to match the rules of the
  ECMA-55 Minimal BASIC specification, which unusually requires expressions
  like -2^2 to evaluate as -(2^2) and yield -4.  The standard requires
  'numeric-rep' to be unsigned (T_INTEGER or T_REAL for this implementation),
  so fix scanner to NOT merge the sign T_ADD or T_SUBTRACT with either
  T_INTEGER or T_REAL.
* Update existing tests for compliance with corrected unary +/- behavior.
* Fix memory leak in parser that only manifested after the sign handling fixes
  and only on invalid BASIC programs.
* Test cases P026 and P038 are not test case errors after all; make them pass
  and mark them as passing (oops!).
* Fix bug in fold_numeric_expression() where if T_INTEGER nodes were
  encountered they were not converted to T_REAL and thus resulted in 0 for any
  operation.  I was lucky that this never occurred in the current compiler,
  because it always converted T_INTEGER to T_REAL in the parser, but this bug
  was encountered during testing with some hand-generated ASTs that did
  include T_INTEGER nodes.
* dosqr() error message when the register argument is a register other than
  xmm0 now actually prints the argument correctly.
* The binary_power macro now properly saves/restores FPU state, so asmgen no
  longer needs to do a spill before and a fill afterwards, resulting in much
  easier to read generated assembly code sequences.
* Add test P361.BAS to verify precedence rules that state ^ operator must be
  evaluated before a unary - operator in a case like -2^2, which for this
  language must be the counterintuitive -4.
* Add test P362.BAS to verify grammar does not allow multiple consecutive
  unary - operators, so -----5 is invalid.

Version 2.16 of MinimalBASIC compiler release

The focus for this release was fixing the fixed-column output when
output is redirected to a file, and ensuring that all output is in
upper-case.

Improvements:
 * Removed code duplication in the runtime code by parameterizing the output
   routines and removed the separate routines for error output.
 * Used local variables for MXCSR inspection and manipulation in arithmetic
   macros.
 * Improved the manual page with typo fixes and addition of yet another name
   for our supported target, x64.

Bug Fixes:
 * Fixed some large mode 64bit memory access issues in generated code.
 * Added missing stack allocation in the binary_add macro.
 * Fixed some weird, difficult to trigger bugs in the INPUT statement runtime
   code while making fixed-width INPUT echoing work when output is not a TTY.
   This required a major update to the supporting runtime code.
 * All error message output is now in upper-case.
 * INFINITY and NAN are now printed in upper-case.
 * The hard-coded numeric constants in error messages were replaced by having
   the compiler generate the required values at compilation time, so they
   are correct for both 80 and 132 column output modes, and for both narrow
   and wide math output modes.
 * Update expected output so that all errors are in upper-case and that all
   output is fixed-width.

Version 2.15 of MinimalBASIC compiler release

Improvements:
 * Add more tests.

Bug Fixes:
 * We need to always include print routines since error messages
   now use them.  This fixes the problem where a program with
   just END would not compile.
 * Major updates to error printing so that it all goes through
   the print subsystem and uses the correct number of columns.

Version 2.14 of MinimalBASIC compiler release

Improvements:
 * Show arguments to built-in math functions in error messages.
 * Add many new math function tests.
 * In extended mode, give a warning when a user-defined function
   gets a +/-Infinity value in an input argument.
 * Add comments to print zone runtime code.

Bug Fixes:
 * TAB() function was accepting negative values but must not.
 * TAB() function now throws an exception on bad arguments as required by
   the standard.
 * Fix some cases where pending output was not flushed on fatal errors.
 * Fix built-in math functions to give appropriate error messages for
   +/- Infinity input values.

Version 2.13 of MinimalBASIC compiler release

Improvements:
 * Consistently include the array name and indices in error messages for
   index out of bounds errors.
 * Consistently include the array name in error messages for invalid
   indices.
 * Consistently include the array name and indices in error messages for
   reads of uninitialized elements.
 * Add SEQSEARCH.BAS to CSCLASSICS collection.
 * Add many new array tests.

Version 2.12 of MinimalBASIC compiler release

This release fixes many corner cases in the math support where infinite values
were involved.  This was spurred by questions from Jorge Giner Cordero, the
author of bas55, the only other known implementation of ECMA-55 Minimal BASIC.
This version also finally forces programs to be all upper-case as the ECMA-55
standard requires.  Finally, it adds the -X switch to enable extensions, and
adds several useful extensions.

Improvements:
 * Add -X option to enable extensions, and it defaults to off so the compiler
   strictly enforces the ECMA-55 standard by default.
 * Add support for AND, OR, and NOT in conditional expressions from
   ECMA-116 BASIC-1.  Extensions must be enabled with -X option to use this
   feature.
 * Add support for EXIT FOR statement from ECMA-116 BASIC-1.  Extensions must
   be enabled with -X option to use this statement.
 * Added even more tests to the test suite, and updated it so that tests
   requiring extensions can be run.
 * Added comments to several undocumented codegen.c functions.
 * Updated documentation including man pages with examples to show how to
   specify options to the BASICC/BASICCS/BASICCW programs.
 * Updated slideshow adding Features and Extensions pages.

Bug Fixes:
 * mystrlen() was returning a 32 bit result by mistake - now it
   returns a proper 64 bit result.
 * Expressions that resulted in +/-Infinity would make the runtime
   think variables were uninitialized.  This problem is now fixed,
   and extensive tests were added for this.  A special thanks to
   Jorge Giner Cordero for making me realize this was a problem that
   needed to be solved.
 * If you used numeric variables but never assigned values, some
   necessary support code was not included so the program crashed
   instead of giving the correct uninitialized variable message.
 * Fix typos in NBS tests 25, 74, 108, 185, 191, and 206.  The corrected
   versions were supplied by Jorge Giner Cordero.
 * Lower-case comments and quoted strings are not permitted any
   more unless extensions are active with -X option.

Version 2.11 of MinimalBASIC compiler release

Fix a minor bug in uninitialized scalar string variable reporting.

Bug Fixes:
 * Fix bug where string support was omitted if a print of a string
   variable occurs without any assignment to that variable.  That is
   a coding error, but it generated a file that would not assemble
   instead of a file that would report the uninitialized variable at
   runtime like it should.

Version 2.10 of MinimalBASIC compiler release

Renumber support has been added to the pretty printer.

Improvements:
 * Removed lineno module and use line numbers in the AST instead.
 * In the AST, specify jump targets as links to statements instead
   of as text, so that renumbering is possible.
 * Add -R option that will renumber by 10 if possible, falling back
   to 2 and then 1 if the number of lines is too great to fit within
   the 9999 line number maximum.
 * Add some implementations of classic computer science algorithms as
   examples.
 * Minor documentation improvements.

Version 2.00 of MinimalBASIC compiler release

AVX code generation has been completed.

Bug Fixes:
 * Fixed several bugs in binary_multiply exception handling.
 * Fixed several bugs in binary_divide exception handling.
 * Fixed a bug in register spill/fill where offsets into the stack were
   specified incorrectly.
 * Fix bug where assembly code was storing 1 to ah instead of al in
   feature tests.
 * Fix bug where scanner would coredump if a character outside of
   7 bit ASCII was encountered.
 * Fix bugs in expression optimizer that prevented required exceptions
   from occurring.
 * Fix ICE() when a non-existent filename was given as the Minimal BASIC
   input file.

Improvements:
 * binary_add, binary_subtract, and binary_multiply do not use any
   xmm registers beyond the ones specified as arguments to the macros.
 * Add tests for addition, subtraction, multiplication, and division overflow.
 * Add test for divide underflow.
 * Improve code generation for SGN() and ABS().
 * Do no mark memcpy, mystrcmp, or badxit as .globl symbols.
 * Use .equiv instead of .equ to avoid re-defining assembler constants.
 * Test 29 now passes as it should, generating the four required exceptions.
 * Added Bob Jenkins' original public domain C language reference
   implementation of ISAAC-64 (which was used to produce jenkins.[ch]).
 * Added Naoki Shibata's original public domain C language reference
   implementation of SLEEF (which was used to produce shibata.[ch]).
 * Remove unused parameters from functions.
 * Rewrote mystrlen assembly function to use a conditional backwards jump.
 * Rewrote Makefile variable setting code.
 * Add support for pcc compiler.
 * Consolidate feature tests so CPUID is called once instead of once per
   feature test.
 * Mark more functions as static.
 * Replace the three different binary_search() routines with one shared
   mybsearch() routine in the globals module.

Version 1.99 of MinimalBASIC compiler release

The featured change in this version is the moving of the assembly generating
AST walking code and the semantic checking code from the parser into separate
modules.

Bug Fixes:
 * The canrelease target of Makefile now works for tcc.
 * Removed generation of unused dedicated floating point stack.

Improvements:
 * If we are using GNU libc, glibc-specific functions are used to have the
   compiler check itself for memory leaks.
 * Intercept malloc(),realloc(),strdup(),strndup() to check for heap
   exhaustion.
 * Implement optional (off by default) heavy-duty memory allocation tracking
   for finding memory leaks.
 * AVX versions of SIN, COS, TAN, ATN, LOG, EXP, and POW (generated from
   SLEEF) have been added and are used if the -A switch is specified when
   ecma55 is run.
 * Update tests to run AVX versions if the processor the tests are running
   on supports AVX.
 * Fix code generation so that if running on 64bit mode it will just use movq
   to move between GP and XMM registers.
 * Update code generation to only include what is needed in the generated
   assembly file.
 * Split out code that walks the AST and generates the assembly to a new
   asmgen module.
 * Split out code that walks the AST and does semantic checking, symbol table
   populating, and jump target verification into a new semantic_checks module.

Version 1.98 of MinimalBASIC compiler release

The featured change in this version is that now the scanner generates tokens
only when they are needed by the parser instead of pre-scanning the entire
input file before the parse.  The other changes are many small bug fixes for
corner cases that never manifested themselves in the existing test suite
programs.  In addition, error reporting was improved to provide more
information when the compiler crashes with an ICE or hits a fatal error.  One
user-visible improvement is that the print buffer is flushed of any pending
output before an INPUT statement, allowing prompts to work as expected.

Bug Fixes:
 * Fix a bug in string literal handling of the backslash character.
 * Fix a bug in INPUT where if INPUT was called and the PRINT buffer is not
   empty, the PRINT buffer was displayed after the INPUT instead of before
   the INPUT prompt was displayed.
 * Fix a bug where the compiler would hit an ICE if a keyword followed PRINT.
 * Correct the manual page description of the -P option.  The -P option
   creates Minimal BASIC source code output instead of assembly, not in
   addition to it.
 * Avoid double error messages when the arithmetic expressions in a
   conditional expression are invalid.
 * Fix a bug where the compiler would hit an ICE if a keyword followed LET.
 * Fix bug where READ followed by a keyword cause the parser to fail without
   any error message provided.
 * Fix some very difficult to find leaks that occurred when changing the
   scanner to be on-demand by the parser instead of a batch scanner run
   before the parser.

Improvements:
 * Add a copy of the MDPI Computers journal paper about version 1.7 of this
   compiler.
 * Add test P226.BAS to verify that string literal handling of the backslash
   character is correct.
 * Greatly reduce the number of fprintf() and fflush() calls while emitting
   code.
 * Add test P227.BAS to verify that INPUT after a PRINT that ended with
   ';' or ',' flushes the output of the PRINT before displaying the INPUT
   prompt.
 * Add test P228.BAS to verify a keyword after PRINT will not cause an ICE and
   will give an appropriate error message.
 * Update ICE() and calls to it so that the source file name, function name,
   and line number in the source file appear in the ICE message.
 * Add test P229.BAS to verify a keyword after LET will not cause an ICE and
   will give an appropriate error message.
 * Add test P230.BAS to verify a keyword after READ will not cause an ICE and
   will give an appropriate error message.
 * Add test P213.BAS to verify that using a keyword that is not valid to begin
   a statement to begin a statement gives an appropriate error message.
 * Now the parser calls the scanner when needed to get tokens, and they are
   scanned only when needed instead of being pre-scanned before the parse.
 * Improve existing and add more scanner self-tests.

Version 1.97 of MinimalBASIC compiler release

The compiler now generates a full AST for the input program, and then does
passes for line number processing, symbol table population, and code
generation using the AST.  This is a major redesign in response to critical
review of version 1.7 which stated that having code generation done as a side
effect of the parse made performing any meaningful optimization impossible.

Bug Fixes:
 * Fix a few more leaks on error paths.
 * Fix two cases of code before variable declarations in scanner code detected
   by sparse.
 * Fix many small issues with AST generation.
 * Fix bugs with user-defined function parameter handling for two-character
   parameter names (letter then a digit) where the digit was being lost.  The
   generated code accidentally worked anyway only by pure luck.
 * Every ICE now uniformly causes an abort().

Improvements:
 * Fix more issues detected by clang static analyzer, sparse, and cppcheck.
 * Ensure check and check32 Makefile targets do not attempt to run valgrind
   when using the tcc compiler.
 * Update README to list all the files for sparse checking.
 * Update README to show how to run check/check32 Makefile targets with tcc.
 * Simplify tree handling, eliminate use of void pointers.
 * Remove more dead tree processing code.
 * Replace g_abs(), g_atn(), g_cos(), g_exp(), g_int(), g_log(), g_sgn(),
   g_sin(), g_sqr(), and g_tan() by g_bif() in parser2.c file.
 * When an END statement is not the last statement, give a better error
   message.
 * When the last statement is not END, give a better error message.
 * Update parser to create an AST for the entire program instead of just
   temporary ASTs for each arithmetic expression as in the previous version.
 * Add pretty-print option -P which regenerates a program that is semantically
   identical from the AST created during the parse.

Version 1.96 of MinimalBASIC compiler release

Bug Fixes:
 * Fix many leaks on error paths.
 * Fix errors in run_tests* scripts.
 * Fix problems with compiler self-tests.
 * Make grammar.txt match the current parser2.c details.
 * Fix bugs where '-0' was generated and accepted.

Improvements:
 * Removed unused code.
 * More intense checking for check and check32 targets of Makefile.
 * Fixed all issues found by llvm/clang static analyzer.
 * Fixed many issues found by cppcheck static analyzer.
 * Add P225.BAS test.
 * Add canrelease target that runs the compiler self-tests once
   with the address sanitizer and once under valgrind to thoroughly
   check for memory access problems and leaks.
 * Add support for n-ary trees instead of just binary trees for AST;
   note that expression handling only requires binary trees, and that
   is is all that is used now.
 * Store pointers to the actual tokens in the AST instead of copying
   the data.  Stop silly cloning of tokens in the parser.
 * Parallelized the self-test suite code.

Version 1.95 of MinimalBASIC compiler released

Bug Fixes:
 * Fix crash in READ and INPUT to array variables if the subscripts were
   non-trivial expressions.

Improvements:
 * Fix Makefile so it does not compile everything twice on check targets.
 * Add more tests.
 * Make input line width compile-time tunable.
 * Shorten emitted program prologue.
 * Give better error messages for cases when -4 or -A was specified in the
   compile, but the generated executable is run on a 64 bit processor that
   lacks those features.
 * Move register handling code from parser2 to its own registers module.
 * Improve register handling.
 * Implement optimizer to lock in most frequently used scalars in an
   expression.

Version 1.9 of MinimalBASIC compiler released

Compiler now generates native SSE register math!

Bug Fixes:
 * bt self-test code fixed to adjust to API change for bst_delete_all()
   which now requires a second argument.

Improvements:
 * Constant folding implemented for binary add, subtract, multiply, power,
   and divide, and for unary minus.  This optimization is performed at
   optimization level 1 (-O1) or higher.
 * Floating point math processing converted from software stack to native
   SSE register math.  This required massive changes through the parser and
   code generator, including implementing a local register allocator.
   It has been tested with a limit of only 3 available XMM registers and
   then NBS test suite passes.  With the default value of 16, spills will
   not occur for normal arithmetic expressions due to the short line length
   of 72 characters specified by ECMA-55 Minimal BASIC.  All arithmetic
   operations are done register-to-register in this initial implementation.
 * The 'make check' now runs valgrind for all successful compiles if it
   is available, tallying the number of leaks found.

Version 1.8 of MinimalBASIC compiler released

Bug Fixes:
 * Make assign_magicvar() and add_float_literal() check input parameters more
   carefully.

Improvements:
 * Improved comments
 * Made compile-time forstack[] dynamically allocated
 * Converted some defined constants to const constants
 * Improve parser2 self-test output when run with '-v' option so that
   magic variable and floating point literal symbol table data is valid.
 * Fix misleading variable names in convert_unsigned_integer().
 * Generate and dump expression trees during the parse (visible with the
   -v option to ecma55).
 * Generate code for string expressions using the AST generated by the
   parse.
 * Generate code for numeric expressions using the AST generated by the
   parse.

Version 1.75 of MinimalBASIC compiler released

Bug Fixes:
 * Fix error in calculating operand_stack_size when using 64bit floating point
   stack.
 * Fix three bad lines in P012.BAS reported by Jorge Giner Cordero, and fix
   other typos I noticed while merging his fixes.
 * Fix typo in P014.BAS reported by Jorge Giner Cordero.
 * Fix typo in P043.BAS reported by Jorge Giner Cordero.

Improvements:
 * Improve comments in lineno.c

Version 1.7 of MinimalBASIC compiler released

Initial SSE4 support is now working!

Bug Fixes:
 * Fix another TAB() corner case.  Last fix added this:
     curzone=(column/ZONE_WIDTH)+1U
   but it needs to be this since columns are 1-based:
     curzone=((column-1U)/ZONE_WIDTH)+1U

Improvements:

 * Added P215, P216 and P217 tests for floating point conversion based on some
   tests by Rick Regan (Exploring Binary) that caused PHP (CVE-2010-4645)
   and Java (CVE-2010-4476) trouble once upon a time.
 * Unify SIGNIFICANCE_WIDTH and EXRAD_WIDTH definitions for all files so
   if it is changed in globals.c, both the compile-time code and runtime
   code will use the same rules.
 * Added P218 test for the TAB() fix.
 * Add -4 switch for SSE4.1 support.   Modify binary math operator macros to
   use PINSR[QD] and PEXTR[QD] when SSE4.1 support is requested.
 * Update ABS(), INPUT and READ code generation to use SSE4 for -4 switch.
 * Update UDF parameter processing to use a macro like other arithmetic
   expression code.
 * Add -A switch for AVX support.  For now, nothing is actually using this.

Version 1.6 of MinimalBASIC compiler released

Bug Fixes:
 * Fix a TAB() corner case.  Given the following source:
   PRINT ,,,,TAB(1);"HI"
   You should get a newline, then HI starting in the first column on the line
   after that.  The problem was nextzone procedure was not updating the
   obuf_next position correctly.
 * Fix bug where .LSTART_BSS was not force-aligned correctly which caused the
   uninitialized variable read checking to fail for scalar numeric variables.

Improvements:

 * Comments added to the parseinput.c file.
 * Convert more generated repetitive inline code to use assembly macros to
   make generated code easier to read.
 * Add second automated test harness for non-NBS tests, and add more tests.

Version 1.5 of MinimalBASIC compiler released

Bug Fixes:

 * A program that is otherwise syntactically valid
   but contains a READ statement and does not
   contain any DATA statements was not being rejected
   as invalid by the compiler, which generated
   assembly code that did not compile.

Improvements:

 * Comments added for fields in emitted DATA
   statement blocks.

Version 1.4 of MinimalBASIC compiler released

Bug Fixes:

 * A user must not specify -o twice; this is now
   enforced (found with clang static analyzer).
 * The realloc() will already free the old pointer
   memory if necessary; fix code that was incorrectly
   re-free()-ing it (found with clang static analyzer).
 * Fix bug in error handling for put_array_data()
   (found with sparse static analyzer).
 * Fix bug where if the program has no floating point
   literals but uses the same string literal several
   times, the string literal constants were not merged,
   which was the result of a cut and paste typo.
 * Fix run_tests for the case where no ecma55/peephole
   exist on the path but they do exist locally.
 * Fix TAB() function so it properly sets the print
   zone.
 * Fix scanner so if spaces occur between an array
   name and the left parenthesis it still knows the
   variable is an array and not a scalar.

Improvements:

 * Add many more comments to document how the code works.
 * Document each token in source code.
 * Use static and const in more places where it makes sense.
 * Many small cleanups to the code for style.

Version 1.3 of MinimalBASIC compiler released

Bug Fixes:

 * Fix many, many typos in NBS test string literals.
 * Fix NBS test 41 and its expected output.
 * Add error path missing free() statements.

Code Generation Improvements:

 * Implement constant merging.
 * Implement DATA item merging.
 * Remove dead code (mymemset).
 * Move numeric and string variables to .bss segment.

Version 1.2 of MinimalBASIC compiler released

Bug Fixes:
* Fix wrong code generation for error reporting when a function parameter is
  uninitialized.
* Update optimizer so that it can ignore leading whitespace and trailing
  comments.

Code Generation Improvements
* Convert ON..GOTO to use a proper jump table.
* Xeon Phi claims it is x86-64 but lacks CMOV and SSE!  Added code to
  explicitly check for CMOV, SSE2, SSE3, and SSSE3 support to the
  prologue code.
* When pushing literal values, add those to the comments in the generated
  assembly to make it easier to read the generated assembly and follow the
  logic of the original BASIC program.
* Emit an .ident and .end as the last two lines of the assembly output.
* Explicitly mark all macro parameters are required.
* Make the for loop macros verify values are OK before using them, fix
  error message handling.

Other Improvements
* Inttypes conversion, only use 64bit integers when required.
* Make == comparisons put the constant first to detect = vs. == errors.
* Add missing header guard macros.
* Do not reject '1 END' since it is a valid, if silly, program.
* Fix error passthrough from convert_line_number() so you do not get
  double 'ERROR:' prefix.
* Add -l and -L to ecma55 to show license summary and full license.

