Recent ZBasic Compiler Revision History v4.3.22 - 08 March 2019 -------------------------- - Fixed a problem with the code generated for Union types. v4.3.21 - 25 September 2018 -------------------------- - Corrected an internal error that might occur when generating code for the ZA-328 target. - Corrected a code generation issue for the ESP8266 target that could occur for pin I/O operations where the pin is constant and known at compile-time. v4.3.20 - 12 September 2016 -------------------------- - Corrected a code generation issue for class members that are references. The generated code caused back-end compilation errors. v4.3.19 - 25 March 2016 -------------------------- - Corrected an issue with multiple GlobalCallTarget pragmas where the target list was not accumulating correctly. - Corrected a code generation issue (recently introduced) that caused backend compilation errors related to the prototypes of functions with structure or class types. v4.3.18 - 14 March 2016 -------------------------- - Corrected a code generation error for ZBasic functions/methods with a user-defined return type that contains one or more members that are references. - Corrected an issue with importing functions/methods with a user-defined return type (class, structure). - Eliminated the checking of enum values on imported enums since the rules are different between ZBasic and C/C++. - Changed the error generated on duplicate imported identifiers so that it is just a warning. This situation can arise when imported identifiers differ only in case. This allows importation to complete successfully in spite of the conflict. - Added support for specifying identifiers to exclude from the importing process. This is done by adding a dash prefix to one or more identifers on the . v4.3.17 - 10 February 2016 -------------------------- - Corrected a code generation issue for multi-dimensional array class members. v4.3.16 - 04 February 2016 -------------------------- - Added the directive "Option Notice" and the command line option --notice to allow control of the output of #notice messages. v4.3.15 - 29 January 2016 -------------------------- - Fixed an issue where overload resolution wasn't being handled correctly for routines having a ByRef parameter of a user-defined type (e.g. a structure). - Fixed an issue where the v-table wasn't being generated for a derived class when the base class was virtual (due to other derived classes) but the specific derived class didn't overload any base class methods. v4.3.14 - 20 January 2016 -------------------------- - Fixed an issue with link symbol generation related to ATN character detection. v4.3.13 - 22 December 2015 -------------------------- - Fixed an issue with a back-end build error that could occur in a multi-task application that uses certain ZBasic System Library routines like FreqOut(). v4.3.12 - 07 December 2015 -------------------------- - Fixed some code generation issues: o incorrect index expression generation for an array with a non-zero lower bound o class members that were references were being de-initialized o class members that were BoundedString types weren't accessed correctly o Select Case with a constant selection expression whose value selected the Else case produced syntactically incorrect code o Debug.Print of a reference wasn't being handled correctly - Fixed an issue with resolving a call to an overloaded procedure when an actual parameter is a CodeAddress. v4.3.11 - 18 November 2015 -------------------------- - Added support for the mega48PB, mega88PB, mega168PB and mega328PB. - Fixed a problem where a constant Enum type wasn't being accepted as the Select expression. - Added CCodeAddr() and CDataAddr() functions to convert to corresponding target-specific data types. - Fixed a problem with selection of an overloaded routine when one or more candidates have default parameter values. - Fixed some code generation issues: o Debug.Print of .DataAddress of a variable. o use of CLng() o generating a reference to a data member array element (e.g. invoking SetBits()) o several issues related to v-tbl generation o several issues related to mixins - Added missing type checking on the initialization value of a variable in the declaration that occurred with Option Object in effect. - Fixed an issue with stack use determination related to virtual mixin methods. - Fixed access checking to allow an mixin member overload method to access protected elements of the mixin class. - Corrected an issue that would arise with a call to a private subroutine for which there exists a public overload (with a different signature, of course). v4.3.10 - 11 September 2015 -------------------------- - Added support for ESP8266 devices. - Added the compile-time TargetHas() function to determine function availability. - Added DrainQueue(). v4.3.9 - 18 May 2015 -------------------------- - Corrected a native mode code generation error that could occur if a base class is defined after a derived class in the source code. - Corrected an issue that could cause the stack use determination process to fail depending on the order of definitions of methods and how they are invoked. - Relaxed the rules for use of an Enum in a class or structure. Now, an Enum type can be used for a class/structure member irrespective of the visibility (public vs. private) of the Enum and the class/structure. However, an Enum defined in a parent class must be either Public or Protected to be used in a derived class. This restriction also applies to unions and structures defined in a parent class. v4.3.8 - 11 May 2015 -------------------------- - Added support for ZBasic-Arduino devices. v4.3.7 - 04 May 2015 -------------------------- - Corrected a native mode code generation error introduced in v4.3.6. v4.3.6 - 27 April 2015 -------------------------- - Corrected an internal error that could occur with overloaded class methods. v4.3.5 - 24 April 2015 -------------------------- - Corrected a problem with resolving a call to an overloaded routine that could occur depending on the order in which routines were defined. - Corrected a native mode code generation problem with statically allocated Enum variables having initializers. - Corrected a native mode code generation error involving public inline procedures. Added detection of such procedures referencing private identifiers (not allowed in native mode). v4.3.4 - 15 April 2015 -------------------------- - Corrected some native mode code generation issues related to: - CType() having a parameter that was a structure or class member reference - ByRef structure members - private enumerations and structures - Corrected an internal error that could arise when there are virtual methods in a class but none are ultimately used by the code. v4.3.3 - 31 March 2015 -------------------------- - Corrected a native mode code generation problem that resulted in unnecessary indirection through the virtual function table when a method invoked a method in its parent class. v4.3.2 - 23 March 2015 -------------------------- - Corrected a native mode code generation problem that caused the RTC to not be updated correctly when routines that disable interrupts for potentially long periods of time (e.g. PulseOut) were used. v4.3.1 - 27 February 2015 -------------------------- - Corrected a computation error related to clock prescaler usage. v4.3.0 - 26 February 2015 -------------------------- - Added support for low-voltage mega1284P devices: ZX-24t, ZX-40t, ZX-44t. - Added the ability to specify a clock prescaler for ZX devices and generic target devices (mega and tiny only). v4.2.9 - 09 February 2015 -------------------------- - Modified the parameter range checking code to also check implicit parameters such as when OpenQueue() is called with only one parameter. v4.2.8 - 17 December 2014 -------------------------- - Corrected a code generation problem that caused resource deallocation code to be omitted where a routine ended with "Exit Sub" or "Exit Function". - Added validation for the value of the second parameter to PutPin(). Now, a warning is issued if the constant value is universally invalid or invalid for the target device. - Fixed an issue with VM mode targets that caused an internal error when ByVal parameters are actually passed ByRef (e.g. to ZBasic Library routines). v4.2.7 - 05 December 2014 -------------------------- - Corrected a code generation problem that prevented reliable determinination of heap headroom. v4.2.6 - 02 September 2014 -------------------------- - Corrected an internal error that could arise when generating code for classes with virtual methods. v4.2.5 - 04 April 2014 -------------------------- - Corrected a code generation issue that could occur when a label exists between assignment of a constant value to a variable and subsequent use of that variable. Previously, the generated code would, in some cases, utilize the constant value assigned before the label even though later code modified that value. - Corrected a code generation issue that could arise for use of LBound() and UBound() in a conditional. - Fixed a latent issue with Enum methods that could cause an access violation. - Added code to suppress the "missing return value" warning for Abstract methods but only if they have no user-supplied statements. v4.2.4 - 06 January 2014 -------------------------- - Corrected an issue for mega1284P-based devices that caused timer-related functions (e.g. PulseOut) to not work correctly. - Corrected an issue with the second input capture input on mega1284P-based devices. v4.2.3 - 18 December 2013 -------------------------- - Added support for the ZX-24u, ZX-128a4u and ATtiny841 devices. v4.2.2 - 12 November 2013 -------------------------- - Corrected an issue where an invalid option for the back-end compiler was being emitted when a batch file was used (instead of a makefile). This would most likely surface when running under Wine on Linux or OS X. v4.2.1 - 11 November 2013 -------------------------- - Corrected an issue with InputCapture pin validation for the ZX-24x. - Added ATxmega64d4 and ATxmega128d4. v4.2.0 - 11 October 2013 -------------------------- - Changed to using avr-gcc v4.7.2 (AVR Toolchain 3.4.2), primarily due to the discovery of a code generation bug (see ZBasic Forum) in the previously used v4.3.3 (WinAVR 20100110). v4.1.8 - 20 September 2013 -------------------------- - Corrected a problem that resulted in a missing "pin table" in certain situations when PortBit() is used. - Corrected the value of zb_adcSettleTime emitted for xmega devices. - Made changes to allow Option ComChannels to be set to zero. This allows for not pulling in the SW UART code in cases where it would otherwise be included. v4.1.7 - 07 May 2013 -------------------------- - Corrected a spurious warning about indeterminate stack use that could occur when a derived class exists but isn't used. - Corrected a code generation issue where the initialization value for a statically allocated variable was not present. v4.1.6 - 26 Apr 2013 -------------------------- - Corrected an issue with missing ISRs when Option ConsoleSpeed 0 is used but the console port is opened explicitly by the application. v4.1.5 - 14 March 2013 -------------------------- - Corrected an issue with concatenation of constant strings that would arise when either string begins with a null character. v4.1.4 - 25 February 2013 -------------------------- - Corrected an issue where an abstract class derived from an abstract base class was required to provide implementations for all abstract methods of the base class. - Corrected a code generation issue for invocation of mixin class methods. v4.1.3 - 09 February 2013 -------------------------- - Corrected an issue with importing identifiers created with #define. v4.1.2 - 05 February 2013 -------------------------- - Corrected a problem with initialization code generation that occurred with Option Objects in effect. - Corrected bootloader issues for ATtiny devices. v4.1.1 - 30 January 2013 -------------------------- - PinToggle() was erroneously classified as a function. v4.1.0 - 28 January 2013 -------------------------- - Added support for 3-phase mode in the low-level X-10 functions. - Added the "Option Arduino" directive to support importing Arduino code. - Added fast pin routines: PinLow, PinHigh, PinToggle, PinInput, PinOutput and PinRead. - Added new timing routines: DelayCycles(), DelayMilliseconds() and DelayMicroseconds(). - Added a new serial input function SerialGetByte(). - Added support for the tiny1634, tiny828 and xmega USB devices. v4.0.4 - 11 September 2012 -------------------------- - Corrected a code generation issue related to pin configuration on xmega devices. v4.0.3 - 26 July 2012 -------------------------- - Added support for "Option CallFunctions" to allow invoking functions using Call syntax (and discarding the returned value). - Changed the prefix for temporary directories, now zb rather than zx. - Corrected some issues related to ByRef functions returning a reference to user-defined types. - Fixed a problem with matching calls to overloaded class methods. - Fixed a problem passing user-defined types to imported functions. - Corrected several issues with importing identifiers from C/C++ header files. 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.