Release Notes

Filter
SDI - 2024.10.2239
October 25, 2024

Visual Studio Integration

The Synergy .NET compiler now reports a level 4 E_PASSUR warning when a field, record, or group is passed to a group parameter that is larger. (Without this, accessing a field in the group outside of the size of the passed-in alpha would cause a runtime exception.)
The continuation character is correctly reported as a level 3 warning rather than a NOTSUPT error for -qrntcompat values of 12030100 (12.3.1) and higher.
The Synergy .NET compiler no longer mistakenly reports a level-4 NARROWING warning when assigning an i2 value to a d5.
We fixed an issue that caused Solution Explorer to indicate that it was infinitely loading (it displayed a continuously spinning icon) when a multiple mainline project was expanded in Solution Explorer.
We fixed an issue that sometimes caused a SynergyTasks.DBLinkT error when a multiple mainline project had more than one mainline with the same name but different file extensions (e.g., mymain.dbl and mymain.abc).
With traditional Synergy projects, the following settings (set on the Compile page of project properties) were not passed to background compilations used behind the scenes for IntelliSense: 
  • Require prototype usage (-qreqproto), 
  • Define all undefined functions as ^VAL (-X, -qimplicit_functions). 
This issue sometimes caused unexpected red squiggles when editing in Visual Studio while these options were set.
Synergy .NET now supports ^REF parameter types that are value types, including non-descriptor integer types and CLS structures. (Other ^REF types cause E_NOTSUPT errors.) Note that the caller must also encapsulate argument with ^REF and the type must match exactly; otherwise an E_TYPPARM error will be reported.
The syn_reportevent() routine is now supported for Synergy .NET when qrntcompat is set to12050100.
We added diagnostic logging to dblnet to report information about asm2dbp. The asm2dbp program is a utility related to the Synergy .NET compiler that takes .NET assemblies and generates DBP files (prototype files). These diagnostics can be enabled by setting the environment variable ASM2DBP_DIAG to 1. To disable the diagnostics, delete the ASM2DBP_DIAG environment variable. Log files are written to the Synergex directory under the LocalAppData path (i.e. navigate to LocalAppData/Synergex where LocalAppData is an environment variable containing a directory path on Windows).
We updated the Synergy .NET compiler so that it now supports D_ADDR as a default parameter type.
We fixed an issue that caused hover-over IntelliSense for an "i" data type with a set size (e.g., "testvar, [4]i4") to display incorrectly (e.g., as "testvar, [#]i44").
The SDI Update window is no longer displayed in Visual Studio when the latest version of SDI is installed.
New .NET and .NET Standard class library projects will now have "3 - Don't display warning levels higher than 3" as the default "Set the warning level" setting. ("Set the warning level" is a setting on the Compile page of project properties.) Previously, the default setting for this was "0 - Don't generate any warnings" for these project types.
Startup Object highlighting now persists when an multiple mainline project is closed and then reopened. Previously, the highlighting would disappear when the project was reopened, though the Startup Object setting was still in force.
We fixed an issue that caused inconsistent red squiggle behavior for erroneous code in Synergy code files when these files were opened, as code was modified on the same line as erroneous code (which sometimes caused red squiggles to briefly appear), and when modifying code on other lines.
The Synergy .NET compiler now reports an E_NOFXD level 3 warning when performing # rounding on an expression that includes implied-decimal (d.) operands.
The default runtime is now 12030100 for dbl, dblnet, and dblink. This is the default version if -qrntcompat is not specified.
With Synergy .NET, when INIT was used on a fixed or pseudo array that had no initial value, it cleared only the first element of the array. This has been fixed so that it now clears the entire array, which matches INIT's behavior with traditional Synergy.
The "Latest" setting for "Target Synergy runtime" (on the Build page of project properties) now selects version 12.5.1, which currently corresponds to the 12.4 feature release. Previously "Latest" targeted 12.3.1.
The Synergy .NET complier now reports an E_ATOS error when a group or record is passed as an argument to a parameter that's a larger structure. Previously, this caused an exception (SynDataException).
We fixed the "Using" snippet so that it now results in valid code.
The Synergy .NET compiler no longer mistakenly reports an INVCALL error on a %MEM_PROC call when a subsequent lambda expression includes a subroutine call of MEM_PROC.
Synergy/DE - 12.3.1.1020
LTS
October 14, 2024

