Compiler Edit History II

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
Edit #

A-Shell
Version

Release
Date

Description

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 or WRITETD 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

add Explicit Comparison Operators.

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 BASIC 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

EIR

 

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.