tests/C_C++/flex/modifications.txt
2024-07-22 19:39:19 +02:00

2364 lines
82 KiB
Plaintext

/*
HLA Modification History:
v1.22: Started maintaining this info here (was on Webster, previously).
7/5/2000- Corrected a problem with pass by result & val/result parameters
in a nested function.
7/12/2000- Modified lookup so that it allocates the lower case ID on
the stack rather than the heap. This cleaned up some
unrelated (though not found yet) problems. Also added
a kludge to the "Anyexpr:UndefID" production; removed a
call to "FREE2" in order to solve a prgm crash defect.
7/13/2000- Corrected a defect in the array.index macro. It incorrectly
checked for an array bounds violation in standard arrays.
Added the ability to use TYPE names and anonymous variables
in the array compile-time functions (e.g., @Arity, @NumElements,
and @dim).
8/3/2000- Added #includeOnce directive to the language.
10/3/2000- Corrected a defect dealing with forward static constant references
in class procedures, iterators, and methods.
Also corrected a defect when "this." was followed by an undefined
symbol (NULL pointer error).
10/5/2000- Fixed a defect in CopySymbols. It was not duplicating the
StaticName field and this created problems with overridden
methods during assembly (changes to the StaticName field were
reflected in all methods that overrode the original method since
they all shared the same static name).
10/10/2000- Fixed several defects related to dangling pointers. The
Class code assumed that the "hidden" local symbol table entry
for a procedure/method name had a unique StaticName field and
this wasn't the case. Freeing this storage created problems.
10/13/2000- Modified ClassifyLookup routine to handle references of the
form "this.XXXX" in compile-time functions. Also fixed a
defect with FORWARD variable and type declarations
(e.g., type XXX:FORWARD(YYY);). Previous code mistakenly
assigned text "YYY" to XXX rather than "XXX" to YYY.
10/28/2000- Added support for MMX Instructions.
11/28/2000- Modified Namespaces to allow an extension of an existing namespace
by simply specifying the existing namespace identifier in a new
NAMESPACE..END block. Corrected a problem with the ALIGN directive
in RECORD and UNION declarations. Also enhanced ALIGN in RECORDs
and UNIONs: if it appears at the end of the record or union
declaration, then HLA pads the record/union size to the next
boundary specified by the ALIGN operand. Also corrected a defect
dealing with the emission of record constants when the ALIGN
directive was present in the record definition. Updated the
time.timerec and date.daterec types in the datetime.hhf module
to include aliases for the m/d/y and h:m:s fields (to make input
a little easier).
12/2/2000 Fixed a problem with code generation when passing an indexed
static variable by reference. Added GET macro to fileio namespace.
Added fileio.append, fileio.rewind, fileio.seek, fileio.rSeek,
fileio.Position, fileio.copy, fileio.move, fileio.truncate,
fileio.size, fileio.delete, fileio.cd, and fileio.gwd
functions to the standard library.
***** Version 1.22 Release Occurred Here ********
12/8/2000 Corrected a problem with the code generation for the
external __imp__MessageBoxA@16 declaration (used for exception
handling). Changed "EXTERN" to "EXTERNDEF on output so you
don't have to link with MS' library if you're writing a DLL
or code that links with some other language (i.e., no HLA
main program).
***** Version 1.23 Release Occurred Here ********
12/14/2000 Added the @trace pseudo-variable to emit trace code in the
HLA output as a sort of "poor-man's" debugging facility.
Also cleaned up several other internal things inside HLA.
Tweaked the GET and PUT macros in fileio. stdout, and stdin
so that they do not emit trace calls in the macro expansion.
12/24/2000 Completed BITS module in the standard library and added it
to the build.
***** Version 1.24 Release Occurred Here ********
12/29/2000 Corrected problems with some MMX instructions (EMMS crashed
and instrs did not support anonymous memory references).
12/30/2000 Added untyped pass by reference parameters (var x:var). Moved
?abstract exception handler out of main code (automatically
generated by the compiler) and placed it in its own library
routine (to allow user modification). Modified the compiler
so that it doesn't automatically emit exception handling
code. All the exception handling routines were added to the
HLA Standard Library. Added the @exceptions pseudo-variable
to control the emission of the exception handling code (if
@exceptions is true, HLA calls the full exception handling
package in the library, if false, HLA calls a minimal, truncated
version). The work with exceptions was done to allow the user
to write their own exception handling code. Fixed a problem
with memory corruption when executing CMP( anonmem, &pointerconst);
Modified the PEA instruction to emit better code.
1/1/2001 Corrected a defect in the compilation of anonymous memory objects
passed as VAR parameters to a procedure. Added SEGMENT declaration
section.
1/2/2001 Added #code, #static, #readonly, #storage, and #const directives
to let the user rename the HLA segments. Modified the compiler
to output ".link" files and modified HLA.C to use the .link files
(they contain segment definitions). Did some internal clean up
of the code.
1/3/2001 Got rid of anonymous union fields in datetime.hhf records.
Changed segment names to _TEXT, _DATA, _BSS, readonly, and
CONST. Mapped _TEXT to .text, _data to .data, _BSS to .bss,
and CONST to .data during link. Changed segment alignment
to PARA. Add "-m" option to HLA (create map file).
1/4/2001 Removed PEA and SET (extended syntax) instructions.
1/6/2001,
1/7/2001 Reorganized the HLAPARSE.BSN file, removing more than 30,000
lines of code (without any significant feature loss). Modified
the build to allow more stack space at run-time. Modified the
parsing of the string instructions. Changed SETcc and Jcc
instruction parsing.
***** Version 1.25 Release Occurred Here ********
2/1/2001
* Rewrote the boolean expression parser for HLA HLL statements.
* Added Conjunction (AND), Disjunction (OR), and NOT (!) operators.
* Modified the compiler to emit data and external/public declarations
to separate files that the assembler can include during the
assembly phase.
* Changed the output segment declarations to use
the "simplified segment directives" by default (to improve
compatibility with other languages).
* Began moving code generation statements from the Bison file to
the "output.c" file in hopes of localizing the code generation
to make it easier to emit code for other assemblers.
* Added the TASM compatible output mode to HLA's code generator.
* Corrected a defect dealing with duplicate symbols in the static
section that were declared to be arrays.
* Corrected several problems with passing parameters (especially
constant array parameters).
* Improved the efficiency of several parameter code generation
sequences.
* Eliminated several code generation sequences that would yield
operands like "dword ptr (byte ptr xxxx)" in hopes of improving
portability to other assemblers.
* Removed a pair of extraneous pops from the u16ToStr function.
* Completely redid the command line processing for HLA.EXE and
HLAPARSE.EXE (many new command line options were added).
* Modified the compiler to emit PUSHD and PUSHW instructions only
with constant operands.
* Began modifying the compiler to emit "<type> ptr" before all
memory operands (even if not strictly necessary).
* Corrected a defect that erroneously produced an error if a
local symbol was spelled the same as a global symbol except for
alphabetic case.
* Also corrected a defect dealing with errorneous errors if a
record/union field was spelled the same as a global symbol
except for case.
* Corrected a defect associated with local/global symbol name
conflict (case neutrality) between the parameters of an
externally declared procedure that was defined locally and
a global symbol.
* Corrected a defect associated with the output of string objects
in record constants.
* Modified exception handler's call to MessageBox so that the window
is always topmost.
* Added a "constant folding" optimization on strings: HLA now only
emits a single copy of each unique string to the *.consts.inc file.
* Improved code generation when passing small array constants as
parameters.
* Started code generation for GAS and NASM assemblers.
* Added CDECL, PASCAL, and STDCALL options to procedures.
* Modified compile-time uns8, uns16, byte, and word
functions to clear the H.O. bits of their operand.
* Modified the compile time int8 and int16 instructions to
set the H.O. bits of their operand if they are negative or
clear the H.O. bits if they are positive.
* Added anonymous records to unions.
* Added support for "readonly undefID: pointer to userType; external;"
* Added support for "readonly undefID: pointer to builtinType; external;"
* Eliminated the DATA declaration section (use NOSTORAGE option on
declarations in the STATIC section instead).
* Replaced "long double" operations in C with calls to a real80 floating
point package written in assembly to allow portability to other
compilers (e.g., VC++ and GCC).
* Corrected a defect with the comparison of two static constants
(e.g., " &xyz = &xyz ") that didn't take into account the fact
that HLA generates different internal names for each instance
of the same static constant.
* Changed "=" to "==" when checking for EOS in the @WSorEOS function.
Ditto in @WSthenEOS.
* Corrected the fact that HLA v1.25 did not report an error when
you used an expression like << if(strvar = "" ) then >>
which should be illegal (string constants are memory objects).
* Corrected a defect in @peekWS - it was not returning the proper
extracted string. Ditto for @EOS.
* Made several corrections in the program where the code assumed
that "isdigit" returned 0 or 1 (it returns 0/not 0).
* Corrected a defect in counting lines in the #text..#endtext section.
* Eliminated a spurious "PRINTF" from matchmemfunc.
* Removed @memory pattern matching function (because it was never
documented, it didn't work properly, and it was a lot of code).
* Removed *isexpr for the same reasons as above.
* Corrected a defect in the @IsMem function (it was erroneously
calling FreeAdrs).
* Corrected a defect that caused a seg fault when attempting to
call the thunk associated with a pass by name or lazy evaluation
parameter.
* Corrected a problem when attempting to call an pass by name or
pass by lazy parameter using an index after the name.
* Corrected the problem with calling procedure pointers within a
class (was indexing off EDI rather than ESI).
* Fixed a defect that caused a seg fault when attempting to call
a procedure pointer that was a class member with an index
attached to it.
* Corrected a system crash that occurs when the code attempts to
call certain non-procedure objects.
* Corrected a defect when calling a procedure indirectly through
a variable declared with a type name. The procedure type had
a parameter list. The code was not using the proper pointer to
the procedure list in the symbol table.
* Fixed a crash that occurs when calling a class procedure when
using instruction composition.
* Corrected a problem with the BOUND instruction complaining about
a range error when the range was fine.
* Moved BOUND instruction constant output from the ReadOnly segment
to the constants segment.
* Corrected a problem with checking for the bounds of a character
value in a character set constant with a range of characters.
* Corrected a defect with the addressing modes "[reg][const]",
"[reg+reg*n][const]", and "[reg][reg*n][const]".
* Corrected a segment fault that occured when passing parameters
to a class procedure that doesn't exist.
* Modified emitted labels to use a "$" prefix rather than a "?"
prefix (to help with Gas compatibility).
* Corrected a defect in the @Class compile-time function (it was
not returning the class of the correct symbol).
* Corrected a defect in the @size function when computing the size
of an object involving type coercion.
* Corrected a crash that occurred when attempting to use @typename
on a register.
* Fixed a type for tstralloc in the memory.hhf header file.
* Corrected a defect in fdlcw to allow anonymous memory operands.
* Corrected a problem with pat.zeroOrMorePat, pat.oneOrMorePat,
and pat.pattern that prevented them from setting up EBX to properly
extract their strings.
* Corrected pat.zeroOrMorePat, pat.oneOrMorePat, and pat.pattern
so that they actually work (changed their syntax to use multi-part
macros, too).
* Added bSize, wSize, dSize, and qSize functions to the standard
library.
* Corrected a defect in u8ToStr that caused it to modify the value
of EDX on return.
* Added -D (define) command line option.
***** Version 1.26 Release Occurred Here ********
***** Skipped Version 1.27 because I accidentally released version 1.26
with the v1.27 version number ******
7/21/2001
* Corrected bad spelling of putcSize procedure (was putcsize).
7/22/2001
* Corrected problem with underscore output in conv.dToStr procedure.
* Corrected fputq to use the proper field width if underscores is true.
* Corrected problem with underscore output in conv.qToStr procedure.
* Added "fill" and "size" parameters to fputtb call.
* Corrected problem with underscore output in conv.tbToStr procedure.
7/24/2001
* Fixed a problem that caused a crash when attempting to use a
pointer to a record type (rather than the record type) in
a type coercion operation.
* Fixed the output of an array of pointers initialized with the
NULL constant.
* Corrected a code generation problem that occurred when passing a
pointer as a var parameter and the base type of the pointer did
not match the base type of the var parameter.
7/28/2001
* Modified error message for "missing colon" to suggest that the
cause might be an undefined identifier.
9/12/2001
* Modified HLA.C to put quotes around user-supplied filenames in
command line arguments to handle the case where the pathnames
contained interior spaces.
***** Version 1.28 Release Occurred Here ********
9/28/2001
* Corrected a defect in fileio.pute80 (it was pushing too many
parameters in the call to conv.e80ToStr).
* Added str.index2/str.rindex2 functions to the standard library.
* Added str.chpos2/str.rchpos2 functions to the standard library.
* Modified prototypes for string comparisons to use "AL" as the
RETURNS value rather than EAX (for use in boolean expressions).
* Modified the compiler to handle filenames that contain paths to
a file (removed the paths from the "include" directive emitted
by the compiler).
* Added str.prefix/str.prefix2 functions to the standard library.
9/29/2001
* Added a check for NULL pointers to the cs.strToCset function.
* Added a cs.strToCset2 procedure to the standard library.
* Added a check for NULL pointers to the cs.removeStr function.
* Added a cs.removeStr2 function to the standard library.
* Added a check for NULL pointers to the cs.unionStr function.
* Added a cs.unionStr2 function to the standard library.
* Modified prototype for str.init to pass byte array as an
untyped VAR parameter rather than BYTE.
* Added conv._bsize function and modified the conv.bsize function
to take a BYTE parameter.
* Added conv._wsize function and modified the conv.wsize function
to take a WORD parameter.
* Added conv._dsize function and modified the conv.dsize function
to take a DWORD parameter.
* Added conv._i8size function and modified the conv.i8size function
to take an int8 parameter.
* Added conv._i16size function and modified the conv.i16size function
to take an int16 parameter.
* Added conv._i32size function and modified the conv.i32size function
to take an int32 parameter.
* Added conv._u8size function and modified the conv.u8size function
to take an uns8 parameter.
* Added conv._u16size function and modified the conv.u16size function
to take an uns16 parameter.
* Added conv._u32size function and modified the conv.u32size function
to take an uns32 parameter.
* Modified HLA.c to use only the ".link" file of the first ".HLA"
source file appearing on the command line.
***** Version 1.29 Release Occurred Here ********
9/29/2001
* Corrected an error in the "USAGE" message output of hla.c.
11/03/2001
* Corrected a defect associated with using INHERITS in records and
classes (couldn't refer to types outside the record during the
record's declaration). Corrected by duplicating inherited fields
rather than just linking.
* Added the OVERRIDES keyword to override inherited field declarations
in the current record or class.
***** Version 1.30 Release Occurred Here ********
11/04/2001
* Corrected a defect dealing with nested anonymous records and unions.
* Allowed pointer constants as operands of user-defined pointer types
in static and readonly sections, e.g.,
ptrType &ptrConst
12/04/2001
* Corrected a defect with Case Neutrality and updated several standard
library and example program names that failed case neutrality.
Probably reintroduced the defect the changes in HLA v1.25 attempted
to correct, but that was a smaller problem.
* Implemented a different solution to catch case-neutrality errors.
12/05/2001
* Corrected an assertion fault that occurred when attempting to
access a field of a symbol that doesn't have any fields.
12/07/2001
* Corrected a problem with the computation of field offsets in anonymous
records and unions.
* Corrected a couple of defects with the way ALIGN worked in anonymous
records and unions.
12/08/2001
* Corrected a problem with operator precedence in memory index
expressions. Previously, [ebx-a+b] was calculated as [ebx-(a+b)].
Modified it to correctly compute it as [ebx + (-a) + b].
* Corrected a major defect in the str.cat standard library procedure
(it was copying too much data when concatenating strings).
02/12/2002
* Modified str.substr and str.a_substr so that they properly zero-
terminated the strings they extract.
* Modified prototypes for str.tokenize and str.tokenize2 so that they
use an untyped variable type for the destination array.
02/13/2002
* Corrected a defect that crashed HLA when passing an untyped VAR
parameter as a parameter that is also an untyped var parameter.
02/16/2002
* Added "frame", "display", "alignstack", and "use" procedure options.
Added #frame, #noframe, #display, #nodisplay, #alignstack, and
#nostackalign directives. Added code to support "use" option and
optimize certain parameter passing code sequences.
* Modified "call <id>;" so that it allows undefined statement labels.
* Added "label" declaration section to support forward referenced
statement labels.
* Changed "noalignstk" to "noalignstack"
02/17/2002
* Corrected a problem with macro parameter/local symbol lookup.
* Cleaned up parameters to hundreds of function calls to allow
compilation with GCC (preparation for port to Linux).
02/20/2002
* Corrected a defect in the way the exception handler record
was built on the stack (affected coroutine operation).
* PUSHD( &mem ); compiled incorrectly, fixed this.
02/21/2002
* Changed display, alignstack, frame, and use to @display,
@alignstack, etc. Added @noalignstack, @nodisplay, etc.
(left original reserved words, though they are depreciated).
Also added @cdecl, @pascal, and @stdcall.
* Added #openwrite, #write, #closewrite, #openread, and #closeread
compile-time statements and the @read compile-time function.
* Added #enter, #noenter, #leave, and #noleave directives. Also
added @enter, @noenter, @leave, and @noleave procedure options.
03/07/2002
* Added "@{ numset }" numeric set for creating dword values
as a set of bits.
* Certain static array declarations with initializers weren't
checking to make sure the array constant had the same number
of elements as the declaration. Corrected this defect.
* When there was a previous (external/forward) array declaration,
the code did not check to make sure the number of elements
were the same in the declaration and the definition.
* Cleaned up the source code a little bit (merged common code).
03/08/2002
* Modified type checking to allow the assignment of an array
of pointers to a dword array.
* Modified HLL.HHF's SWITCH definition to specify the proper
number of array elements in the jump table for the SWITCH
statement.
* Corrected a defect in _utoEvars.hla (numeric to English
conversion tables).
* Modified type checking to allow pointers and dwords to be
compatible.
* Corrected a type error in the str.strvar macro (strings.hhf).
03/09/2002
* Fixed a problem with compile time functions that allowed
built-in type names as parameters (used to fail if inside
a namespace).
* Corrected some problems with namespace symbol table searches.
***** Version 1.32 Release Occurred Here ********
(note that 1.31 was an interim release)
03/15/2002
* Fixed a size computation that produced the wrong value
when computing the size of an array that had been previously
declared as external.
* Modified definitions for NULL and NIL in memory.hhf so that
they were of type DWORD rather than uns32 (to be compatible
with pointer types).
* Corrected a defect in the code generation for the "elseif"
statement (bad target label emission).
03/17/2002
* Fixed a code generation problem with "intmul( mem, reg);"
03/20/2002
* Corrected a bug that crashed HLA if you passed an intermediate
variable by reference without a base register. This fix
also corrected a few other problems that occurred when there
were errors passing a parameter to a procedure.
* Modified assertion macro to emit filename and line number
when an assertion fails.
03/22/2002
* Changed macro->#macro, keyword->#keyword, terminator->#terminator,
and endmacro->#endmacro. Eliminated nodisplay, noframe, noenter,
noleave, nostackalign, nostorage, use, display, etc. (must now
use the options @nodisplay, @nostorage, @noframe, etc.).
* Updated existing library and example code to eliminate references
to the eliminated reserved words (above).
* Corrected a code generation problem in "elseif(#{ stmts }#) then..."
(was generating a bad label).
* Corrected a bad external name (link problem) in the coroutines
package.
* Corrected code generation for pointers in the BSS segment.
* Fixed a problem with LEA code generation.
* Corrected a problem with comment emmission to the output file.
03/23/2002
* Did a range check on the upper and lower bounds of boolean
expressions of the form "reg in lower..upper" and
"reg not in lower..upper"
03/27/2002
* HLA was not parsing MMX Shift instructions correctly.
Corrected HLA so that it now handles immediate shift
constants correctly and does not allow a memory
operand as the shift count.
* Dropped the requirement of a semicolon (";") after
the #endmacro to make #endmacro more in line with
other compile-time statements (note that you can
still put a semicolon there because semicolons are
optional in the declaration section).
* Added "external" clause to label declarations.
03/28/2002
* Corrected a problem with the processing of procedure
parameters (crashed when certain types weren't correct;
also had problems dealing with anonymous procedure
parameter declarations).
03/29/2002
* Added support for the following instructions:
arpl, clts, cmpxchg8b, hlt, invd, invlpg, lar,
lds/les/lfs/lgs/lss (32-bit versions only),
lidt, lgdt, lldt, lock.add, lock.adc, lock.and,
lock.btc, lock.btr, lock.bts, lock.cmpxchg,
lock.dec, lock.inc, lock.neg, lock.not, lock.or,
lock.sbb, lock.sub, lock.xor, lock.xadd, and lock.xchg
Note: LMSW and SMSW are obsolete 286 instructions and
were left out of the above set 'by design.'
03/30/2002
* Added support for the following instructions:
lsl, mov w/segregs
03/31/2002
* Added support for the following instructions:
push segregs, rdmsr, rdpmc, rsm, sgdt, sidt,
sldt, str, ud2, verr, verw, and wbinvd.
04/01/2002
* Added support for addressing modes of the forms:
[reg32*scale], [reg32*scale+disp], and
[reg32*scale][disp] (these modes are mainly
useful in conjunction with the LEA instruction.
04/06/2002
* Removed #display/#nodisplay, #alignstack/#noalignstack,
#frame/#noframe, #enter/#noenter, and #leave/#noleave
statements and replaced them by the use of the compile-
time variables @display, @nodisplay, @alignstack,
@noalignstack, @frame, @noframe, @enter, @noenter,
@leave, and @noleave.
***** Version 1.33 Release Occurred Here ********
04/10/2002
* Corrected a problem with #ASM..#ENDASM not working properly
in macros and #while loops.
04/11/2002
* Corrected a problem with the use of int32 values in array
indexes in the compile-time language.
04/16/2002
* Corrected a defect in namespaces (wasn't properly checking
for forward pointer references).
* Added @returns, @forward, @external, and @align as synonyms
for returns, forward, external, and align in preparation
for eliminating the non-@ identifiers later on.
* Added @locals function that returns fieldnames and local
names for records, unions, and procedures/methods/iterators.
* Corrected a problem with forward referenced pointers spanning
namespace declarations.
* Added filename field to RefListType so HLA could print the
filename along with the line number when a forward pointer
isn't resolved (the line number can be in a different file
when the error message is finally displayed).
* Removed support for ID`suffix symbols since "`" is used for
a different purpose in HLA v2.0.
04/17/2002
* Added field alignment option to records.
04/19/2002
* Added lex level support to records and unions to eliminate
a problem that occured when a nested record/union had a fieldname
that was the same as the nesting record/union.
* Corrected a problem with the @locals function and records/unions
(was listing fieldnames in the reverse order).
* Added '+=' and '-=' operators to compile-time language.
***** Version 1.34 Release Occurred Here ********
04/22/2002
* Record constant parsing wasn't correctly reporting some
type errors. Corrected this.
* #print was printing byte, word, dword, etc., as decimal.
Corrected this.
* Added the ability to assign an arbitrary pointer constant
to a string field of a record constant.
* Complete workover (just short of a complete rewrite) of
the record and union code in the compiler. HLA v1.34
changes broke a few things and the 1.34 modifications also
exposed a *ton* of problems in the prior code. Hopefully,
these changes have taken care of most of the problems.
Major changes included handling negative starting offsets
better, handling the alignment directives better, and
properly counting fields better.
04/23/2002
* Added the ability to support record alignment and initial
offset assignment in the same declaration ( e.g.,
x:record[4:4] :=4;)
* Added the ability to specify record alignment option in
an anonymous record nested within a union.
* Eliminated the ability to create bare enumeration objects
inside a record (e.g., x:record e:enum{a,b,c}; endrecord;)
This was problematic because the enum constants became fields
of the record and this creates problems down the road. It would
have been a *big* pain to move the enum constants out of the
record's field list, so I decided to drop this feature since
it *never* gets used anyway (one can always create the enum
type external to the record and make the field that enum type).
* Added str.constant macro to the HLA Standard Library.
***** Version 1.35 Release Occurred Here ********
04/23/2002
* Added @string:0 token to allow the initialization of NULL strings.
04/24/2002
* Removed @string:0 and replaced it with the more generic NULL token
(useful for all pointer types, not just strings). Removed the
declarations for NULL and NILL from the memory.hhf header file.
Also cleaned up a lot of code to avoid printing "offset" or
"offset32" (assembler-dependent) when specifying the NULL
pointer as an operand (worked fine before, but just to be
safe...).
* Added @parms compile-time function that returns the number
of parameter bytes for it's procedure operand.
* Changed @locals to @localsyms (given @parms above, @locals
suggests that it returns the number of bytes of local variables).
* Corrected a (serious) defect where HLA was miscalculating the
offsets of less-than-dword typed parameters.
04/29/2002
* Corrected a bug in the CMOVcc( mem,reg) instruction (wasn't
comparing operand sizes properly).
04/30/2002
* Floating point instructions of the form "fadd()", "fsub()",
"fmul()" etc were broken (required "faddp()", "subp()", "fmulp()",
etc.). Corrected this problem.
05/01/2002
* Corrected a problem with @matchIntConst, @matchRealConst, and
@matchNumericConst dealing with strings that did not end with
the numeric value being checked.
05/02/2002
* Procedure pointer types were not correctly storing
parameter/local variable information in the symbol table. This
caused an assertion failure when creating instances of the
procedure types. Corrected this problem.
05/04/2002
* Modified trim, a_trim, delspace, and a_delspace to remove tabs
as well as spaces.
***** Version 1.37 Release Occurred Here ********
05/08/2002
* Eliminated "copyright" message from HLA.EXE (since this is a
public domain program).
* Merged the ReadOnly and Const sections into the .text section
in order to reduce EXE file size under Windows (this was
already the case under Linux).
05/09/2002
* Corrected a defect with passing large parameters by value
(calculated parameter size incorrectly).
05/10/2002
* Fixed several defects related to the declarations of
labels in the label section. Also corrected lots of
problems with external labels.
* Corrected a defect concerning inherited fields in a record.
* A few memory,const instructions weren't checking the memory
operand size to verify it was 8, 16, or 32 bits. Corrected
this.
05/14/2002
* Added the @basereg pseudo-variable that lets a programmer
set the base register used for automatic (VAR) variables.
(Default is EBP, only allows EBP and ESP.)
* Corrected a defect in the "var := expr;" declaration (offset
seemed to get stuck on the value of expr).
* In record alignment syntax ("[max:min]") if the minimum value
was greater than the maximum value, the code wasn't properly
swapping the values. Corrected this.
* In VAR section, a dcl of the form "p:pointer to procedure abc;"
did not calculate the offset of the pointer variable properly.
Corrected this.
* Completely reworked the alignment options in the VAR section.
Now they match the syntax and semantics of the alignment/offset
assignment for records.
* Corrected a problem with constant div and mod operators. They
were not allowing 64-bit or 128-bit operands.
* Corrected a defect in CoerceArrays that was overwriting symbol
table information and causing type checking to fail.
05/15/2002
* Put in checks for decimal, binary, and hexadecimal overflow
when processing numeric literal constants.
* HLA was using the wrong "size" field when determining how
many dwords to push for a constant actual parameter. Corrected
this.
* HLA was computing the size of a constant array element incorrectly.
Corrected this.
05/17/2002
* Corrected a problem concerning the linenumber maintanence
in the #while loop.
* Allowed the use of any 16-byte or 8-byte value where
LWord or QWord parameters are specified.
* Corrected code emission for initialized LWord objects
* Modified HLA to allow hex types to be passed as reference
parameters as long as the formal parameter is the same
size; also allowed any parameter the same size as the
formal parameter to be passed by reference as long as the
formal parameter is a hex type (byte, word, dword, qword,
lword).
* Corrected a defect whereby HLA was using the size of
a reference parameter (four bytes) rather than the size
of the base type to determine if it could pass a dword
object in place of a four-byte object.
* Corrected a type checking defect (int64 == uns64 wasn't
being handled correctly).
05/18/2002
* Added the (desparately needed) #FOR loop to the compile-time
language. Provided three forms: #for( v := s to e ),
#for( v := s downto e ), and #for( v in expr ).
05/20/2002
* Implemented union constants in HLA.
***** Version 1.38 Release Occurred Here ********
06/03/2002
* Implemented a hash table lookup function when dealing
with namespaces to speed up compilations involving
huge namespaces (e.g., Windows and Linux dcls).
06/04/2002
* Radically reworked the symbol table search code to speed
it up a little bit (overall performance gain in HLA was
about 25%).
06/05/2002
* Improved diagnostic message when the user doesn't pass
enough parameters to a macro.
06/21/2002
* Parameter type checking was computing the size of a
formal parameter incorrectly. Corrected this.
* The -dID command line option didn't allow identifiers
that contained digits. Corrected this.
07/07/2002
* Added additional UNICODE support ( u'c' and u"sss" plus
support for UNICODE in the constant expression evaluator).
* Added the use of the VAL keyword to specify that HLA should
use an actual value of a reference parameter rather than
taking the address of that actual parameter (e.g., for
untyped reference parameters).
* Corrected a problem with code emission for floating point
instructions involving integer operands (needed to output size).
***** Version 1.39 Release Occurred Here ********
08/15/2002
* Added support for hash table lookup in namespaces to speed
up the assembler when processing large header files (e.g.,
Windows header files).
09/29/2002
* Corrected a problem with the WHILE statement when using the
hybrid syntax (bad code generation because of illegal generated
labels).
* Added the ability to use the '&' (static address-of) operator
on class procedures, methods, and iterators.
10/20/2002
* Corrected yet another code generation problem due to the
boolean expression "file backup" kludge in the compiler.
* Also fixed the str.eq and str.ne functions that didn't
compute their values properly.
***** Version 1.40 Release Occurred Here ********
11/28/2002
* Corrected a problem with bad offset computations in anonymous
records appearing within anonymous unions.
* Corrected anonymous unions to respect the ALIGN directive
appearing immediately before the anon union.
11/29/2002
* More work getting offsets in anonymous unions and records
to work properly.
12/1/2002
* Took out the "@use eax;" options from the standard library
include files (because if someone specified EAX as a parameter
the code would break).
* Fixed _uns64Size function because it failed with 19 digit values.
***** Version 1.41 Release Occurred Here ********
1/12/2003
* Fixed a minor problem with EmitExtern. In one place in the
code it was using a symbol's TrueName rather than its StaticName
(generally worked fine, but...). Also, redid the EmitExtern call
to pass a symbol table entry rather than a string (now uses the
StaticName field for the string).
* Added code to emit extern/externdef declarations only if there is
a reference to the symbol in the code (because some assemblers, like
FASM, will tell the linker to link in some code containing an extrn
symbol, even if you never reference the symbol).
1/15/2003
* Eliminated a couple of references to the "strings" and "cseg"
sections in the exception handling code that resulted in shaving
8K off the size of the .EXE file.
2/1/2003
* Modified several standard library routines to correct defects.
Allowed the use of EOF (as documented) to terminate numeric
input values. Corrected a bug in fileio.gwd (wasn't saving path
length properly and didn't calculate string overflow properly).
* Incorporated corrections to frewind, fposition, fseek, frseek,
and feoln in the Linux version of these library functions as
as submitted by Mark de Wever.
2/4/2003
* Corrected a defect in @typename. It was not outputting
"pointer to <type>" for pointer types.
2/12/2003
* Fixed a type checking problem. Previously, HLA allowed you to
(incorrectly) call a procedure field of a record via a pointer
variable to that record object.
* Corrected a problem with the LEA( reg, const <constant> ); stmt.
* Noted the following defect: pointer to a type in a namespace, e.g.,
pointer to w.SomeType, fails because lookup isn't aware of the
use of the w namespace. Can't fix this in current design. Work-around
is to create a pointer type within the namespace.
2/18/2003
* Modified VAL operator in actual parameter list to allow the passing
of some constant for a STRING parameter (passed by value). Modified
the LoadIcon prototype in use32.hhf to specify a string name rather
than a dword as the icon name parameter.
2/21/2003
* Corrected a defect with the output of a procedure pointer constant
type (wasn't outputting anything).
***** Version 1.41 Release Occurred Here ********
3/19/2003
* Corrected a problem with the hlatemp environment variable.
Added a "\" to the end of the path if one wasn't supplied in
the environment string.
* Modified hla.exe to create a ????._link_ file with all the linker
command line options because under WinXP the linker wasn't executing
properly (not an HLA problem, but a workaround to a bug in BC++ or
in windows XP).
* Corrected a problem with some code that was (accidentally) taken
out of HLA.FLX - wasn't handling end of _initialize_ and _finalize_
strings properly.
* Corrected a code generation problem with thunks that must have slipped
in during development of v1.42.
**** Releases 1.42..1.46 occurred in quick succession here ****
4/02/2003
* Added support for SSE/SSE2 instruction set (not complete yet!)
4/12/2003
* Corrected a defect in the @offset operator. Supplying an undefined
symbol crashed the assembler with an assert failure.
* HLA had a defect where it would allow the emission of two VMTs
for a class without reporting an error (though MASM would report
a duplicate symbol error). Added code to track the emission of
VMTs and emit an error if the user attempted to emit two copies
of the same VMT.
* Extended strings to allow labels upto 64 characters in length
in the output code.
4/13/2003
* Added ~XXXX reserved word support to the lexer; added "reservedWords"
array to allow the user to redefine reserved words without the "~"
prefix. Added #ID(xxxx) and #RW(xxxx) items to the lexer.
* Added endconst, endval, endtype, endvar, and endlabel reserved words.
* Allowed the use of endlabel, endconst, endval, endtype, endvar,
endstatic, endstorage, and endreadonly reserved words at the end
of one of their declaration sections within an HLA declaration section.
4/15/2003
* Added compile speed statistics to HLAPARSE when operating in verbose
mode
* Fixed another minor problem with @offset (and undefined symbols).
* Added support for Real128 (actually done earlier, but I forgot to
mention it).
* Fixed a problem with #FOR if the condition was false the first
time through the loop.
* Added support to emit WSTRING and WCHAR data to the output data
files from the STATIC and READONLY sections.
4/18/2003
* Corrected a defect when calling an indirect pointer to a procedure
that is a static field of some class.
4/23/2003
* Change macro local symbol construction to include the local symbol's
name to make deciphering errors involving local symbols a little
easier.
* Corrected a defect in the construction of a #terminator local symbol
table (it was not properly zero terminated) that prevented the use
of global (to the macro) symbols within the macro invocation.
4/24/2003
* Added open-ended array declarations to const, value, "?", static,
and readonly declarations.
* Corrected a code generation problem dealing with the emission
of initialized static array objects (when the base type is an
array and you're explicitly extending the number of dimensions
in the declaration).
* Corrected a defect in #for( x in yyy ) -- it wasn't doing a deep
copy on the values.
***** Version 1.47 Release Occurred Here ********
4/28/2003
* Corrected a defect in an indexed call to a class' static procedure.
4/29/2003
* Corrected several minor code generation defects in parameter passing.
4/30/2003
* Added productions for "movd( mmx, reg32 );" and "movd( reg32, mmx );"
instructions.
* Corrected an unexpected case neutrality error when a class' field
name is the same as some local name except for case.
* Discovered bug (but cannot correct) objectName.macroname where
macroname expands to some other method names - crashes the compiler.
5/02/2003
* Fixed a problem with #include. If the file didn't exist, didn't
always report an error.
* Corrected a kludge in the fileclass.hhf header file that broke
while correcting other defects in HLA.
***** Version 1.48 Release Occurred Here ********
5/10/2003
* Allowed the use of the VAL keyword prefix on an actual parameter
if the actual parameter is a dword and is passed by something
other than by value.
5/15/2003
* Modified declarations for w.FillConsoleOutputCharacter and
w.FillConsoleOutputAttribute in kernel32.hhf.
* Changed the definitions for w.STD_INPUT_HANDLE, w.STD_OUTPUT_HANDLE,
and w.STD_ERROR_HANDLE (they were positive values and they needed
to be negative).
5/24/2003
* Modified stdlib routines to use os.win32 and os.linux constants
to determine the OS (used to use definition of _win32 or _linux
for this purpose, but the os.xxx symbols are the proper way to
do this).
* Re-wrote the console library module to make it portable between
Windows and Linux.
5/26/2003
* Added a fileio.flush function to the standard library.
6/2/2003
* Fixed a code generation problem with while/continue.
* Eliminated a lot of extra symbols emitted by HLA for boolean
expressions and control structures that use them.
* Fixed a code generation with EXIT and EXITIF.
6/3/2003
* Corrected a defect in the #text..#endtext block (wasn't entering
VAL object into the symbol table properly).
* Added the ability to supply an array of strings to the @text
function.
***** Version 1.49 Release Occurred Here ********
6/10/2003
* Completely reorganized the windows header files (only a single
w.hhf header file rather than multiple header files). Reorganized
the LINUX header files. Added @fast option to most header files
containing namespaces.
* Eliminated the win32.hhf header file from the Include directory
(placed a copy in only those subdirectories where it was absolutely
needed). The intent is to phase out this header file over time.
* Eliminated several junk files from the Include subdirectory.
* Made several changes to the Iczelion files and other example code
that reflects the changes made to the header files.
* Changed the values in the hla.hhf header file to reflect changes
in the enums.h header file.
6/12/2003
* Corrected a defect in the scanning of string constants that contain
a quote character (doubled-up quote).
* Continued changes to the code generator.
*** versions 1.50..1.54 occurred here ****
8/12/2003
* Corrected a problem with FreeValues that was freeing the wrong
objects when freeing arrays that were fields of a structure.
* Corrected a code generation problem for arrays that were fields
of a structure.
*** Version 1.55 occurred here ***
8/14/2003
* Corrected a defect in static class procedures - was not cleaning
up the symbol table properly before leaving.
8/20/2003
* Fixed a defect in the cs.unionstr2 stdlib procedure.
* Fixed a defect in the cs.removestr2 stdlib procedure.
* Fixed a defect in the date.datePlusMonths stdlib procedure.
* Fixed a defect in the date.daysbetween stdlib procedure.
8/22/2003
* Fixed a big defect in the date.datePlusDays procedure.
9/3/2003
* Corrected a bug in the conv.e80ToStr function.
* Made several additional changes to support the ability to
call HLA Standard Library routines from MASM32.
*** Version 1.56 occurred here ***
10/3/2003
* Corrected a defect in the processing of #ID and #RW.
* Added memory-mapped file support to the standard library
*** Version 1.56 occurred here ***
10/6/2003
* Added support for ex.InPageError and ex.NoMemory in
excepts.hhf. Corrected lack of checking for several
Win32 exception values in hwExcept.masm
10/7/2003
* Corrected the prototype for w.ScreenToClient in
the w.hhf header file.
*** Version 1.57 occurred here ***
10/13/2003
* Corrected a problem with the args module (BuildArgs under Linux)
It was not correctly finding zero terminate strings in the cmdLn
string (ECX value was bad).
10/15/2003
* Corrected a problem with the Julian Date conversion in the date
module.
*** Version 1.58 occurred here ***
10/17/2003
* Modified OutputVMT to emit "externdef" (or comparable) statements
for each of the entries in the VMT. This allows some class to
inherit fields from some other class whose methods and iterators
are not defined in the current source module.
10/21/2003
* Corrected a problem with forward reference pointers that referred
to a class type.
* Corrected a problem with the -I option (for Linux).
* Corrected a couple of places where the EXIT statement emitted
Windows-specific code (even under Linux).
* Corrected a defect in the constant-type conversion functions.
10/25/2003
* Added the "-r:responseFile" command-line option.
* Corrected a defect with "extern" output for VMTs in classes.
*** Version 1.59 was released here ***
10/30/2003
* Fixed #write so that if an error occurs the error message is
written to "MsgOut" rather than to the file to which #write
is writing data.
* Modified the "-v" option to send all output to the standard
output (rather than the default of stderr).
* Fixed a problem with the parsing of response file lines to
eliminate leading and trailing whitespace from each response
line.
* Eliminated a cascading error that occurs when you have an
undefined object in a #print or #write statement.
* Modified #print error messages to include #write in the
error messages (as #write uses the same code).
11/18/2003
* Added the ability to print array and record constants with #print.
11/24/2003
* Corrected a problem in args.hla stdlib code. Wasn't handling
'"' correctly on the command line.
11/25/2003
* Corrected the definition for w.INFINITE in the w.hhf file.
* Corrected a defect in FreeValue affecting unions containing array
constants.
* Corrected defects in the str.ne and str.eq functions.
12/1/2003
* Added "::" label declarations to create global labels (e.g.,
lbl:: ).
12/3/2003
* Added support for FASM's new ALIGN directive.
*** Version 1.60 was released here ***
12/29/2003
* Modified all the stdlib .hhf files to avoid a small error
due to the use of FLEX (added a ';' after the initial #if( @defined(-))
statement).
1/5/2004
* Slight improvement to code generation for passing a local variable
or parameter by reference to some other procedure.
1/14/2003
* Fixed a problem with the use of the '&' static address operator
in record constants and when outputting static string constants.
1/23/2004
* Fixed a defect in the str.ieq function.
1/25/2004
* Fixed a defect dealing with the use of the VAL parameter override
prefix and string/dword actual parameters.
2/1/2004
* Fixed a #include header file problem as required by Linux builds.
2/2/2004
* Added fileio.exists to the HLA Standard Library.
* Corrected the spelling of several SSE instructions.
*** Version 1.61 was released here ***
3/3/2004
* Modified #include and #includeonce so that they would look for
an include file in the same directory as the .HLA file if the
include file was not found (this is done *before* looking in
the hlainc path).
* Added lots of code to support the freeHLA project.
* Modified "usage" screen in HLA.C to display information
appropriate to build.
3/4/2004
* Fixed a minor code generator bug for FASM output (was emitting
"XLAT", FASM wants "XLATB"). Also tweaked the code output to
stop putting out the "codeAlign" macro (as FASM v1.51 and later
supports a true align directive).
* Modified HLA.C to run FASM/POLINK/PORC for the "freeHLA"
version of the system.
*** Version 1.63 was released here ***
5/20/2004
* Fixed a problem with several of the SIMD instructions that didn't allow
register operands for both operands.
*** Versions 1.64-1.65 were released here ***
6/18/2004
* Added code to use the path to HLAPARSE.EXE as the default
root directories for the hlalib and hlainc environment variables
if these environment variables are undefined.
* Modified HLA to allow the use of @here as conditional jump
operands.
* Added an @external option to the VMT declaration to allow
external access to the VMT for a class.
* Corrected a defect that prevented HLA from recognizing
nested records when one of the nested fields was an
array of records.
*** Version 1.66 was released here ***
6/18/2004
* Corrected a defect in str.substr that generated an
exception if the destination string was at least as
long as the source string (only needs to be as long
as the substring will be).
6/24/2004
* Added "-x:filename" option to Windows version of HLA.EXE
* Modified HLA under Linux to produce .o files and treat
.a files as library files.
*** Version 1.67 was released here ***
7/3/2004
* Corrected a problem with the "&" (address-of) operator
not recognizing symbols defined in the forward symbol
list (i.e., declared in a LABEL section).
7/6/2004
* Added arg.a_v, arg.a_cmdLn, arg.destroy, and arg.args to
the HLA standard library.
* Corrected a defect in arg.delete (wasn't freeing storage).
* Fixed an error in the date.toString macro in the datetime.hhf
header file.
7/10/2004
* Redid the fileio.eof function for Windows in yet another
attempt to get it right.
7/12/2004
* Fixed a problem with class methods and iterators emitting
an "extrn" directive in the extpub file, even though they
were defined in the current source file.
7/20/2004
* Modified code generator for FASM to emit "xlatb" rather
that "xlat" for the xlat instruction.
7/22/2004
* Corrected a defect dealing with constant/val objects appearing
in records. They are counted as a field and in record constants
the field count didn't match.
7/24/2004
* Corrected the definition of "nl" in stdio.hhf to use #$a for
Linux and #$d #$a for Windows
* Fixed a bug that crashed HLA if you had a comma without a last
parameter in a macro parameter list.
*** Version 1.68 was released here ***
8/16/2004
* Corrected a defect that crashed HLA when using a second
occurrence of a namespace with the @fast option.
* Rewrote the memory allocation routines for both Linux
and Windows in the HLA stdlib.
8/17/2004
* Added several new exceptions to the system (dealing with
memory management).
* Added several new memory management routines, including
mem.zalloc, mem.stat, mem.newref, mem.getref, str.newref,
and str.getref.
* Changed the behavior of mem.isInHeap. It now returns NULL
or the pointer to the start of the block in the heap rather
than just true/false.
* Modified the str.talloc macro so it could be used with
instruction composition.
*** Version 1.69 was released here ***
8/18/2004
* Fixed bugs in str.free and str.realloc.
* strToFlt wasn't preserving EAX, fixed this.
8/30/2004
* Added "FORWARD" declaration option to statement labels.
* Fixed the use of "hlatmp" environment variable by HLAPARSE.
9/14/2004
* Corrected a defect in mem.alloc (wasn't preserving EDX and ECX
across a call to w.VirtualAlloc).
* Modified HLA.C to use the same environment variable for the
HLA temporary directory as HLAPARSE.C (hlatmp).
* Cleaned up some linux installation documentation.
*** Version 1.70 was released here ***
9/20/2004
* Corrected a syntax error in the arrays.hhf header file
(extra parentheses occuring in the test for floating-point
types)
9/24/2004
* Fixed a problem with the indexing into REAL80 arrays in
the arrays.hla module in the standard library.
9/26/2004
* Fixed a problem with the mem.isInHeap function.
10/18/2004
* Changed FASM output to use conditional assembly to
"protect" extrn symbols in case the symbols weren't
accessed in the file.
*** Version 1.71 was released here ***
10/21/2004
* Modified symbol table initialization to properly
include REAL80 type in the search.
* Modified several of the zstring routines in the
Standard Library to correct problems with access
bytes beyond the end of a source string (when
doing dword operations).
* Fixed several code generation bugs in movdq2q,
movss, movapd, movaps, movdqa, movdqu, movupd,
movups, movntdq, movntpd, movntps, cvtpd2pi, movnti,
and most of the other SSE/2 instructions.
* Added GLOBAL and GLOBAL2 macros to FASM output to
correct some duplicate symbol problems.
*** Version 1.72 was released here ***
12/06/2004
* Corrected problems in error reporting for Linux versions
of fileio.{write, puts, putssize, putc, and putcsize}
12/07/2004
* Removed a couple of debug print statements from the lexer
that didn't belong in the production code.
12/08/2004
* Modified the list.itemInList iterator to preserve ESI across
the FOREACH loop.
* Corrected several NULL pointer problems in the compiler, particularly
in sections dealing with an unexpected number of parameters.
* Removed the "@fast" option from the str namespace because this
namespace gets manipulated in several header files (incompatible
with @fast operation).
* Modified the fileio.{putc, putcsize, puts, putssize, and write} routines
to include additional error checking (under Windows and Linux)
*** Version 1.73 was released here ***
01/10/2005
* Corrected a problem in parameter parsing. Added a call to SavePosn
to fix problem with function calls appearing in ELSEIF generating
bad code.
01/11/2005
* Corrected a problem with HLA code generation for STDARG (and CDECL)
parameters (good old SavePosn bug).
* Fixed a problem with the Linux version of openNew (added o_trunc
option to clean up an existing file).
01/15/2005
* Replaced all occurrences of "malloc" with "malloc2" and eliminated
redundant asserts.
* Corrected a defect that allocated zero bytes when processing
a macros variable parameter list (allocation of zero bytes
returns NULL, which messed up the code).
* Replaced all occurrences of "free" with "free2"
* Modified malloc2 and free2 to track heap usage, and only do an
actual free operation if the object passed to free2 is truly
on the heap.
* Cleaned up code that back-tracked the output file (for things
like handling boolean expressions and parameter lists). Converted
a ton of "cut&paste" code to subroutine calls so there was only
one point in the code where the backtracking needs to be maintained.
* Modified HLA.C "usage" function to request user input in the middle
of the output if the output is headed to the standard error device.
(To keep the number of lines down to a small screenful.)
* Modified the pushw and pushd instructions to emit "push word ..."
and "push dword ..." for constants when emitting FASM code.
*** Version 1.74 was released here ***
01/25/2005
* Fixed a defect in the computation of the size of an anonymous record
inside an anonymous union, inside an actual record (wasn't computing
the record size properly).
03/01/2005
* Fixed a defect in the case insensitive string comparisons routines
(wrote a new stricmp routine for the HLA stdlib).
03/23/2005
* Corrected a problem with fileio.putl. It was not preserving EBX.
* Modified rchpos2 so that it properly backed up one character
before the index supplied before beginning the scan.
3/24/2005
* Fixed a problem with intmul (didn't allow 32-bit constant operands).
* Fixed a problem with overrides in inherited records (didn't work,
wasn't properly inheriting the fields from the ancestor record).
* Cleaned up the AddFwdPtr function.
* Corrected the fact that PUSHD didn't allow pointer constants (&lbl).
4/24/2005
* Fixed a problem with the fileio.truncate routine under Linux
(had to swap parameters in a linux.lseek call).
*** Version 1.76 was released here ***
5/7/2005
* Fixed a bug that allowed any size except byte objects (e.g., qword)
in a memory-to-memory MOV instruction.
7/31/2005
* Fixed a bug in the Linux version of the BuildArgv routines (args
module) that caused a crash because ESI was not initialized properly.
9/30/2005
* Made a quick correction to the code that outputs CDECL and STDCALL
parameters to the ASM file to handle a recurring problem with that code.
*** Version 1.77 was released here ***
10/8/2005
* Added @sort compile-time function.
* Removed ';' after several #if statements in the HLA stdlib header files
* Added HLA.lookupTable macro to the HLA.HHF header file
* Added QSDemo.hla program to examples directory
* Modified the switch/endswitch macro to use the new @sort function.
10/9/2005
* Modified SWITCH macro to allow use of bubble sort (for large
case statements that have [nearly] sorted cases).
* Moved lookupTable macro from HLA to ARRAYs module.
*** Version 1.78 was released here ***
10/31/2005
* Modified code generation for method calls to avoid an instruction
of the form "lea esi, [esi+0]" whenever invoking a method indirectly
via the ESI register.
* Fixed a problem with accessing static fields of a class that themselves
have fields (e.g., static record objects within a class).
* Corrected a problem with the w.getWindowText and GetDlgItemText
macros in w.hhf.
11/1/2005
* Fixed a memory allocation bug associated with PUSHD( &symbol );
* Added missing VMTs to the font.hla example in the WPA folder.
*** Version 1.79 was released here ***
11/2/2005
* Fixed a problem with pat.oneOrMorePat in patterns.hhf
* Fixed a problem with tut23.hla in the Iczelion tutorials.
* Fixed a problem with the stdout.put macro in the stdlib.
11/07/2005
* Tweaked @ptype to return the exact ptype of an object
* Added @baseptype function to return the base type of an object
* Tweaked @typename to produce better output.
11/09/2005
* Fixed rawLookup in symbol.c to properly search for field names
of a class, record, or union within a Namespace (doesn't use only
the hash of the global name). Previously, all identical field names
hashed to the same symbol table entry rather than the one specific
to the record, class, or union.
11/10/2005
* Added mem.realloc2 to the HLA Standard Library
11/16/2005
* Corrected a field in the w.hhf header file INPUT_RECORD type
declaration (EventType must be a dword).
11/17/2005
* Created Windows versions of readkey, testkey, and peekKey.
1/18/3006-
* Fixed a bug in conv.dToStr
* Modified str.strRec fields to be dword rather than int32.
1/19/2006
* Eliminated semicolons after #includeonce in patterns.hhf,
dtClass.hhf, and arrays.hhf
*** Version 1.80 was released here ***
3/7/2006
* Major rewrite of the @ptype, @typename, and @baseptype functions.
* Cleaned up stdout.put/fileio.put macro to reflect changes to @ptype.
* Added @basetype function.
* Fixed several bugs dealing with coerced types in stdout.put and
fileio.put.
* Modified @name to return an empty string for an invalid name object
(previously, this generated an error).
* Create the hla._put_ and hla.put macros to support user-written
put macros
* Rewrote stdout.put and fileio.put macros using the new hla.XXX macros.
3/8/2006
* Rewrote all the str.catXXXX routines to make the dest parameter
the first parameter (for use by str.put)
* Rewrote the str.put macro. Fixed the fact that it did an
append rather than a store.
* Added the str.put2 macro (appends)
* Fixed several bugs in various str.catXXX routines
* Added str.catu128, catu128Size, cati128, cati128Size, catl, and
catlSize routines to the standard library.
* Added str.catr32pad, catr64pad, and catr80pad to the stdlib.
Modified existing catr32, catr64, and catr80 functions to use
a space as the default padding character.
* Modified tons of example code to compile with the new changes.
*** Version 1.81 was released here ***
4/11/2006
* Corrected code generation for pusha and popa.
4/29/2006-4/30/2006
* Corrected code generation for pushw (signed constants outside
the range 0..$ffff).
* Modified the grammar to reject ESP as an index register.
* Corrected a defect in the type checking associated with sldt.
* Corrected a defect in the type checking associated with lsl.
* Swapped the operands of the cmpXXss, cmpXXpd, cmpXXps, cmpss,
cmppd, and cmpps instructions in order to match the syntax of
other HLA compare instructions.
* Added type checking to cmpXXss, cmpXXpd, and cmpXXps.
* Cleaned up grammar for the following instructions:
movq, pshufw, cmpXXss, cmpXXpd, cmpXXps, cmpps, cmppd, cmpss
* Modified the following to support anonymous memory addresses:
fbst, fbld, arpl, invlpg, lar, lds, les, lfs, lgs, lss,
lgdt, lidt, sgdt, sidt, lldt, sldt, lsl, ltreg, streg,
verr, verw, cmovXX, cmpxchg8b, fstcw
* Added support for the following instructions (including manually
encoding the opcodes):
fldenv, fstenv, fnstenv, fsave, fnsave, frstor, pshufd,
shufpd, shufps, psrldq, fisttp
* Manually encoded the following instructions to support MASM6:
cmpXXpd, cmpXXps, cmpss, cmppd, cmpps, psllw, pslld, psllq,
psrlw, psrld, psrlq, psraw, psrad
* Added standard support for the following instructions:
smsw, lmsw
5/1/2006-5/6/2006
* Complete refactoring of the AnonMem and IndexAdrsMode productions
* Generalized the addressing modes.
* Refactored internal representation of registers.
* Improved handling of instruction composition for MMX, XXM, and
segment registers.
* Corrected several minor bugs as encountered.
* Increased the maximum allowable stack size (link option).
* Modified CombineAddresses to swap the index and base registers
if the index register is ESP, the scale is 1, and the base
register is not ESP.
* Added support for LSL( reg32, reg32 );
5/7/2006
* Rearranged register translation table to match register encodings
* Worked on generic instructoin test program
5/9/2006
* Fixed a bug in the str.put macro (removed extra push).
* Modified HLA to emit the constant of "intmul( const, mem, reg);"
as a signed integer string rather than unsigned (caused overflow
with 16-bit operands if emitted as unsigned).
5/10/2006
* Modified code generator to not put out "*1" after an index register
if the person didn't specify this in the HLA source code. This was
done because MASM takes liberties with base/index register definitions
if you don't explicitly provide a scale and this made testing HLA
output difficult.
* Reversed the operands on the xadd instruction (they were backwards)
5/11/2006
* Fixed several $<returns>$ defects (instruction composition) appearing
in the code.
* Added a kludge to convert 32-bit register operands for the LSL
instruction to 16-bit registers when compiling output for FASM.
5/16/2006
* Modified LSL instruction to emit object code directly because of
problems with MASM and FASM.
* Modified RET to allow usage without parenthesis (e.g., ret; ).
* Modified conditional jump instructions to allow parentheses around
their operands (optionally).
5/17/2006
* Modified PUSHW and PUSHD to emit pushw and pushd under FASM.
* Cleaned up code for CALL and JMP instructions.
* Fixed a code generation bug in the MMX instructions with a 32-bit memory
operand.
5/18/2006
* Added support for (or improved support for) addpd, addps, addsd,
addss, addsubpd, addsubps, andpd, andps, andnpd, andnps, clflush,
prefetcht0, prefetcht1, prefetcht2, and prefetchnta. This included
direct encoding to support MASM6.
* Fixed CMPSD so it works for SSE as well as strings. Eliminated old
cmpsdp hack (which wasn't really used).
* Binary encoded comisd and comiss for MASM6.
* Implemented (and encoded) the following conversions:
cvtdq2pd, cvtdq2ps, cvtpd2dq, cvtpd2pi, cvtpd2ps, cvtpi2pd,
cvtpi2ps, cvtps2dq, cvtps2pd, cvtps2pi, cvtsd2si, cvtsd2ss,
cvtsi2sd, cvtsi2ss, cvtss2sd, cvtss2si, cvttpd2pi, cvttpd2dq,
cvttps2dq, cvttps2pi, cvttsd2si, cvttss2si
* Implemented and binary encoded divss, divsd, divps, and divpd.
* Implemented and binary encoded haddpd, haddps, hsubpd, hsubps, lddqu,
monitor, pause, syscall, sysenter, sysexit, sysreturn, maskmovdqu,
movhlps, movlhps, xorpd, ucomisd, sqrtsd, subsd, unpckhpd,
and unpcklpd.
* Added rsqrtps reserved word to lexer.
* Corrected LAR syntax to correspond to Intel's. Fixed LSL to match LAR.
* Fixed MOVD instruction.
5/19/2006
* Added support for the cmpXXsd instructions (including binary encoding)
* Fixed problems with MOVD and MOVQ instructions.
* Fixed minps.
5/20/2006
* Tracked down a memory allocation bug in boolean expressions.
* Cleaned up a lot of bad pointer references in the code.
* Fixed JMP instruction to allow all the same targets as CALL (e.g.,
made it possible to jump to a procedure declared in a namespace).
* Corrected a defect with the code generation for 16-byte records,
classes, and other 16-byte data objects.
* Corrected a bad pointer reference in the classification routines.
5/21/2006-5/26/2006
* Fixed numerous encoding problems in the new code based on the
results from the HLA test program.
5/26/2006
* Fixed @global:identifier to allow dotted names.
6/1/2006
* Optimized the xxxx.put macro to speed it up considerably.
6/10/2006
* Fixed environment variable stuff under Windows to search for
hlalib.lib and include (correctly) if the HLAINC and HLALIB
variables are not specified.
* Fixed a couple of problems with the hlalibsrc/strings/makefile.linux
makefile.
* Took HLA off of Visual Source Safe and placed it under Subversion
source code control.
6/11/2006
* Modified output to not emit a displacement value of zero in
memory addressing modes because GAS will actually emit a zero
displacement byte if you do this.
6/20/2006
* Modified HLA to use "dword ptr" rather than "fword ptr" when emitting
lgdt instructions, and the like, to GAS.
* For various floating-point instructions output to GAS, deleted the
XXXX ptr operand before memory operands.
*** Version 1.82 was released here ***
6/26/2006
* Corrected a bug in the #FOR loop. It was not properly clearing the
upper 96 bits of the loop control variable.
*** Version 1.83 was released here ***
6/28/2006
* Corrected a defect in the code generation of the "[reg*scale+disp]"
addressing mode.
*** Version 1.84 was released here ***
7/1/2006
* Corrected a but in the be_reg code that handled boolean expressions
consisting of a single register emitted by instruction composition.
*** Version 1.85 was released here ***
7/4/2006
* Corrected a defect in the fileio.exists function. It needed to be
opened with sharing enabled for read/write.
7/10/2006
* Fixed a defect in the HLA.PUT macro (wasn't reporting type mismatch
errors properly).
7/12/2006
* Rewrote str.a_catz (it was never actually written before, it was
just the code for str.catz).
7/13/2006
* Added instrumention to malloc/free/realloc to track down memory-related
bugs in the HLA compiler.
* Corrected a bug where HLA was freeing some storage that was never
allocated when processing register operands.
7/14/2006
* Corrected an issue with semicolons following #endmacro (removed the
test for this and eliminated a "pushBackStr" call that wound up pushing
a lot of extra junk onto the input stream.
* Eliminated an extra #endif from the end of the arrays.hhf include file.
* Corrected some memory allocation related bugs.
7/15/2006
* Completely rewrote the way macro parameters are handled.
* Rewrote the way macros are recorded.
* Eliminated several free2 calls on static storage that was not allocated
via malloc2.
*** Version 1.86 was released here ***
1/20/2007
* Added @system function.
* Added @env function.
* Modified -Dxxx command-line parameter to support the syntax
-Dxxxx=yyyy to set a symbol to a string value.
* Added the -lib:<path> command-line parameter and fixed a problem
with the -i:<path> command-line parameter
1/21/2007
* Fixed a type checking problem with the @ptype function.
* Added support for ZStrings throughout the code.
* Fixed several bugs in the w.hhf header file.
1/27/2007
* Fixed a problem with error reporting. Errors occuring in macros
that were defined in include files weren't properly displaying
the filename when unstacking the macro stack.
* Modified assembler to handle "push( edx:eax );" and "push( dx:ax );"
(which emit two push instructions, each).
* Added "string <id>" option to macro parameter list.
* Modified movsx and movzx to return destination register as the
@returns value rather than the source operand.
1/28/2007
* Added support for "mov( mem64, edx:eax );", "mov( edx:eax, mem64);", and
"mov( constant64, edx:eax );" pseudo-instructions (these emit two mov
instructions, each).
1/29/2007
* Improved code generation for parameter passing in the case where
an actual parameter is a register passed as a parameter from the
another procedure.
* Added the ability to pass edx:eax and dx:ax as parameters to functions.
2/6/2007
* Added the ability to specify string constants inside a cset constant
(to streamline cset constant syntax).
2/12/2007
* Added the -level=x command-line parameter to support different language
levels (high, medium, low, and very low).
2/25/2007
* Added #regex macros.
* Added tons of pattern matching functions for use in #regex macros.
* Added @match and @match2 function to support pattern matching with
#regex macros.
* Added #string..#endstring block.
* Added #match..#endmatch block.
*** Version 1.87 was released here ***
2/27/2007
* Corrected stricmp/strnicmp under Linux (replaced code with call
to stdlib strcasecmp and strncasecmp functions).
* Corrected problems with @matchString and @matchiString functions
in the regular expression interpreter.
*** Version 1.88 was released here ***
3/1/2007
* Eliminated #:id feature inside #asm..#endasm block (#asm is going
away soon, too).
3/2/2007
* Cleaned up USAGE message output for HLAPARSE.
* Modified HLAPARSE to default to -level=high.
* Fixed a problem with the -p:path command-line option.
* Added -LICENSE command line option (and text)
* Corrected a problem with the -level command-line option (HLA.EXE)
3/5/2007
* Fixed a code generation for parameters when passing the address of
a static object in a register.
* Fixed a code generation bug that caused a type mismatch when emitting
an array of primitive types (e.g., bytes).
3/6/2007
* Modified HLAPARSE so that it no longer automatically writes a .link
file on each compile (will create the file if it does not exist or
if the -@@ command-line option is specified).
* Added the -@@ command line option to HLA and HLAPARSE to force the
creation of a new .link file, even if one already exists.
*** Version 1.89 was (sort of) released here ***
3/13/2007
* Corrected OutValue so that it would properly emit TBYTE array constants.
3/16/2007
* Fixed a problem with TASM code output. Wasn't generating code to push
static addresses properly.
* Changed "flat" to "FLAT" in TASM skeletal output code to prevent '/ml'
option from generating errors.
*** Version 1.89 was officially released here ***
3/23/2007
* Added support for segment prefixes
3/24/2007
* Cleaned up compiler code to reduce the amount of conditional
assembly (used run-time variables instead), so as to better
support using the internal FASM under Windows.
* Fixed a FASM code generation bug that occured when using constants
with floating-point instructions (e.g., fmul(2.0)).
3/27/2007
* Fixed definition of CanBeType in enums.h that broke when new types
(e.g., zstring) were added.
3/28/2007
* Fixed a problem with the initialization of array element types
for VAL objects.
* Modified FASM code generation for Linux to output correct section
headers.
3/31/2007
* Finished off use of Internal FASM version to generate object files
directly.
* Added -co, -cf, -cm, -ct, and -cg command-line parameters.
*** Version 1.90 was released here ***
4/4/2007
* Modified doArrayList to allow an extra comma at the end of an
array constant (cleans up a lot of array initialization using
#for loops).
* Fixed an assertion when MakeCompat was called with CSET operands.
4/6/2007
* Added code to force a "/" or "\" at the end if a temporary
path specified on the HLAPARSE command line (so HLAPARSE no longer
requires the trailing directory suffix character).
* Cleaned up some directory separator code in HLA.EXE.
4/7/2007
* Fixed a defect in the path generation for the -obj: command-line
parameter (didn't work right when using the internal version of
FASM).
* Added the hlalink environment variable.
*** Version 1.91 was released here ***
4/22/2007
* Corrected several defects related to #xx character
constants in HLA.FLX (wasn't indexing into yytext properly).
* Fixed a filename problem with HLA.C that prevented it from passing
object file names to the linker under Linux.
*** Version 1.92 was released here ***
4/27/2007
* Fixed a code generation problem with hybrid parameters (wasn't
emitting parameter code in the proper place -- wasn't properly
restoring the start of each line after processing the hybrid
parameter).
* Fixed a problem with the HLAPARSE -P and -OBJ parameters (couldn't
handle command-line parameters with spaces in the paths).
4/28/2007
* Added support for wildcard characters in filenames (windows only,
Linux has always supported this).
*** Version 1.92 was released here ***
5/2/2007
* Fixed a problem with the default ".hla" extension in Windows (new wildcard
code was not defaulting to ".hla" if no suffix was present).
*** Version 1.93 was released here ***
5/5/2007
* Fixed some problems with the HLAPARSE -OBJ command-line parameter
* Fixed some problems with the HLAPARSE -P command-line parameter.
5/6/2007
* Tracked down several bugs in hFASM (internal FASM version).
* Refactored some hFASM code.
5/7/2007
* Corrected a defect in hFASM (at "InstructionAssembled" label -- bad code
appeared there).
* Modified the output of the public, external, and equ outputs in FASM
in order to reduce the number of sections in the OBJ file.
5/8/2007
* Tracked down several additional details with the "InstructionAssembled"
problem.
* Fixed a problem with the HLA wildcard expansion -- passed along filenames
that FindFirstFile couldn't expand properly (e.g., .lib files that
don't appear in the current directory).
* Fixed a problem with conditional jump ranges in hFASM.
* Converted a jcxz instruction to jeczx in the a_cat standard library
routine.
*** Version 1.94 was released here ***
5/9/2007
* Fixed a problem with "code" section in internal FASM under Linux.
*** Version 1.94 for Linux was re-released here ***
5/11/2007
* Fixed several FASM code generation problems (sections).
* Added statement composition capabilities to many memory operands.
*** Version 1.95 was released here ***
5/18/2007
* Fixed several problems related to passing paths around on HLA
and HLAPARSE command lines.
* Fixed some problems associated with internal FASM and the
production of OBJ files rather than ASM files.
* Added the ability to specify full pathnames as HLA filenames.
*** Version 1.96 was released here ***
5/23/2007
* Corrected a defect in the HLAPARSE outPath variable (was freeing
storage that was not malloc'd).
7/25/2007
* Added HLAstdlibVersion constant to hla.hhf
7/26/2007
* Corrected a defect in the "classes" table used by setClassification.
Brought it into sync with the SymClass data type in enums.h
* Modified setClassification to properly return the symbol classification
of a dotted name sequence.
* Modified the CoercedMemory production in hlaparse.bsn to handle
several additional address expressions involving record/union/class
fields and indexed expressions.
* Added "NULL" as a valid constant value for the classify production.
7/27/2007
* Added support for "@-functions" to the classify code. This allows
testing of @pointer, @byte, @word, etc., in compile-time functions
like @isconst and so on.
7/29/2007
* Modified PrintString in output.c so that it output string literals
with a maximum of 64 characters per statement (MASM was complaining
about statements being too long when outputing 256 character
strings).
8/9/2007
* Modified PrintString in output.c to handle the case where a
64-character string was followed by a non-graphical char
(which resulted in a MASM syntax error when HLA emitted an empty string).
8/14/2007
* Fixed an indexing problem with the @uppercase and @lowercase CTL functions.
8/16/2007
* Fixed a default path problem with header files including other header files
when the header files appear in a directory other than the cwd.
* Fixed a problem with nested coerced memory operands appearing in
compile-time expressions.
* Fixed a bad pointer problem that occured when reassigning data to an
array VAL object.
* Added "-code1st" command-line option and code to support it (to put the
machine instructions before the read-only data in the source output file).
8/30/2007
* Improved code generation for certain byte parameters passed to procedures.
If the parameter being passed was a byte parameter in an enclosing
procedure, the code now just pushes a dword rather than going through
the gymnastics to push a byte.
* Did the same thing for word parameters being passed as parameters to
another procedure.
8/31/2007
* Corrected a code generation problem when passing a tbyte constant
as a value parameter (was only pushing 4 bytes previously).
9/10/2007
* Added support for classes and namespaces to @localsyms.
*** Version 1.97 was released here ***
9/17/2007
* Added support for enums to @localsyms.
9/19/2007
* Corrected a defect in the classify function that prevented HLA
from recognizing -1 or !1 as constant expressions.
9/21/2007
* Modified "PrintString" in output.c to use unsigned chars rather
than (signed) chars, to avoid sign extension of character values
greater than $7f.
9/24/2007
* Modified how _argv is saved under Linux.
9/29/2007
* Fixed a problem with processing record constants for objects that
were really unions.
*** Version 1.98 was released here ***
10/28/2007
* Corrected a problem with the output of 64-bit values to a
GAS assembly language file.
* Corrected a segmentation fault occuring in strcpylc when
it reached the end of a page.
* Corrected a type checking problem with enum values.
*** Version 1.99 was released here ***
1/10/2008
* Fixed a problem with strcpylc accessing data beyond a
page boundary.
*/