Recent ZBasic Compiler Revision History

v3.3.3 - 14 January 2012
--------------------------
- Corrected a VM code generation issue with class methods.


v3.3.2 - 09 January 2012
--------------------------
- Added support for #error and #notify directives inside class, structure and
  enumeration definitions.

- Corrected code generation for class methods returning a structure or object.

- Corrected a problem that would occur when the application defined a structure
  variable with the name "Version", thus conflicting with the built-in constants
  Version.Major, et al.

- Corrected the notion of "User RAM size" for the mega644P-based VM devices.

- Corrected a native mode code generation problem related to an unused based variable.

- Corrected a problem resolving a reference to an overloaded procedure/method
  for object references when the object is local to a procedure.

- Corrected a problem where non-class procedures were being matched on a
  procedure reference qualified by an object reference, e.g. Call bb.foo()
  was matching both foo() defined in the class of bb and a non-class foo()
  (assuming they otherwise had the same signature).

- Added detection of duplicate labels in a procedure.

- Corrected a problem with like-named methods having different class/structure parameters.

- Fixed a native mode code generation problem for Register.IOScaling and Register.Console.Echo.

- Corrected a native mode code generation issue for multi-dimension arrays
  when the lower bound was not the same on all dimensions.

- Improved the error message on type mismatch for the integral division operator.

- Corrected a problem with generating native code for the Integer value -32768.

- Corrected a code generation problem for Register.Pin, Register.DDR
  and Register.Port for xmega devices.


v3.3.1 - 12 March 2011
--------------------------
- Corrected native mode code generation for based methods.  Also, modified the
  handling of #pragma CallTargets so that it works as expected when used within
  a class or within a method.


v3.3.0 - 05 March 2011
--------------------------
- N.B.: this version requires ZBasic Library v3.3.0 or later.  Note that this
        version introduces a new naming convention and directory structure
        for the ZBasic Library files (now called zlib rather than zxlib).

- Added support for alternate I2C and SPI controllers on xmega devices.

- Added support for software-based SPI (native mode devices only).

- Added Option Console to allow a different serial channel to be used for
  Debug.Print, Console.Write(), Console.WriteLine(), Console.Read() and
  Console.Readline().

- Added support for specifying the zero-crossing interrupt for low-level X-10 operation.

- Added Option.TargetFamily and Option.TargetMCU, replacing Option.CPUFamily
  and Option.CPUType, respectively, now deprecated.

- Corrected native mode code generation issues for GetQueue and SetInterval.

- Corrected a problem with accessing methods of a base class when the derived
  class has overloads, even when the overloads have a different signature.

- Modified the analysis of structure/class members to avoid issuing error
  messages for Public members of Private structures/classes.


v3.1.6 - 18 October 2010
--------------------------
- Added support for additional Oak Micros devices.

- Corrected a problem where the Persistent Memory usage wasn't being reported
  correctly for native mode devices.


v3.1.5 - 10 October 2010
--------------------------
- Corrected a problem in the optimization of conditional expressions involving
  Integer variables and negative constants.

- Added checks for overloads with identical signatures in the default namespace.

- Corrected a problem where Boolean values were being accepted where an 8-bit
  integral was required, resulting in an internal error during code generation.

- Added a check to ensure that public variables are not of a privately defined type.

- Added a check for a public class in a library.

- Corrected a native mode code generation problem related to passing an Alias
  ByRef to a procedure.

- Corrected a native mode code generation problem related to passing an Alias
  ByRef to a procedure.

- Improved the native mode code generation for Delay().  Now using sleepTask() when
  the delay value is constant, thus avoiding unnecessary run-time FP calculations.

- Corrected a native mode code generation problem with negation of a constant.

- Added a missing case for native mode type conversion during code generation.


v3.1.4 - 07 August 2010
--------------------------
- Added the ability to specify an index list with @var-name in initialization data.

- Corrected a code generation problem related to a constant index expression
  on a StringVectorData data item.

- Corrected a problem with references to members of a Private structure
  variable from within a function of the same type.


v3.1.3 - 30 July 2010
--------------------------
- Corrected an access violation that would occur when referring to a non-existent
  procedure in a CallTask statement.

- Corrected some VM code generation problem that would occur when referencing an
  element of an array of structures or objects passed to a procedure or when the
  array is local to a procedure.


v3.1.0 - 09 July 2010
--------------------------
- N.B.: this version requires ZX Library v3.0.6 or later.

- Added support for xmega-based devices: ZX-128a1, ZX-32a4, ZX-24x.

- Added support for a single-line If statement.

- Added missing validation for Option StringSize value.

- Corrected a VM code generation error related to early exit from a Select Case block via a GoTo.

- Modified the default heap size to be the larger of twice the Flash page size or 512 bytes.


v3.0.3 - 07 April 2010
--------------------------
- Added support for Option Com1Speed for VM targets (requires VM v3.0.4 or later).

- Added support for Option AtnChar and Register.AtnChar.

- Corrected a code generation error for <string> + <string>.

- Corrected a native mode code generation error for FixB().  It was generating
  the same code as for CByte() with a Single argument.

- Corrected a native mode code generation problem for Pause() with a Single
  parameter whose value is not known at compile time.


v3.0.2 - 01 March 2010
--------------------------
- Corrected a native mode code generation problem for the timer busy flags, e.g. Register.Timer1Busy.

- Corrected an access violation that would occur if the left parenthesis is
  omitted following the method name in a class definition.

- The Protected attribute wasn't being allowed for variables and constants.

- Modifed the compiler to suppress the warning for abstract function methods that don't
  set the return value but aren't invoked.


v3.0.1 - 24 February 2010
--------------------------
- Modified the class analysis to avoid generating references to otherwise unused classes.

- Corrected native mode code generation for invoking a method of a ByRef member.

- Corrected a code generation problem for (f ^ -2) where f is a Single value.


v3.0.0 - 01 February 2010
--------------------------
N.B.: This version requires v3.0.0 or later of the ZX Library

- Added support for ZBasic Object Extensions

- Added support for serial channel flow control via ControlCom().

- Added a new read-only builtins Register.TaskStackMain and Register.TaskStackCurrent.

- Added support for including pre-defined structures using "Option Include".

- Added support for creating variables with the ByRef attribute.

- Added support for the Volatile attribute for structure and class data members.

- Added support for optional scaling and offset parameters on the subroutine form of GetADC().

- Added support for Register.TimerIOBusy and Register.TimerUARTBusy, these
  being synonyms for the corresponding timer busy flags.

- Corrected an optimization error that could occur if a variable is aliased
  by creating a based variable at its address.

- Corrected a VM code generation problem related to use of Mid() on the left of
  an assignment when the target string was a known constant.

- Corrected some native mode back-end warnings that occurred when a bounded
  string or fixed string type was passed to a function.  Corrected a back-end
  warning that occurred with the use of Register.HeapLimit.

- Fixed a problem where Option PortPinEncoding wasn't working correctly.
