From 5fcbae5267eddb735e30924f8a35f2c6576bae72 Mon Sep 17 00:00:00 2001 From: anon Date: Mon, 22 Jul 2024 19:39:19 +0200 Subject: [PATCH] Added 'C_C++/flex/modifications.txt' --- C_C++/flex/modifications.txt | 2363 ++++++++++++++++++++++++++++++++++ 1 file changed, 2363 insertions(+) create mode 100644 C_C++/flex/modifications.txt diff --git a/C_C++/flex/modifications.txt b/C_C++/flex/modifications.txt new file mode 100644 index 0000000..e7c8731 --- /dev/null +++ b/C_C++/flex/modifications.txt @@ -0,0 +1,2363 @@ +/* + +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 " 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 ;" 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 " 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 ); 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 $$ 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: command-line parameter and fixed a problem + with the -i: 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 " 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. + + +*/ +