Recent ZBasic Compiler Revision History

v4.0.2 - 09 May 2012
--------------------------
- Added support for the ATtiny84A.

- Added error messages for Console.Read(), Console.ReadLine(), Debug.Print,
  Console.Write(), Console.WriteLine() if ConsoleSpeed is set to zero.

- Improved the header file importing.  Now, many identifiers defined using
  #define in the imported header files are available in ZBasic applications.

- Added support in Debug.Print for direct output from a null-terminated byte array.

- Corrected a native mode code generation error for Fraction().

- Corrected a back-end linking error that could occur when routines like ShiftOut()
  and ShiftIn() were used in a multi-task application.

- Fixed a problem where the temporary directories weren't being removed.


v4.0.1 - 30 April 2012
--------------------------
- Added experimental support for a new ZX device.

- Added support for low-level SPI operations, GetTimeValue() and GetDateValue() -
  all require ZBasic Library v4.0.1 or later.


v4.0.0 - 16 April 2012
--------------------------
- Corrected a native mode code generation problem relating to expressions
  involving the address of a parameter.

- Public release of generic target capabilities.


v3.4.4 - 26 March 2012
--------------------------
- Added support for an "address of" operand.  Placing an at sign before a variable
  or procedure name is equivalent to var.DataAddress or proc.CodeAddress, respectively.

- Added support for specifying native mode typecasts via CType(), useful when referring
  to external variables and functions.

- Added support for importing external identifiers (variables, functions, etc.) via
  an external include file (.h).

- Added support for defining unions.  This was needed specifically to support importing
  external identifiers but it can also be done in ZBasic source code.

- Relaxed the type checking rules to allow an unindexed array to be passed to a
  procedure corresponding to a parameter that is ByRef of the array's type.

- Added support for the Span() function giving the number of elements in an array dimension.

- Changed the type of SizeOf(), LBound() and UBound() to be "integral".
  This allows the return value to be assigned to any integral type.

- Corrected code generation issues with increment/decrement of a ByRef variable and
  static local variables.

- Corrected problems with the TC0_t and TC1_t pre-defined structures.


v3.4.2 - 16 January 2012
--------------------------
Note: this version includes the changes of v3.3.2 and v3.3.3 below.  Also, v3.4.3
  or later ZBasic Library is required for this version of the compiler.

- Added support for namespaces.

- Added support for generating C++ code for native mode devices with the directive
  'Option CodeType CPP' or the command line option --code-type=cpp.

- Added Microtime_t built-in structure.  Modified GetMicroTime() and
  GetElapsedMicrotime() to accept a Microtime_t structure or an array
  of Byte of at least the same size.  Note that for the xmega-based
  devices the Byte array must be at least 6 bytes now.

- Corrected several native mode code generation issues related to classes and
  structures having members that require special init/deinit/copy handling.

- Corrected a problem with invoking a class method when the object reference
  was a member of a structure.

- Modified the native mode code generated for Delay() when the parameter is
  constant and non-zero so that it matches what happens with VM devices.

- Fixed a VM mode code generation issue related to ByRef functions.

- Corrected a native mode code generation issue for inline procedures.

- Fixed a problem in native code generation for classes where the order of
  the class structure definitions wasn't correct when one class contained
  another (either directly or as a mixin).

- Corrected a native mode code generation issue with referencing a bounded string
  member of a class via an object reference.

- Changed names of constants, variables, functions to be compatible with
  changes made in the ZBasic Library.


v3.4.1 - 18 September 2011
--------------------------
- Changed the error message regarding RTC accuracy to a warning.

- Added code to select the best RTC scale factor if none is not specified.

- Added code to validate the bootloader size and address.

- Corrected issues compiling for AT90USB and AT90CAN devices.

- Fixed problems in the xmegaU2/AT90USBX2 XML files.

- Modified the installer to set some registry keys indicating the ZBasic
  installation path.  These are currently only used for building bootloader images.

- Added code to convert the WinAVR executable path to the "short name" form.
  This avoids issues when the installation path contains parentheses.

- Correction to allow DeviceParameter,RTCFrequency for ZX devices only
  when the value is zero.


v3.4.0 - 10 September 2011
--------------------------
- N.B.: this version requires ZBasic Library v3.4.0 or later.

- Added support for generic target devices (requires a separate license).

- Added support for direct console output on a pin as well as input and output
  on pins (similar to PBasic SERIN and SEROUT).

- Modified the installer script so that it sets access control permissions on
  some of the files in the IDE subdirectory of the installation directory.
  This prevents Vista/Win7 from replicating the files in the virtualstore directory.

- Corrected a problem where the symbol hiding warning in a class method
  couldn't be suppressed using the #pragma.


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.