License Manager

The license for a Windows xfServer/xfServerPlus client connecting to a Linux server using license forwarding is now released properly when the client completes.

Synergy Language

The parser no longer reports an unexpected E_INVTYPSIZ error due to an earlier FOREACH-AS statement.
Previously, when ctutl was used on low-overhead change tracking data (e.g., with no duplicates or fixed-length records), records that were freed by either the free or rollback operation were deposited in the free list with a partially cleared free list link, causing an %ISUTL-E-28: Data freelist error. This has been fixed.
Freeing a snapshot (down to 1 or 0 remaining snapshots) previously could cause DELETE entries to be malformed, causing a file verify (isutl -v) to report a data mismatch with leaf or invalid RFA errors. This has been fixed.
When creating an ISAM file using a file description (FDL, XDL, or PAR), NULL key values that are specified using a quoted string ('0', " ", or '\0') are now converted to the correct values as documented in the ISAMC documentation.
The traditional Synergy and Synergy .NET 12.3 compilers now recognize the DBLV123 system define when -qrntcompat is greater than or equal to12030100.
Patching an ISAM file that contains change tracking using isutl -p no longer loses snapshot timestamp information. Affected patch options include enabling or disabling the network encryption flag and enabling or disabling resilient and full resilient.

UI Toolkit

We fixed a regression in the script compiler that could cause a "Bad index" error at runtime if a menu column in a window script used lists to group related entries, and the runtime attempted to enable or disable a list of entries in the column. Any window library built with version 12.3.1.1014 of the script compiler (or any 12.2 version) should be rebuilt to take advantage of this fix.
SDI - 2024.09.2004
September 5, 2024

Visual Studio Integration

Microsoft is ending support for .NET 6 in November of 2024 (https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core), so we have updated Synergy .NET project types to default to .NET 8.
Previously, if a build failed for a mainline in a multiple mainline project due to link errors, the other mainlines were not built. Additionally, builds did not occur in parallel. We updated this behavior so that builds for multiple mainline projects occur as if each mainline were an individual project. Mainlines are now built in parallel, and a mainline build failure due to link errors does not prevent other mainlines from building.
The debugger now steps correctly for a conditional statement for a single line at the end of a begin/end block in Synergy .NET code. Previously, the debugger would incorrectly step to the single line even if the conditional statement evaluated to false. For example, the debugger would step to the Console.Writeline line of the following:

begin
   data ok, boolean, true
   if (!ok)
      Console.WriteLine("Fail")
