The following list, extracted from the A-Shell Development notes, shows all compiler edits, including fixes and minor changes. Missing descriptions indicate that the edit in question was a purely internal matter that did not affect the operation of A-Shell.
Compiler |
A-Shell |
Release |
Description |
1043 |
1756.0 |
20 Feb 2024 |
Add new ASB control statement EXITPROGRAM. |
1042 |
1752.5 |
13 Dec 2023 |
1. Extend the 1041 edit to treat all case variations of a variable named DATN (datn, DatN, etc.) in a MAP statement, whether scalar or array, as entirely disabling recognition of the double-arctangent function—i.e. reverting entirely to the behavior before that function was introduced. 2. Compiler now complains about INPUT statements targeting an array or a gridmap that are missing the CSV token. |
1041 |
1752.2 |
04 Dec 2023 |
DATN is no longer treated as a keyword (double arctangent function) if it appears in a MAP statement first. |
1040 |
1751.4 |
04 Nov 2023 |
Internal cleanup of potential 64 bit overflow issues. |
1039 |
|
|
|
1038 |
1750.3 |
08 Oct 2023 |
Eliminate bogus runtime error 74 when passing a collection via DYNFUNC. |
1037 |
1742.0 |
25 Sept 2023 |
PRIVATE blocks in a main program module were not getting initialized by the first function call. This would have been a problem if the block contained DIMX statements or actual code that needed to be executed. |
1036 |
1742.0 |
25 Sept 2023 |
WRITECD ARY() statement now supports numeric array types as well as gridmaps. |
1035 |
|
|
|
1034 |
1739.4 |
15 Aug 2023 |
Add new convenience operator to assign elements to an array in a single operation from a CSV-formatted string: |
1033 |
1735.2 |
02 Aug 2023 |
Transclude fix: Eliminate spurious errors when the TCF spec in a ++include statement contained a device prefix. |
1032 |
1735.2 |
02 Aug 2023 |
Transclude fix: Private variables in transcluded modules weren't getting initialized. |
1031 |
1735.2 |
28 July 2023 |
Transclude fix: Eliminate spurious errors when the TCF spec in a ++include statement contained a device prefix. |
1030 |
1735.1 |
27 July 2023 |
Transclude fixes: • Failure to specify a TCF section in the ++include line was causing the operation to ignore the TCF file contents. • PRIVATE module variables now work as expected in transcluded modules. Previously, the compiler was complaining of duplicate variables. |
1029 |
1735.0 |
23 July 2023 |
Transclude fix: ++include with [p,pn] was getting confused with the new transclude syntax. |
1028 |
1735.0 |
23 July 2023 |
Correct problem with spurious errors caused by appearance of keywords in DEFXCALL parameter lists. Problem was introduced in edit 1020. |
1027 |
1734.4 |
07 July 2023 |
Transclude statement was treating spaces after the second comma (separating the TCF spec from the section name) as significant, almost certainly causing it to abort with a section not found error. |
1026 |
1733.0.3 |
19 June 2023 |
Provide support for storing a label reference in a numeric variable and then using it as the target of a GOTO, CALL or GOSUB statement. |
1025 |
1732.0.4 |
12 June 2023 |
Add support for "transclude" variation of ++include directives. |
1024 |
1731.2 |
06 June 2023 |
Correct another variation of the bug partially fixed in edit 1023. |
1023 |
1731.1 |
06 June 2023 |
Correct an issue introduced in compiler edit 1022 resulting in bogus compiler errors for certain combinations of ordered map parameter passing. |
1022 |
1731.0.1 |
29 May 2023 |
Compiler now complains about mismatched collection arrays passed by reference to functions. |
1021 |
1730.5.3 |
23 May 2023 |
++IFDEF directive now recognizes DEFXCALL. |
1020 |
1730.5.2 |
23 May 2023 |
DEFXCALL now allows subroutine names that are also keywords—e.g. XCALL AMOS. Standard include file ashinc:xcall.def updated accordingly. |
1019 |
1728.2 |
25 Mar 2023 |
RUN header was getting corrupted if program had more than 8K of DATA statement values and a minimum run version requirement. VERSYS would report the bad header but the runtime system would most likely crash if program was run. |
1018 |
1728.1.2 |
25 Mar 2023 |
Remove a spurious syntax error when the READ'ONLY option was included on a file opened in RANDOM mode. |
1017 |
1728.1.1 |
25 Mar 2023 |
Compiler edit 1017: ORDMAPM assignments were not being compiled correctly, resulting in null values being assigned. Introduced in compiler edit 1016. |
1016 |
|
|
|
1015 |
1727.0.2 |
11 Mar 2023 |
An ordered map copy of the form $map1() = $map2() may have triggered a spurious syntax error in the subsequent statement. |
1014 |
1725.0.1 |
14 Feb 2023 |
Add support for trigonometric DATN function. |
1013 |
1724.0.4 |
06 Feb 2023 |
DIMX arrays of type B, F and I may now be passed by reference to functions. |
1012 |
1724.0.3 |
06 Feb 2023 |
DIMX arrays of type S may now be passed by reference to functions. Previously, only type X was allowed. |
1011 |
1724.0.2 |
06 Feb 2023 |
Resolve a conflict between the GLOBAL_BEGIN pragma and dynamic structure compilation that was causing spurious compiler errors. |
1010 |
1724.0.1 |
06 Feb 2023 |
Minor internal adjustments to improve code portability and robustness. |
1009 |
1721.7.1 |
09 Nov 2022 |
DATA statements longer than 512 bytes were overflowing an internal statement buffer without triggering a proper compiler error, in some cases causing the compiler to crash. The limit has been increased to 1024. However, note that multi-term DATA statements can always be broken up into multiple DATA statements; the limit will therefore only be an obstacle in cases where the length of a single DATA term exceeds it. |
1008 |
1721.3.1 |
05 Oct 2022 |
The embedded DEFSTRUCT index wasn't being terminated properly, leading to DEFSTRUCT/DYNSTRUCT binding errors under certain sequences. |
1007 |
1721.1 |
28 Sept 2022 |
DEFSTRUCT members with initial values or overlays were not being compiled correctly, typically either leading to bogus compiler error messages or invalid syntax or out of memory errors when using DIMX to create an array of structure elements. |
1006 |
1721.1.4 |
25 Sept 2022 |
Close a loophole in which certain array variable references nested within with function parameter lists were triggering bogus unmapped variable compiler errors. |
1005 |
1721.1.3 |
25 Sept 2022 |
Auto-binding of a DEFSTRUCT to a DYNSTRUCT when passing parameters to a function was not working for function parameters defined with default values. |
1004 |
1721.1.2 |
25 Sept 2022 |
DEFSTRUCTs embedded in the RUN file were missing DEFTYPE information—i.e. any DEFTYPEs in the DEFSTRUCT were converted to the native types. |
1003 |
1720.7.1 |
14 Sept 2022 |
/F1 switch wasn't eliminating all minimum run versions from the header. |
1002 |
1720.4 |
07 Sept 2022 |
A label named SET'RECNO or XOPEN was incorrectly setting the minimum runtime version in the RUN header to 1684, as if it had seen the statements by those names. |
1001 |
1720.0.8 |
31 Aug 2022 |
Language enhancement, compiler edit 1001: The CALL statement can now be used to invoke a dynamic function. For example: CALL DYNFUNC(func$,args...) CALL DYNFUNC$(func$,args...) This is analogous to using the CALL statement with static function, and is more natural than a dummy assignment when you don't care about the return value of the function. Requires A-Shell 6.5.1720+. |
1000 |
1720.0.5 |
31 Aug 2022 |
Language enhancement: named parameters can now be used with DYNFUNC, e.g.
DYNFUNC(fname$, argx=valuex, argy=value1)
Note that this affects both the compiler and runtime, so the use of named parameters in a DYNFUNC expression will now set the minimum runtime level to 6.5.1720. |
1720.0.7 |
31 Aug 2022 |
/CI support now extended to dynamic functions, both the function names and argument names. |
|
999 |
1720.0.6 |
31 Aug 2022 |
Language enhancement: default parameter values are now supported in dynamic functions. Previously the compiler didn't complain, since functions declared dynamic can still be called statically. Note that in the case of dynamic functions, default values are limited to constant expressions, whereas for static functions, they could involve variables. Use of default values in a dynamic function definition now sets the minimum runtime level to 1720, so programs that ran under earlier runtimes (whether or not the default values were respected) will now require the 6.5.1720+ runtime. |
998 |
1717.14.14 |
03 Aug 2022 |
• The /CI (case insensitive) option was affecting DEFINEd literal strings. This bug was introduced in edit 994). • Symbol definitions passed in via the /C: switch were being lost if the program was too big for the specified options, leading to an automatic compilation restart with the /A or /AV switches activated. |
997 |
1717.13.2 |
02 Aug 2022 |
Internal compiler code refinements. |
996 |
1717.12.1 |
27 July 2022 |
Fix crash related to embedded defstructs. |
995 |
1717.4.2 |
9 June 2022 |
the existence of a ++ directived within the text following a ++MESSAGE or ++ERROR directive was in some cases confusing the compiler as to conditional compilation state. |
994 |
1717.4.1 |
9 June 2022 |
Refinements to DEFALIAS: • ++IFLBL / ++IFNLBL now recognize DEFALIAS'd function and procedure labels, acting based on the existence of the target function / procedure (and not the existence of the DEFALIAS definition). • ++IFDEF / ++IFNDEF now treat DEFALIAS definitions as they would symbols defined via DEFINE statements. • UNDEF now works on DEFALIAS definitions. |
993 |
1716.6.2 |
26 May 2022 |
fix several issues related to .SUBLIST and .SPLICE: (1) passing a .SUBLIST to a function expecting a list was causing a spurious array vs. scalar mismatch compilation error; (2) in some statements a .SUBLIST was being treated as scalar variable, possibly leading to a spurious compilation error or real runtime error; (3) a foreach statement iterating through a .SUBLIST may have thrown a spurious compilation error; (4) the 3-argument version of .SPLICE was being compiled incorrectly, leading to possible stack corruption at runtime. |
992 |
1716.6.1 |
26 May 2022 |
attempting a private instantiation of a DEFSTRUCT containing overlaid variables was resulting in a spurious compiler error. |
991 |
|
|
|
990 |
1716.3.1 |
19 May 2022 |
close a loophole in which function call parameter lists containing literals might trigger a spurious syntax error or fail to compile correctly. Also syntax error messages now display a suffix "-->> xxx ..." where xxx indicates the part of the line where the syntax error was detected. This is mainly helpful in very long source lines where it is sometimes difficult to find the missing or misplaced character. |
989 |
1715.12.2 |
13 May 2022 |
close a loophole introduced in edit 984 resulting in the corruption of some function calls and XCALLs, primarily in the CentOS environment. |
988 |
1715.12.1 |
13 May 2022 |
minor refinements to the LSX file structure to ensure that the LSX compilation is fully independent of the environment in which it was created. |
987 |
1715.11.2 |
13 May 2022 |
fix problem with ++INCLUDE'IF'EXISTS when compiling an LSX file in a different environment than where the LSX file was originally created. If the existence at the time the LSX was created didn't agree with the existence when compiling the LSX, the ++include nesting levels would get out of sync with the original, possibly leading to bogus compilation errors. |
986 |
1715.10 |
06 May 2022 |
the first unmapped variable, if numeric, was failing to finalize the definition of last mapped variable, causing it to behave in certain expressions as if it had the default size for its type. Problem was introduced in one of the early 6.5 versions. |
985 |
1715.9.1 |
03 May 2022 |
DEFTYPEs associated with structure members were not being saved or retrieved by the MX_DYNSTRUCT operations. The native type,size info was still correct, but applications relying on on the DEFTYPEs were out of luck. Bug was introduced in 6.5.1711. |
984 |
1715.8.1 |
01 May 2022 |
tighten the syntax checking on named parameter lists (both XCALL and function/procedure) to require that scalar parameters are passed scalar values and array (byref) arguments are passed array (byref) values. |
983 |
1715.7.1 |
23 Apr 2022 |
further refinement to edit 982 to eliminate spurious complaint about XCALL array parameters with spaces within the parentheses, e.g. XCALL MYSBX, ARY( 1 ), ... |
982 |
1715.6.1 |
22 Apr 2022 |
replacement for edit 981 (which was recalled). |
981 |
1715.5.1 |
21 Apr 2022 |
extend the fix in edit 978 to apply to XCALL named parameters (defined with DEFXCALL). |
980 |
1714.3.1 |
21 Apr 2022 |
fix for spurious error "cannot input from output-only parameter) on XGETARG when the specified argument number was one beyond the number of parameters formally declared. Apply range checking on the XGETARG argument number to make sure > 0 and < 1024 (max). |
979 |
1714.2.1 |
12 Apr 2022 |
RND2 / SRND2 were failing to set the minimum runtime version to 1517. |
978 |
1714.1.1 |
08 Apr 2022 |
fix problem introduced in edit 975 causing spurious undefined parameter errors with function parameter definitions of the form $ary()=.NULL as ordmap(...). |
977 |
1713.0.1 |
08 Apr 2022 |
new system function TRIM(strexp), or TRIM$(strexp). This removes the leading and trailing blanks from the string expression argument, equivalent to the combination of STRIP$(strexp) and LSTRIP$(strexp). |
976 |
1712.4.3 |
21 Mar 2022 |
MX_DYNSTRUCT DYNOP_DEF calls referencing file-based DEFSTRUCTs were incorrectly handling array members of the structure if the file contained a ++PRAGMA PRIVATE section prior to the DEFSTRUCT. |
975 |
1712.4.2 |
20 Mar 2022 |
named parameter references to arrays (byref) were incorrectly accepting scalar parameter name syntax. |
974 |
1712.4.1 |
20 Mar 2022 |
various minor improvements to the clarity of certain error messages. |
973 |
1712.3.1 |
20 Mar 2022 |
the ++PRAGMA GLOBAL_xxx was causing symbol definitions passed in to the compiler on the command line (via /C:symbol=definition) to be lost. |
972 |
1712.0.3 |
08 Mar 2022 |
clean up minor issues relating to spurious errors appearing after real prior errors. |
971 |
1712.2.1 |
27 Feb 2022 |
new system function LSTRIP(strexp), or LSTRIP$(strexp), strips leading blanks from the specified string expression. |
970 |
1712.0.1 |
28 Feb 2022 |
remove all special adjustments to the operator precedence rules in shortcut operator statements. This is an extension / cleanup of the change in 6.5.1708.1 (compiler edit 958) which restored the normal precedence rules for trailing USING operators. |
969 |
1711.4.1 |
27 Feb 2022 |
fix bug causing a bogus syntax error on an expression involving a nested USING clause in a shortcut operator assignment. Bug was introduced in 6.5.1708.1 (compiler edit 958). |
968 |
1711.3.1 |
23 Feb 2022 |
improve clarity of error messages relating to argument lists. Also close loophole allowing illegal parameter sizes to fail to trigger an error. |
967 |
1711.2.1 |
22 Feb 2022 |
LSX file ++include indicators now show a <##_#> suffix indicating the sequential file # and the nesting level. |
966 |
1711.1.3 |
17 Feb 2022 |
close window of opportunity for GPF associated with errors related to embedded DEFSTRUCTs. |
965 |
1711.1.15 |
16 Feb 2022 |
include features mentioned elsewhere. |
964 |
|
14 Feb 2022 |
|
963 |
1711.0.8 |
|
fix bug introduced in compiler edit 892 to support dynamic structures. |
962 |
|
14 Feb 2022 |
|
961 |
|
|
|
960 |
|
|
|
959 |
1708.1.2 |
|
new auto-defined macro ABC_SCALE is set to the current SCALE value (0 if no SCALE statement yet encountered). |
958 |
1708.1.1 |
27 Oct 2021 |
USING expressions on the right side of Shortcut Operators are now evaluated after the completed expansion of the shortcut operator statement. |
957 |
1708.1.6 |
27 Oct 2021 |
DEFALIAS now updates the effective type (string or numeric) of the function, making it possible to alias a numeric function call to a string function or vice versa. |
956 |
1708.0.5 |
21 Oct 2021 |
close a loophole that resulted in a bogus syntax error following an instance of an array base reference in an XCALL parameter list. |
955 |
1707.3.1 |
21 Oct 2021 |
use of an automapped %m variable in the global context was resulting in a memory error at runtime. |
954 |
1707.2.1 |
07 Oct 2021 |
close two loopholes related to the use of %x auto-mapped variables (see 1707.0 below) which were resulting in spurious compiler error messages. |
953 |
1707.1.1 |
06 Oct 2021 |
MX_DYNSTRUCT DYNOP_DEF was not supporting .SIZEOF(var), resulting in a spurious error. |
952 |
1707.0.2 |
04 Oct 2021 |
MX_DYNSTRUCT support: the default amount of work area memory allocated when defining (compiling) a dynamic structure has been increased from 128K to 2M. |
951 |
1707.0.1 |
03 Oct 2021 |
auto-mapped variables are now confined to local contexts. |
950 |
1706.3.1 |
03 Oct 2021 |
eliminate bogus "ambiguous relop" errors in nested control statements involving DYNSTRUCT references. |
949 |
1706.0.2 |
28 Sep 2021 |
supports automapped %var variables. |
948 |
1705.9.1 |
24 Sep 2021 |
automapped for/next loop variables (see 6.5.1704.0) were generating bogus compiler errors if there was a ++extern statement in the same function. |
947 |
1704.1.1 |
05 Sep 2021 |
all standard string functions now support the optional $ suffix on the name (e.g. STR(x) or STR$(x).) |
946 |
1704.0.1 |
10 Jun 2021 |
auto-mapped for/next loop variables. You may now create a new variable on the fly to act as the loop counter in a for/next loop by preceding the variable name with a %. See FOR … NEXT Control Structures. |
945 |
1703.0.3 |
05 Jun 2021 |
eliminate spurious error complaining about the type or size of the record number parameter in a file OPEN statement if the parameter is part of a DIMX array. |
944 |
1702.2.1 |
18 May 2021 |
generate error if non-F6 var specified in OPEN statement. |
943 |
|
08 May 2021 |
|
942 |
1697.1.1 |
|
references in PRINT statements to entire arrays, such as PRINT .EXTENT(ARY()), were resulting in spurious syntax errors. |
941 |
1697.0.1 |
27 Jan 2021 |
WRITECD of an entire array. |
940 |
1696.1.1 |
22 Jan 2021 |
close a loophole resulting in spurious "attempt to input from output only parameter" (or vice versa) errors in SBXs. |
939 |
1695.0.1 |
18 Jan 2021 |
new feature: "Implicit function return value capture". That's a mouthful to describe what is really a kind of "syntactic sugar" to simplify referencing the result of a previously called function without having to map a variable and explicitly assign the value to it. |
938 |
1690.3.1 |
10 Jan 2021 |
support a ++ifdef ... ++endif statement on a single source line. |
937 |
1689.2.1 |
08 Oct 2020 |
arrays/collections may now be passed to DYNFUNC(), as they can in normal function references. Previously only array elements were supported. |
936 |
|
10 Sep 2020 |
|
935 |
1687.0.1 |
|
new dot variables: .MILLITIME returns number of milliseconds since midnight, and .MICROTIME returns number of microseconds since midnight. a missing closing parenthesis on the end of a function parameter list wasn't always being flagged as a syntax error. It was compiling as if the closing parenthesis had been there. |
934 |
1686.0.1 |
17 Jul 2020 |
new unambiguous shortcut operators: #+= and $+=. These are equivalent to the existing shortcut operator += except that they unambiguously specify either addition or concatenation, respectively, regardless of the destination type. |
933 |
1685.0.1 |
02 Jul 2020 |
new dot variables: SBXNAME, SBXVERSION, CCYYMMDD, MMDDYY, DDMMYY, RECSIZ. |
932 |
1684.0.4 |
01 Jul 2020 |
XOPEN now supports RANDOM and ISAM 1.x files. Also, XOPEN supports the option of expressing the flags argument as an expression rather than as a binary variable. |
931 |
1684.0.2 |
12 Jun 2020 |
in programs compiled without the /X:2 or /RC switches, the memory storage assigned to the last explicitly mapped variable was overlapping the first unmapped variables (assuming no /M). Problem was introduced in compiler edit 894 (A-Shell 6.5.1656.1) |
930 |
1684.0.1 |
12 Jun 2020 |
the new SET'RECNO statement was causing a syntax error on a subsequent statement in certain contexts. |
929 |
1683.0.5 |
12 Jun 2020 |
new ++PRAGMA FORCE_F1_HDR "<boolean>" may be used to toggle the /F1 switch. Use of the .ISNULL() function now sets the minimum runtime version to 1414. |
928 |
1683.0.4 |
08 Jun 2020 |
updated to support various language enhancements. |
927 |
1679.2.1 |
08 Jun 2020 |
STRSIZ 0 was causing spurious errors in some function declarations. |
926 |
1676.1.1 |
14 Apr 2020 |
in programs compiled without the /M (require all variables to be mapped) option, a reference to a non-existent structure member (ST.MEMBER) within an otherwise defined structure (ST) was resulting in the structure name getting auto-mapped as a F,6 variable. |
925 |
1673.2.1 |
06 Feb 2020 |
some variations of invalid DEFTYPE statements were crashing the compiler. |
924 |
1672.2 |
02 Jan 2020 |
revises edit 923 so that all ++ conditional compilation directives within functions and procedures are included in the LSX, even if within a function that has been shaken out by the /PX switch. Such conditionals may still be be relevant to how the rest of the file is compiled, and this resolves problems with conditionals that span the start or end of a routine. |
923 |
1672.1 |
13 Dec 2019 |
incorrect minimum run version was written into object header in some cases. LSX file may have ended up with mismatched ++IF/++ENDIF if a conditional block straddled the function definition and the function was shaken out by the /PX switch. |
922 |
1671.4.5 |
13 Dec 2019 |
attempting to use the .ISNULL() function with a non-string argument now generates an illegal expression error. |
921 |
1671.0.5 |
05 Dec 2019 |
optimizes the runtime code generated by trace statements of the forms DEBUG.PRINT <args> and TRACE.PRINT (level,tags) <args> |
920 |
1670.0.5 |
05 Dec 2019 |
the Minimum Run Version stored in the program header now distinguishes between two variations of the .CLEAR statement. |
919 |
|
01 Nov 2019 |
|
918 |
1668.0.2 |
|
the Shortcut Operators += and -= now work with collections. |
917 |
1665.4 |
19 Sep 2019 |
eliminate spurious "exceeded 512K limit" error on DATA statements when used in conjunction with some newer features. |
916 |
1665.3.2 |
|
static functions which were called only by dynamic functions were getting shaken out of the tree by the /PX algorithm. |
915 |
1665.2 |
30 Aug 2019 |
the presence of a single Dynamic function was disabling the /PX removal of un-called functions. It now only ensures that no Dynamic functions are removed, since we can't be sure if they are called dynamically. |
914 |
1665.1.2 |
30 Aug 2019 |
add comment marker (!) to "{shaken out by /PX}" notations in the LSX file for ease of recompiling from the LSX. |
913 |
1664.4.1 |
30 Aug 2019 |
TRACE.xxx statements were not allowing additional statements on the same line (using colon separators). Not that we'd like to encourage the anachronistic practice of jamming several statements together on a single line (presumably for the purpose of sharing a single THEN or ELSE clause), when it is much cleaner to use the multi-line IF/ENDIF construction. But technically it should be legal. |
912 |
1664.3.2 |
11 Aug 2019 |
the /PX switch was causing .GLBI (and previously CMPGLOBAL.TMP) temporary files to be left behind. |
911 |
1664.2.1 |
11 Aug 2019 |
the temporary file used to hold a GLOBAL_BEGIN/END block now uses a source-file-specific name <source>.glbi instead of the fixed name cmpglobals.inc. This resolves a conflict with running multiple simultaneous compilations in the same directory. |
910 |
1663.0.1 |
11 Aug 2019 |
new ++pragma provides a way to assign a name to the LSX file that includes the vedit field of the program version: ++PRAGMA LSX_FSPEC "filespec" where "filespec" can be an A-Shell-style or native filespec, optionally including the following special macros: |
909 |
1662.2.2 |
22 Jul 2019 |
compiler was failing to recognize the new LSX headers, causing total failure to be able to recompile LSX files. |
908 |
1662.0.6 |
14 Jul 2019 |
fix failure to allow IFE() and IFE$() functions within relative expressions, e.g. IF IFE$(A$,B$) = C$ ... |
907 |
1661.2 |
24 Jun 2019 |
.sizeof(var) was generating spurious variable not found errors for defstruct references in isolated cases. Introduced in compiler edit 902. |
906 |
1661.1 |
06 Jun 2019 |
.sizeof(var) was generating spurious variable not found errors under a certain situations. Introduced in compiler edit 902. |
905 |
1661.0.7 |
06 Jun 2019 |
new functional directive EXTERN(expr). |
904 |
1661.0.5 |
06 Jun 2019 |
resolve an issue with MX_DYNSTRUCT in which source files with multiple DEFSTRUCTS containing MAP1 statements may have led to corrupted extents of array members of the target structure. |
903 |
1661.0.3 |
06 Jun 2019 |
.SIZEOF() now supports DEFTYPE names, e.g. .SIZEOF(BOOLEAN). |
902 |
1660.7.1 |
06 Jun 2019 |
.SIZEOF(VAR) was not respecting scope, (i.e. was finding global VAR when it shouldn't.) |
901 |
1660.4.5 |
08 May 2019 |
IFELSE(relexpr,expr1,expr2), along with the IFELSE$() string version, were both treating the relexpr as being purely numeric, which after edit 890 was resulting in any string operands within the relexpr being converted to numeric prior to evaluation. This rendered string comparisons, e.g. A$ > B$ as being equivalent to VAL(A$) > VAL(B$), which had only about a 50% chance of giving the expected result. |
900 |
1660.4.4 |
08 May 2019 |
in /X:1 or /X:2 mode, a FOR/NEXT loop was incorrectly starting from one STEP unit after the correct starting value if the initial expression ended with an operator with lower precedence than addition. For example, FOR I = X MAX Y TO Z was starting at (X MAX Y) + 1 rather than (X MAX Y) because MAX has lower precedence than the implicit addition or subtraction of the step value. The problem didn't affect the OCMPIL implementation of FOR/NEXT, and didn't occur if the 'from' expression was parenthesized. Same patch as 6.4.xxxx. |
899 |
1660.4.3 |
08 May 2019 |
++PRAGMA GLOBAL_BEGIN wasn't working when the source file spec was longer than 50 characters—i.e. when using native filespec notation for the program source. |
898 |
1660.0.2 |
08 May 2019 |
MX_DYNSTRUCT now allows DEFTYPE aliases for implicitly sized X variables. There were previously allowed, but the DEFTYPE name was lost during the runtime compilation. |
897 |
1659 |
08 May 2019 |
fix for IFE() and IFE$() functions; original implementation didn't hold up when nested within other types of expressions, in particular IFELSE(). Note that the fix involves both the compiler and runtime. |
896 |
1657.0.2 |
26 Mar 2019 |
compiler now embeds into the object header an indication of the minimum acceptable A-Shell runtime version, when certain newer language features are present. Runtime versions prior to 6.5.1657 will not recognize the new header signature and will treat the RUN as invalid (i.e. will refuse to run it). From this version on, the runtime system will recognize the minimum version header and will give a more precise error. Program requires minimum A-Shell level ####. |
895 |
1657.0.1 |
03 Mar 2019 |
new functions IFE and IFE$. |
894 |
1656.1.a |
03 Mar 2019 |
close loophole in the ++PRAGMA TRACE_BEGIN logic that was resulting in spurious variable-not-defined errors in certain kinds of IF <expr> GOTO <label> statements where the <expr> involved a function call. |
893 |
1656.0.2 |
27 Feb 2019 |
LSX Header now includes more detail. |
892 |
1656.0.1 |
27 Feb 2019 |
|
891 |
1655.0.2 |
27 Feb 2019 |
new pragma ++PRAGMA AUTO_LARGE_CONSTANTS. |
890 |
1655.0.1 |
14 Feb 2019 |
new operators and casting functions NUMEXPR, STREXPR, #+, $+ to eliminate the ambiguity in the + operator. |
889 |
1651.8 |
14 Feb 2019 |
unmapped struct.member errors now display the full struct.member name. Previously it was only noting the structure name. |
888 |
1650.0.1 |
18 Dec 2018 |
high level operations to Copy, Add, Subtract Collections (i.e. ORDMAP, ORDMAPM and MLIST structures) to/from each other. |
887 |
1650.0.2 |
08 Nov 2018 |
++PRAGMA TRACE was generating spurious unmapped variable errors when encountering named parameter references inside function argument lists within certain kinds of statements (such as IF). |
886 |
1649.0.4 |
08 Nov 2018 |
the ++IFMAP and ++IFNMAP conditional directives were always operating relative to the GLOBAL scope, rather than the scope (and extern rules) that would apply to the a variable in that context. For example, ++IFNMAP FOO within a function now checks for the existence of a variable FOO in the same way that a regular reference to FOO in that context would, i.e. considering a locally defined FOO, then a module private FOO, and then—if auto_extern or or ++extern FOO had been specified—a global FOO. |
885 |
1648.1.1 |
22 Oct 2018 |
the first dynamic function compiled was missing the type,size attributes in the dynamic function index. |
884 |
1647.4.1 |
04 Oct 2018 |
close memory corruption loopholes in the DYNSTRUCT compilation routines. |
883 |
1647.2 |
30 Sep 2018 |
dynamic functions were unable to be located within RUN modules that were automatically recompiled with /A or /AV by the compiler due to the size. The .fn alias for the current function name was not working with private functions. |
882 |
1647.0.4 |
30 Sep 2018 |
the Dynfunc mechanism now allows for retrieval of function return type information; see MX_DYNFUNC. TRACE.PRINT statements with the (level) and/or (level,tags) option were throwing bogus syntax errors for variations that weren't errors. |
881 |
1647.0.3 |
30 Sep 2018 |
support .fn (case INsensitive) within a function as an alias for the function name variable. For example... |
880 |
1647.0.2 |
30 Sep 2018 |
use of Ellipsis (...) in argument lists to facilitate passing arguments through a wrapper function. |
879 |
1647.0.1 |
30 Sep 2018 |
language extension: Dynamic Function Calls. |
878 |
1646.6.1 |
30 Sep 2018 |
revise compilation of ds.field(x) and ds.@fname$(x) to allow for better runtime error detection and handling. Incorrect use of ds.@fname$(x) in place of ds.@fname$(x)(y) can now be trapped at runtime with error 71, undefined dynstruct member. Any programs using DYNSTRUCT must be recompiled! Improve robustness of file-based MX_DYNSTRUCT DYNOP_DEF. Disable the auto-tracing—activated by ++PRAGMA TRACE_BEGIN—of MAP Statements with initializers, as this was leading to spurious errors. Fix spurious compiler error on IF <expr> RESUME <label>. Fix problem with ++PRAGMA TRACE_BEGIN appearing to have no effect after a previous ++PRAGMA TRACE_BEGIN at the same nesting level. |
877 |
1646.1 |
15 Sep 2018 |
change syntax for indirect deferred dynstruct references from ".." to ".@" : ds.@fname ! fname contains name of member (was ds..fname); ds.fname ! fname is name of member (same as before) |
876 |
1646.0.1 |
15 Sep 2018 |
the DYNOP_DEF operation in MX_DYNSTRUCT now supports reading the structure definition from ASB source files in addition to strings. |
875 |
|
15 Sep 2018 |
|
874 |
1645.0.2 |
|
fix problem with CASE SYMBOL1...SYMBOL2 introduced in edit 870; Report any dynamic (S,0 or X,0) variable within a DEFSTRUCT as an error; Reset default trace level to 0, was 99 as of edit 871. |
873 |
1645.0.1 |
29 Aug 2018 |
add dynamic structures. |
872 |
1644.1 |
29 Aug 2018 |
the overall length of a ++PRAGMA statement was being incorrectly limited to 50 characters, which was mainly affecting TRACE_BEGIN. The new limit is 600 characters, with a max of 512 for the TRACE_BEGIN token-list—the fourth argument). |
871 |
|
23 Aug 2018 |
|
870 |
1642.2.3 |
|
eliminate the ambiguity surrounding a defined symbol XXX when .XXX is an internally defined symbol—e.g. .TRUE. The problem was that the XXX was getting translated independently of the dot, resulting in unexpected results. For example assuming DEFINE TRUE = 1, a subsequent reference to .TRUE was returning .1 (substituting TRUE for 1 independent of the dot) rather than -1 (the built-in definition of .TRUE). Attempts to define symbols with leading dots are now considered errors, and references to symbols with leading dots consider only the dot version. |
869 |
1642.2.2 |
15 Aug 2018 |
internal refinement to support the possibility of dynamically compiling defstructs at runtime. |
868 |
1641.0.1 |
15 Aug 2018 |
PRIVATE variables and ++PRAGMA PRIVATE_BEGIN / _END blocks may now be used in the main source module to limit the scope of those variables to just that source file. Note that this enhancement entirely handled by the compiler; there is no issue with backwards or forwards runtime compatibility, even under AMOS. |
867 |
|
03 Aug 2018 |
|
866 |
1639.3.4 |
|
fix some minor aesthetic problems with the auto tracing mechanism. |
865 |
1639.3.3 |
16 Jul 2018 |
add private functions to the tags file for the benefit of APN and the Go To Definition script. |
864 |
1639.3.2 |
16 Jul 2018 |
a DIMX array defined locally to a routine and then passed by reference to another routine was incorrectly getting deallocated return from the lower routine. |
863 |
1639.2.2 |
16 Jul 2018 |
trace statements involving more than one comma-delimited term, of which at least one was a quoted string constant, where being formatted in a confusing way. |
862 |
1639.0.7 |
16 Jul 2018 |
support the /NOTRC option (or -notrc when using the standalone compiler executable). |
861 |
1639.0.5 |
16 Jul 2018 |
new ++PRAGMAs to support enhanced tracing ++PRAGMA TRACE_BEGIN {optionlist}, ++PRAGMA TRACE.END {optionlist}, ++PRAGMA TRACE.OPTIONS {optionlist} |
860 |
1637.3.2 |
16 Jul 2018 |
compiler was failing to flag a syntax error for WRITECD and WRITETD statements lacking a comma or semicolon between each field. |
859 |
1636.0.4 |
12 Jun 2018 |
the starting key in a FOREACH statement may now be any kind of expression. |
858 |
1633.0.2 |
26 May 2018 |
very long FOR statements were potentially failing to compile correctly due to an overflow, without triggering a compiler error. |
857 |
1631.1.2 |
15 Apr 2018 |
the /PX logic was failing to recognize a call to a function that was specified as the initializer to a MAP statement, thus opening up the possibility that the function would be removed, leading to a function-not-found error. |
856 |
1631.0.5 |
06 Mar 2018 |
close a loophole that was allowing the compiler to go into an infinite loop in certain obscure cases involving unterminated literal strings with conditional compilation blocks. |
855 |
1630.1.2 |
06 Mar 2018 |
SCALE: XPUTARG literal argument numbers and literal .EXTENT index numbers were not being scaled in the RUN file. The updated run-time system will now handle it either way. |
854 |
1629 |
22 Feb 2018 |
add language feature: INPUT CSV into a Dynamic Array. |
853 |
1628.1.2 |
15 Feb 2018 |
(a) XPUTARG @PARAM was not working properly with SCALE; (b) compiler now properly complains about a dangling comma at the end of a function/procedure parameter list. Previously such superfluous commas were ignored, but introduced doubt as to what the compiler was thinking. |
852 |
1628.0.2 |
13 Feb 2018 |
increase maximum length of a single line of source code, including continuations, from 3K to 16K. Also increase the limit on the number of xcall / function / procedure parameters from 128 to 1024. |
851 |
1628.0.3 |
13 Feb 2018 |
(a) /PX was not properly handling ENDFUNCTION statement with line numbers; (b) /P and /PX were not properly handling UNDEF statements; (c) built-in macros ABC_CURRENT_MODULE$ and ABC_CURRENT_ROUTINE$ were in some case returning garbage. |
850 |
1626.0.4 |
13 Feb 2018 |
the patch in edit 848 for ++IFMAP and /PX now works for /P as well as /PX. |
849 |
1625.1 |
30 Jan 2018 |
default function and procedure parameter values were not being respected in calls where no named parameters were specified. Problem was introduced in compiler edit 847. |
848 |
1625.0.2 |
25 Jan 2018 |
(1) Passing a named lblref reference to a function without prefixing the name with @ was compiling but failing to actually pass the parameter. (2) ++IFMAP and ++IFNMAP now work as expected with /PX. Previously, since ++IF conditionals are processed during the initial pass but MAP Statements are not, a function that was only referenced within a block of code conditioned on a seemingly true ++IFMAP would get shaken out out of the tree, resulting in a function-not-defined error. This is now resolved. Note that ++IFMAP <var> only applies to global variables, not local or private variables. |
847 |
1624.3.1 |
25 Jan 2018 |
fixes related to indirect/lblref functions: |
846 |
1624.0.2 |
23 Jan 2018 |
.CLEAR enhancement: .CLEAR ARY() now supported for all types of arrays; previously it only applied to collections. The details of the clearing operation depend on the nature of the array being clear, described in further detail below. |
845 |
1624.0.1 |
23 Jan 2018 |
STRSIZ-related refinements. |
844 |
1623.0.1 |
23 Jan 2018 |
collections passing: Collections can now be passed by reference in an XCALL to an SBX |
843 |
|
22 Dec 2017 |
|
842 |
1621.3.2 |
|
when using the /LF switch without /M, certain ++EXTERN ARRAY() statements for DIMX and ORDMAP arrays were generating spurious errors: unmapped variable or mismatched type/size. |
841 |
1621.2.2 |
30 Nov 2017 |
the standalone Unix compiler was failing to process the -b and -l switches correctly. It was also failing to fold ++INCLUDE filenames to lower case if the compiler wasn't running from a directory mapped to a MIAME DEVICE. |
840 |
1621.2.1 |
30 Nov 2017 |
certain references to a collection indexed by an array of structures, e.g. $coll(struct(i).member), within a foreach loop, were resulting in a spurious error on the NEXT $$i statement at the bottom of the loop. |
839 |
1620.0.2 |
30 Nov 2017 |
symbol definitions passed on the command line using /C:sym=value were being ignored during the first pass of the /P and /PX processing. Also, the compiler macros ABC_CURRENT_ROUTINE$ and ABC_CURRENT_MACRO$ were in some cases creating an additional spurious macro "A" which might have caused a spurious syntax error for a variable "A". |
838 |
1620.0.1 |
07 Nov 2017 |
add ASB Statement DEFALIAS. |
837 |
|
07 Nov 2017 |
|
836 |
|
|
|
835 |
|
|
|
834 |
1616.0.2 |
|
support .ARGTYP(@arg) and .ARGSIZ(@arg). Concept is similar to that used for XPUTARG @arg (i.e. @arg is treated essentially as a macro for the argument number corresponding to the argument arg as defined in the function/procedure definition or as retrieved in an SBX using XGETARG(S).) No change to the runtime system required. |
833 |
|
07 Sep 2017 |
|
832 |
|
|
|
831 |
1613 |
|
relax limitations on XPUTARG @VAR to allow the same parameter number to be associated with multiple variables, provided that the VAR the XPUTARG @VAR statement is never associated with more than a single parameter #. |
830 |
|
|
|
829 |
|
|
|
828 |
1608.0.1 |
|
expand XPUTARG @argname mechanism (see 1607.0) to work for SBXs. |
827 |
1607.4.3 |
29 Jun 2017 |
compiling with /P or /PX was resulting in spurious "undefined argument" errors in some cases when using the new XPUTARG @arg syntax. See 6.5.1607.0. When compiling with /PX and /LF, unreferenced functions and procedures ending with a two-part 'END' token—e.g. "End Function" or "END PROCEDURE"—were only writing the "END" to the LSX file, causing problems if the LSX was later compiled. The "{shaken out by /px}" line in the body of such routines in the LSX file is now properly commented out, allowing the LSX to be re-compiled without the /PX switch. |
826 |
1607.0.2 |
21 Jun 2017 |
the maximum source code length of a function declaration was incorrectly set at about 512 instead of 3072 like all other source lines. |
825 |
1607.0.1 |
21 Jun 2017 |
XPUTARG now supports the ability to reference the parameter to be returned by its name rather than by its number, using the following syntax: |
824 |
1606 |
21 Jun 2017 |
certain DEFSTRUCT arrangements were generating absurd numbers of bogus syntax errors. |
823 |
1605.1 |
|
the DEFSTRUCT/MAP1 enhancement added in compiler edit 821 was generally not working for ++include files; an illegal dot within a MAP or DEFSTRUCT variable name wasn't being reported. |
822 |
1605 |
03 Jun 2017 |
language enhancement adds new Shortcut Operators VAR |= expr and VAR &= expr |
821 |
1603 |
29 May 2017
|
DEFSTRUCT may now include a MAP1 statement as the first member of the structure. |
The last entry in the table above, compiler edit 821 and A-Shell 1603, marked the beginning of the A-Shell 6.4 development cycle. At present, that marks the end of these notes. The list may be extended farther back in time at some point in the future. See the following topic for a second listing of compiler edits; it excludes bug fixes and overlaps somewhat with the list above, but it also goes back in time to 2013. For older notes on compiler changes and all A-Shell changes, you can also consult the A-Shell Development History documentation.