end
We fixed an issue that prevented .NET and .NET Framework multiple mainline projects from building when the project folder name included a space.
We fixed issues with paths and output file handling that prevented the up-to-date check for Synergy .NET and .NET Framework multiple mainline projects from functioning correctly, causing these types of projects to rebuild with every solution build. 
When a routine call is used for an initialization value in the data section, the compiler now provides more detailed and descriptive error text ("Feature not yet implemented: Runtime initialization of <field> not supported"for the E_NOTIMPLE error that it reports on the offending line.
We fixed an issue that prevented the WPF designer from loading for C# projects. The WPF designer no longer loads by default for Synergy WPF projects (because these project types are deprecated), but it does load for Synergy WPF projects when you select the designer view from the XAML view, and it now loads for C# projects when a solution includes both C# and Synergy projects. 
We fixed an issue that prevented the build system from detecting when a script project was out of date due to updates to the referenced repository.
We fixed an issue with the way the SDI Update window retrieved values from the Windows registry. This issue would sometimes result in NullReferenceException and cause Visual Studio to crash
When Visual Studio instances are running under different user contexts (e.g., a non-admin instance and an admin instance), attempts to retrieve the version information no longer result in unexpected exceptions due to permission restrictions. We enhanced SDI to handle such cases gracefully, ensuring reliable version information retrieval regardless of the user context.
We fixed an issue with IntelliSense for Synergy .NET programs that was causing intermittent delays and missing display data. 
For Synergy .NET projects, the option to permanently delete a file from the Solution Explorer did not update the .synproj file, causing subsequent attempts to build or rebuild to result in an error stating that "Source file 'filename' does not exist". (This option is invoked by right-clicking the file, selecting Delete from the context menu, and then clicking the Delete button.)
D_NETCORE is now displayed for .IFDEF IntelliSense completion. 
When the get or set method of a property had capitalized letters (e.g. Get/Set or GET/SET), an unexpected E-NOOVR error ("No suitable method/property found to override") would occur when trying to override the property. This has been fixed so that the E-NOOVR error will no longer occur, but a W-CHGCASE (change case) warning will be issued instead. The W-CHGCASE warning indicates that the case of the overriding get or set method was automatically changed to match the base property. To remove this warning, make sure that the case of the base property methods exactly match those of the overriding property methods.
The compiler for Synergy .NET no longer mistakenly reports an E_INVTYPSIZ error on a line that follows a FOREACH AS statement. The workaround for this issue was to eliminate the AS part of the FOREACH.
We fixed an issue that caused "invalid output path" build errors when building .NET Multiple Mainline projects.
With a Synergy project that is source controlled via TFS (Team Foundation Server), using the "Get Latest Version (Recursive)" function with the Synergy project would fail with an "Unspecified Error". This has been corrected.
Using a global common in Synergy .NET no longer causes an unexpected ILASM error.
We fixed an issue that caused debugger information to fail to appear when Break All was used immediately after launching the Visual Studio debugger for traditional Synergy code. For instance, the Call Stack window would sometimes be blank, and in some cases the editor would become blank.
PEVerify is now run for all build outputs, including DLL and EXE build outputs, for .NET Framework multiple mainline projects.
The Go To Definition feature now works for .NET multiple mainline projects. Previously if you used this feature for a function for which another version existed in another project, Go To Definition would not always go to the correct file.
When opening a Synergy .NET solution in Visual Studio, an extra console window with the title asm2dbp.exe briefly appeared and disappeared upon loading the solution. This has been fixed so the extra window is no longer shown. To obtain this bug fix, both SDI and the Synergex.SynergyDE.Build NuGet package must be updated.
We fixed an issue that sometimes caused the Visual Studio UI to hang due to processing colorization changes when editing Synergy files. This was particularly true for large files with many method calls, and it resulted in delays when scrolling through the file or when typing. 
Synergy/DE - 12.4.1.1001
August 30, 2024

License Manager

The license for a Windows xfServer/xfServerPlus client connecting to a Linux server using license forwarding is now released properly when the client completes.
If the backup server port was different than the primary server port, the backup server was being reported as "inaccessible" when lmu was run on the primary server. This has been fixed to properly connect and report the status of the backup server.

Synergy Language

When creating an ISAM file using a file description (FDL, XDL, or PAR), NULL key values that are specified using a quoted string ('0', " ", or '\0') are now converted to the correct values as documented in the ISAMC documentation.
Performing a free operation on change tracking snapshots no longer blocks I/O by other processes, allowing frees to be performed on live data files. 
The compiler was reporting an unexpected PROTOMISMC error on a structure argument where the structure was nested previously in the class, even though there was a public structure of same name. This has been fixed.
A FOREACH loop with an implicit element type sometimes caused an internal compiler error if the element type was a user-defined nested class declared after the loop in the same file. FOREACH loops now infer the type properly regardless of where the element class is placed in the file.
The compiler no longer reports an unexpected NOTSUPT error when ^NAMEOF contains a parameter group and the source is compiled with the -qcheck option.
Patching an ISAM file that contains change tracking using isutl -p no longer loses snapshot timestamp information. Affected patch options include enabling or disabling the network encryption flag and enabling or disabling resilient and full resilient.
An E-NOTSUPT error ("Token is not supported") will be reported on a FOREACH loop that iterates over a real array that is a class or structure field. Previously, the FOREACH only got the first element of the real array in a class or structure. The new error message indicates that a FOR-FROM loop will work instead. There was also a problem where putting a dynamic array and a real array into a class and iterating over both using FOREACH caused a segmentation fault at runtime. The NOTSUPT error will prevent this case as well.
An "Assembly not found" error no longer occurs when a C# project references a Synergy .NET project with a Synergex.SynergyDE.synxml NuGet package reference. (To fix this problem, we strong-signed assemblies that are part of Synergex.SynergyDE.synrnt NuGet package.)
An access violation no longer occurs when returning a literal for a method whose return type is an array of boxed alphas.
Using a Windows drive-relative path specification (e.g., c:prog.exe) now runs the expected program when running ctutl.exe, ismvfy.exe, or irecovr.exe. 
Freeing a snapshot (down to 1 or 0 remaining snapshots) previously could cause DELETE entries to be malformed, causing a file verify (isutl -v) to report a data mismatch with leaf or invalid RFA errors. This has been fixed.
A level 4 ATOS warning ("Passing alpha to structure requires alpha of at least structure size") now occurs when a group or record is passed as an argument to a larger structure parameter.
A warning has been added to the 32-bit traditional Synergy compiler. (It does not apply to 64-bit traditional.) For addition, subtraction, multiplication, and division between two values, a W-INVCAST warning ("Invalid cast") will now be given if casting one or both values to i8. However, the warning will not be given if either value is already an i8 field, literal, etc. The purpose of this warning is to indicate that casting to i8 has no effect on whether the current expression does 32-bit or 64-bit math; actual i8 variables should be used instead. To disable this warning, pass the option -WD=699 to the compiler.
Previously, when ctutl was used on low-overhead change tracking data (e.g., with no duplicates or fixed-length records), records that were freed by either the free or rollback operation were deposited in the free list with a partially cleared free list link, causing an %ISUTL-E-28: Data freelist error. This has been fixed.
The correct SnapshotInfo entries are now loaded into the ChangeTracking object that are reflected in the file. There is always one and only one entry of SSType Beginning, which contains the earliest snapshot number (either the initial 0 or the last freed snapshot) with DateTime representing the time of file creation, last clear, or last freed snapshot) with all Inserts, Updates, Deletes, and Ulinks set to 0. For each applied snapshot, there is one SSType Snapshot that will contain its unique snapshot number, the datetime it was applied, and all Inserts, Updates, Deletes, and Ulinks that were recorded while that snapshot number was the current snapshot (or SSType Ending) prior to that snapshot being applied. Lastly, there is always one and only entry of SSType Ending whose snapshot number is the current snapshot (the snapshot currently recording changes to the file) with DateTime representing the time the ChangeTracking object was created (or the time the last Refresh() method was called) with Inserts, Updates, Deletes, and Ulinks reflecting the changes since the last applied snapshot. Due to this change, use of these snapshot entries may result in different behavior. Prior behavior included change accumulators always being recorded in the prior snapshot and never including the last snapshot entry.
When a string variable is used as the loop element for a FOREACH loop and the collection is a real array of type alpha, a new TYPMISMCH error ("Type mismatch between type and type") will be reported to avoid an issue at runtime. The user can change the string variable to an alpha variable in order to get the loop to work.
A level 4 W_PASSUR warning ("Passing alpha to group of larger size for parameter <#parmnum> could give unexpected results") now occurs when an alpha field, group, or record is passed as an argument to a larger parameter group.
The parser no longer reports an unexpected E_INVTYPSIZ error due to an earlier FOREACH-AS statement.
When you run isutl -c, you will now be prompted to confirm with "y" or "n" that you want to clear the ISAM file. If your file specification includes a wildcard, for each file, you'll be prompted, "You are about to clear filename. Do you wish to continue: (Yes/No/All/Quit)?" Answering "y" means clear this file, "n" means do not clear this file, "a" means clear this and all subsequent files, and "q" means do not clear this file and quit now. We also added a -y option to isutl -c, which suppresses the confirmation query by automatically responding "y".

xfODBC

We fixed a problem in the xfdba utility that caused it to report an invalid character when initializing users and groups or setting a blank password for a user.

xfServer

We enhanced the xfServer logging that occurs during log-in failure to help diagnose RUSER setting problems. We also updated the Synergy/DE documentation with clarifications on using the setruser utility and RUSER environment variable. 
SDI - 2024.07.1696
July 3, 2024

Visual Studio Integration

We added templates for the "Multiple Mainline (.NET)" and "Multiple Mainline (.NET Framework)" project types to the Synergex.Projects.Templates NuGet package.
The "dotnet add" and "dotnet add reference" commands are now supported for all project templates in Synergex.Projects.Templates.
We fixed an issue that caused Visual Studio to crash intermittently when editing DBL files in traditional Synergy projects. This issue was caused by a threading-related access violation in DBL’s IntelliSense processing.
We fixed an issue with IntelliSense-related processing for SDI that caused unintended errors and red squiggles to appear intermittently (though these did not affect builds).
We fixed an issue that prevented conditional breakpoints from working with Synergy .NET projects. 
We fixed an issue that caused a "missing method" exception at runtime when using JsonElement's indexer. This fix also prevents NOPRPMTH errors from occurring when property method names differ in case from "get" and "set" (e.g., "Get" or "Set") and the property is from another assembly.
We fixed a mismatch between the name of the .dbl file that's added to a newly created traditional Synergy unit test project created using the syTradUnitTestProj template (in the Synergex.Projects.Templates NuGet package) and the .dbl file specified in the .synproj file for the project.
We fixed an issue that sometimes caused an error when a build was stareted in Visual Studio while project property pages were open. 
We fixed a problem with the SynNETUnitTest project template (in the Synergex.Projects.Templates NuGet package) that caused projects created from this template to have an incorrect import statement.
We improved SDI's problem manager logging by implementing a log rotation mechanism that prevents memory leaks.
New and unexpected %DBL-E-REFTYPMSMC errors no longer occur after updating SDI when there have been no source changes.
We fixed an issue that prevented Start Debugging from working in Visual Studio 2022 version 17.10.x.
An access violation no longer occurs when returning a literal string for a method whose return type is a boxed alpha array.
We fixed a Synergy .NET compiler issue that resulted in an access violation for an overloaded method with a parameter that was an array of boxed bytes.
Synergy/DE - 12.3.1.1018
LTS
June 28, 2024

License Manager

We now prevent a bad registration string starting with "AAAAAAA" from putting a system into a forced expiration due to a registration string mismatch. Instead, we just log the fact that it was encountered.
Using lmk -nc <server> no longer erroneously updates a local machine's registry when <server> has a backup server. This fix avoids subsequent licensing issues for version 10.1 or older clients.

Synergy Language

In the traditional compiler, using the Json.JsonElement.ValueKind property of system enumeration across many sources in the same compilation unit no longer causes an access violation.
 We fixed an access violation in dblproto that occurred when prototyping multi-mainline projects.
Using %INTEGER with magnitude 8 on a 32-bit system now returns the full i8 value.

xfODBC

If a query generates a sort file and the query fails due to a timeout or sort buffer overflow error, the vtx4 driver now deletes the sort file as expected instead of leaving it after the connection is closed.
Timeouts set with "SET OPTION TIMEOUT" will now correctly apply to all queries that haven't fetched any rows within the specified time. Note that this timeout applies to each fetch operation but not to the total length of time for a query. (In other words, massive result sets will still take a long time to return, regardless of timeout value.)
SDI - 2024.05.1447
May 3, 2024

Visual Studio Integration

SDI now supports Synergy .NET projects with multiple Synergy mainline programs. As part of this support, SDI includes two new project templates, “Multiple Mainline (.NET)” and “Multiple Mainline (.NET Framework)”, that enable you to create .NET 6+ or .NET Framework projects with multiple Synergy mainline programs that share project settings and references. A project created with one of these templates results in an application that is distributed as multiple EXEs. Each mainline source file results in a separate executable that can be run and debugged separately.
We added an experimental option to reduce load times for Synergy projects. To invoke this feature, set the SDI_FAST_MODE environment variable to any value before starting Visual Studio. Note that this functionality may cause project references to load in an incorrect order, which could put a project in an invalid state.
We now prevent a NullReferenceException error at runtime when declaring a sized descriptor parameter on an ASYNC method.
The compiler for Synergy .NET now reports an IVBAD error if an initial value is provided for a boxed enum or an array of boxed enums.
We resolved problems with IntelliSense showing unexpected errors/red squiggles on the wrong line when opening a file in the Visual Studio editor.
Casting an enumeration property to an integer no longer causes an error to occur when the compiled program is checked with PEVerify or ILVerify.
We reinstituted a warning message the displays when prototype files (.dbp files that are used internally for IntelliSense symbols) are locked for I/O for extended periods. 
We fixed an issue that prevented colorization from being refreshed for code in an .IFDEF statement when the .IFDEF condition was modified.
When the final parameter for a routine call is "end", and this is on a separate line that begins with an ampersand (&), IntelliSense no longer mistakenly interprets "end" as the conclusion of a BEGIN-END block. Previously, this was misinterpreted, resulting in incorrect indentation for subsequent lines of code.
We fixed the parser to properly report a lambda syntax error when the return type is incorrectly declared on a lambda.
With Synergy .NET, the "Working Directory" setting, which is set on the Application page of project properties, is now stored as a relative path (relative to the solution directory).
We fixed an issue that caused unexpected results for arithmetic operations such as subtraction with two i4 variables that had been cast to i8.
The Synergy .NET compiler no longer mistakenly reports an E_NTTREF error for a parameter that is a structure from an assemble and that structure is defined in a namespace that has a class with the same name as the namespace.
We fixed an issue that caused a NOTSUPT error ("due to incorrect size...") when there is a structure is within a record, group, or structure. Additionally, the workaround for this issue (DBLDIR:\bin\dblnet.hcs) is no longer supported.
Synergy .NET Framework projects now support the PackageReferences NuGet package management format. 
The compiler for Synergy .NET now reports an E_NOSPECL error when the braces for an inline lambda expression are missing.
We improved logging that occurs when a catastrophic failure occurs while a background compile is running to generate IntelliSense symbols for a .NET or .NET Framework project. This logging now writes the error text to the background.log file to make it easier to diagnose background compile failures with these platforms.
We fixed an issue that sometimes caused the error "SynergyTasks.DBLinkT task failed unexpectedly" when building a solution.
We fixed an issue where the Synergy DBL text editor formatting options did not get applied until the Tools > Options dialog page had been opened.
We fixed an issue that sometimes prevented IntelliSense from loading for Synergy .NET projects.
We fixed an issue that occurred when casting multiple function arguments to a Synergy integer type. Previously, a value cast in the last argument replaced values for the previous arguments in the same statement.
We fixed an issue that prevented the debugger from breaking on breakpoints that precede a lambda in an ASYNC method.
A FOREACH loop with an implicit element type sometimes caused an internal compiler error if the element type was a user-defined nested class declared after the loop in the same file. FOREACH loops now infer the type properly regardless of where the element class is placed in the file.
Synergy/DE - 12.3.1.1014
LTS
March 8, 2024

License Manager

The Synergy License Manager will no longer freeze (blocking license clients such as dbl, dbr, dbs, etc.) when running certain Linux programs (like tmux).

SQL Connection

We fixed a regression with SQL Connection (introduced in Synergy/DE 12.1.1.3292) that could cause a memory leak when connecting to SQL Server, resulting in excessive memory usage over time.

Synergy Language

We fixed an issue with the traditional debugger that caused a segmentation fault when debugging a program in Visual Studio. A check for the length of a data chunk was updated to mitigate the issue that occurred during processing of debug information and resulted in invalid memory access.
We fixed a problem in the Synergy HTTP document transport API that could cause a socket timeout when making an HTTPS request using a proxy..
We resolved an issue with the traditional debugger that occurred during an attempt to run the same OPENELB command multiple times. After saving debugger settings by running the SAVE command, the output file contains only the unique ELBs that were opened during the debugging session.
(.NET) We fixed a Stack Overflow exception in the HTTP document transport API that occurred when sending large documents in post, put, patch, and delete requests by updating the way we allocate memory for documents in the request.
When SYN_RESIZE_SCALE was used, window elements often had incorrect dimensions when windows were restored from maximized. The dimensions of the window and its components should now be consistent after restoration.

UI Toolkit

In 11.1.1c through 12.1.1.3292, the default font for the status bar was incorrectly changed from Arial to Consolas. (Consolas is a monotype font, while Arial is a proportional font.) Arial is now used by default.
In versions 11.1.1c through 12.1.1-3292, the default button size was 10, which caused size and scaling problems for existing applications that expected it to be 9 as in prior versions. This default button size is now 9 again. As most customers default to Consolas;10 from the default app size, they can add BUTTON=SYSTEM;10;A in the font section of synergy.ini to restore the post-11.1.1c behavior. If SYN_RESIZE_SCALE is used, ARIAL;10;A is preferred to SYSTEM:10:A.
When using the new BUTTON= in the fonts section of synergy.ini, a size other than 9 or 10 did not result in correct button sizing. This has been fixed.