From 4db4e73eaeacaccbc93c7ec38e636f5ce196e9d3 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Thu, 17 Nov 2022 23:27:53 +0100 Subject: [PATCH] Build 2.14 for beta testers --- XSharp/docs/Topics/VersionHistory.xml | 1037 +++++++++++++------------ 1 file changed, 522 insertions(+), 515 deletions(-) diff --git a/XSharp/docs/Topics/VersionHistory.xml b/XSharp/docs/Topics/VersionHistory.xml index 7e00936d44..b25d75c513 100644 --- a/XSharp/docs/Topics/VersionHistory.xml +++ b/XSharp/docs/Topics/VersionHistory.xml @@ -15,7 +15,7 @@ Changes in 2.14.0.0 Compiler Bug fixes - +
  • Fixed a problem resolving methods when a type  and a local have the same name (#922)
  • Improved XML doc messages for methods implicitly generated by the compiler (INITs, implicit constructors) (#1128)
  • Fixed an internal compiler error with DELEGATEs with default parameter values (#1129)
  • @@ -32,8 +32,12 @@
  • Fixed a problem in the CLOSE ALL and CLOSE DATABASES UDC.
  • Runtime + New Features + +
  • Added 2 new values to the DbNotificationType enum: BeforeRecordDeleted and BeforeRecordRecalled. Also added AfterRecordDeleted and AfterRecordRecalled which are aliases for the already existent RecordDeleted and RecordRecalled (#1174)
  • +
    Bug fixes - +
  • Added/updated several defines in the Win32API SDK library (#696)
  • Fixed a problem with "SkipUnique" not working correctly (#1117)
  • Fixed an RDD scope problem when the bottom scope is larger than the highest available key value (#1121)
  • @@ -49,14 +53,15 @@
    Visual Studio integration New Features - +
  • Now using the "Reference Manager" instead of the "Add Reference Dialog Box" for adding References (#21, #1005)
  • Added an option to the Solution Explorer context menu to split a Windows Form in a form.prg and form.designer.prg (#33)
  • -
  • We have added an options page to the Tools / Options TextEditor/X# settings that allows you to enable/disable certain features in the X# source code editor, such as "Highlight Word", "Brace Matching" etc.
  • +
  • We have added an options page to the Tools / Options TextEditor/X# settings that allows you to enable/disable certain features in the X# source code editor, such as "Highlight Word", "Brace Matching" etc. The option to backup the source code for the Windows Forms Editor has been moved from the Texteditor options page to the Custom Editor options page. Search for 'Backup" in the Tools/Options dialog to find the setting.
  • Tooltips for all source code items now contain the Location (file name and the line/column).
  • +
  • We have added "search keywords" to all of our option page. you may be able to find a page by typing the keyword that you are looking for in the search control.
  • Bug fixes - +
  • Fixed  a problem renaming files when a solution is under SCC with Team Foundation Server (#49)
  • The WinForms designer now ignores differences in the namespaces specified in the form.prg and designer.prg files (the one from form.prg is used) (#464)
  • Fixed incorrect mouse tooltip for a class in some cases (#871)
  • @@ -79,35 +84,37 @@
  • Fixed a problem when completing the member completion list without selecting an item (#1171)
  • Fixed a problem with showing member completion on types of static members of a class (#1172)
  • Fixed a problem with the indentation after single line entities, such as GLOBAL, DEFINE, EXPORT etc. (#1173)
  • +
  • Fixed a problem with parameter tips for extension methods (#1175)
  • +
  • Fixed a problem with tooltips for namespaces and nested classes (#1176)
  • Optional tokens in UDCs were not colored as Keyword in the source code editor
  • Fixed a problem in the CodeDom provider that failed to load on a Build Server because of  a dependency to Microsoft.VisualStudio.Shell.Design version 15.0 when generating code for WPF projects.
  • Changes in 2.13.2.2 Compiler Bug fixes - +
  • Class members declared with only the INSTANCE modifier were generated as public. This has been changed to protected, just like in Visual Objects (#1115)
  • Runtime Bug fixes - +
  • IVarGetInfo() returned incorrect values for PROTECTED and INSTANCE members. This has been fixed.(#1116)
  • The Default() function was changing usual variables initialized with NULL_OBJECT to the new value. This was not compatible with Visual Objects (#1119)
  • Visual Studio integration New Features - +
  • The Rebuild Intellisense Database menu option now asks for confirmation before restarting Visual Studio (#1120)
  • The "Include Files" node in the solution explorer can now be hidden (Tools/ Options X# Custom Editors/Other Editors)
  • Bug fixes - +
  • The type information for variables declared in a CATCH clause was not available. This has been fixed (#1118)
  • Fixed several issues with parameter tips (#1098, #1065)
  • Fixed a performance issue when the cursor was on a undeclared identifier in a "global" entity such as a function or procedure in VERY large projects
  • The "Include Files" node could contain duplicate references when the source code for an #include statement contained relative paths, such as
    #include "..\GlobalDefines.vh"
  • - +
  • Suppressed the expansion of the "Include Files" node in the Solution Explorer when a solution is opened.
  • Single character words (like i, j, k) were not highlighted with the 'highlight word' feature
  • The type 'ptr' was not marked in the keyword color in quickinfo tooltips
  • @@ -116,12 +123,12 @@ Changes in 2.13.2.1 Compiler New Features - +
  • The parser now recognizes AS <type> clause for PUBLIC and PRIVATE memory variable declarations but ignores these with a warning
  • We have added support for AS <type> for locals declared with LPARAMETERS. The function/procedure is still clipper calling convention, but the local variable is of the declared type.
  • Bug fixes - +
  • The PUBLIC and PRIVATE keywords are sometimes misinterpreted as memvar declarations when the /memvar compiler option is not even selected. We have added parser rules to prevent this from happening: when /memvar is not selected then PUBLIC and PRIVATE are only used as visibility modifiers
  • Fix to an issue with selecting function and method overloads (#1096, #1101)
  • Build 2.13.2.0 introduced a problem that could cause a big performance problem for VERY large source files. This has been fixed in 2.13.2.1.
  • @@ -129,14 +136,14 @@ Runtime Bug fixes - +
  • When the runtime cannot resolve a late bound call to an overloaded method it produces an error message that includes a list of all relevant overloads (#875, #1096).
  • The .NULL. related behavior that was added for the FoxPro dialect was breaking existing code that involves usuals. In the FoxPro dialect DBNull.Value is now seen as .NULL. but in the other dialects as a NULL_OBJECT / NIL
  • Several internal members of the PropertyContainer class in the VFP library are now public
  • Visual Studio integration Bug fixes - +
  • The lookup code for Peek definition, Goto definition etc. was filtering out instance methods and only returning static methods. This has been fixed (#1111, #1100)
  • Several changes to fix issues with indentation while typing (#1094)
  • Fixed several problems with parameter tips (#1098, #1066, #1110)
  • @@ -147,11 +154,11 @@ Changes in 2.13.1 Compiler New Features - +
  • The PUBLIC and PRIVATE statements in the FoxPro dialect now support inline assignments, such as in
    PUBLIC MyVar := 42
    Without initialization the value of the PUBLIC will be FALSE, with the exception of the variable with the name "FOXPRO" and "FOX". These will be initialized with TRUE in the FoxPro dialect
  • Bug fixes - +
  • Fixed a problem with initialization of File Wide publics in the foxpro dialect
  • Column numbers for error messages were not always correct for complex expressions. This has been fixed (#1088)
  • Corrected an issue in the lexer where line numbers were incorrect when the source contains statements that span multiple lines (by using a semicolon as line continuation character) (#1105)
  • @@ -161,20 +168,20 @@ Runtime New Features - +
  • Added functions to resolve method calls or array access at runtime  (#1108)
  • Added GoTo record number functionality to the WorkareasWindow in the XSharp.RT.Debugger library
  • Visual Studio Integration New Features - +
  • Now the VS Project tree shows (in a special node) include files that are used by a project (#906).
    This includes include files inside the project itself but also include files in the XSharp folder or Vulcan folder (when applicable).
  • We are using the built-in images of Visual Studio in the project tree and on several other locations when possible.
  • Our background parser inside VS is now paused during the built process to interfere less with the build.
  • We have added a setting to the indentation options so you can control the indentation for class fields and properties separately from methods.
    So you can choose to indent the fields and properties and to not indent the methods. This has also been added to the .editorconfig file
  • Bug Fixes - +
  • Fixed problems with Peek Definition and Goto Definition
  • When looking up Functions we were (accidentally) sometimes also including static methods in other classes.
  • When parsing tokens for QuickInfo and Peek Definition then a method name would not be found if there was a space following the name and before the open parenthesis.
  • @@ -186,18 +193,18 @@ Changes in 2.13 Compiler New Features - +
  • We have implemented a new compiler option /allowoldstyleassignments, which allows using the "=" operator instead of ":=" for assignments.
    This option is enabled by default in the VFP dialect and disabled by default in all other dialects.
  • - +
  • We have revised the behavior of the /vo4 and /vo11 command line options that are related to numeric conversions.
    Before /vo4 only was related to conversions between integral numbers. It has now been extended to also include conversions between fractional numbers (such as float, real8, decimal and currency) and integral numbers.
    In the original languages (VO, FoxPro) you can assign a fractional number to a variable with integral value without problems.
    In .Net you can't do that but you will have to add a cast to the assignment:
  • LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // no conversion: this will not compile in .Net without conversion
    integerValue := (INT) floatValue    // explicit conversion: this does compile in .Net
    ? integerValue

    If you enable the compiler option /vo4 then the assignment without the cast will also work.
    The /vo4 compiler option adds an implicit conversion
    In both cases the compiler will produce a warning:
    warning XS9020: Narrowing conversion from 'float' to 'int' may lead to loss of data or overflow errors
    The value of the integer integerValue above is controlled by the /vo11 compiler option:
    By default in .Net conversions from a fractional value to an integer value will round towards zero, so the value will then be 1.
    If you enable the compiler option /vo11 then the fractional number will be rounded to the nearest even integral value, so the value of integerValue in the example will be 2.
    This is not new.
    We have made a change in build 2.13, to make sure that this difference is no longer determined at runtime for the X# numeric types but at compile time.
    In earlier builds this was handled inside conversion operators from the FLOAT and CURRENCY types in the runtime.
    These classes choose the rounding method based on the /vo11 setting from the main program which is stored in the RuntimeState object.
    However that could lead to unwanted side effects when an assembly was compiled with /vo11 but the main program was not.
    This could happen for example with ReportPro or bBrowser.
    If the author of such a library now chooses to compile with /vo11 then he can be certain that all these conversions in his code will follow rounding to zero or rounding to the nearest even integer, depending on his choice.
    - +
  • The DebuggerDisplay attribute for Compile Time Codeblocks has changed. You now see the source code for compile time codeblocks in the debugger.
  • Bug fixes - +
  • Fixed a code generation issue with ASYNC/AWAIT (#1049)
  • Fixed an Internal compiler error with Evaluate() in CODEBLOCK in VFP dialect (#1043)
  • Fixed an Internal compiler error with UDCs incorrectly inserted after an END FUNCTION statement
  • @@ -224,7 +231,7 @@ Runtime Bug fixes - +
  • Fixed some incompatibilities with VO in the Mod() function
  • Fixed an exception with Copy to array in the VFP dialect when dimensions do not match (#993)
  • Fixed a seeking problem with SetDeleted(TRUE) and DESCEND order (#986)
  • @@ -238,7 +245,7 @@
    New Features - +
  • Enhancements for Unicode AnyCpu SQL classes (#1006):
  • Added a property to open a Sqlselect in readonly mode. This should prevent Append(), Delete() and FieldPut()
  • Implemented delay creating InsertCmd, DeleteCmd, UpdateCmd until really needed
  • @@ -248,12 +255,12 @@ FoxPro dialect - +
  • Added ADatabases() function
  • Visual Studio Integration New features - +
  • You can now control how indenting is done through the Tools/Options Text Editor/X# option pages. We have added several options that control indenting of your source code. You can also set these from an .editorconfig file if you want to enforce indenting rules inside your company.
  • We have now added extensive code formatting options to the source code editor. See Tools/Options/Text Editor/X#/Indentation for available options (#430)
  • We have implemented the option "Identifier Case Synchronization". This works as follows: The editor picks up the first occurrence of an Identifier (class name, variable name etc) in a source file and make sure that all other occurrences of that identifier in the same source file use the same case. This does NOT enforce casing across source files (that would be way too slow)
  • @@ -263,7 +270,7 @@
    Bug fixes - +
  • Fixed a problem with Get Latest Version for solution that is under TFS (#1045)
  • Fixed WinForm designer changing formatting in main-prg file (#806)
  • Fixed some problems with code generation in the WinForms designer (#1042, #1052)
  • @@ -284,13 +291,13 @@
  • Right Click on a packages.config file and choosing the option "Migrate to packagereferences" did not work because inside Visual Studio there is a hardcoded list of supported project types. We are now "faking" the projecttype to make VS happy and enable the wizard.
  • Build System - +
  • The XSharp.Build.Dll, which is responsible for creating the command line when compiling X# projects in VS, was not properly passing the /noconfig and /shared compiler options to the compiler. As a result the shared compiler was not used, even when the project property to use the Shared Compiler was enabled. Also the compiler was automatically including references to all the assemblies that are listed inside the file xsc.rsp, which is located inside the XSharp\bin folder.
    You may experience now that assemblies will not compile because of missing types. This will happen if you are using a type that is inside an assembly that is listed inside xsc.rsp. You should add explicit references to these assemblies in your X# project now.
  • Changes in 2.12.2.0 Compiler Bug fixes - +
  • Fixed a bug in the code generation for handling FoxPro array access with parenthesized indices (#988, #991)
  • The compiler was generating incorrect warnings for locals declared with IS. This has been fixed.
  • The compiler was not reporting an error on invalid usage of the OVERRIDE modifier on ACCESS/ASSIGNs, this has been fixed (#981)
  • @@ -303,21 +310,21 @@
  • Fixed a problem with PCount() when passing a single NULL argument to a CLIPPER function/method (#1016)
  • New Features - +
  • We have added support for the TEXT .. ENDTEXT command in all dialects. Please note that there are several variations of this command. One variation work in ALL dialects (TEXT TO varName). Other variations depend on the dialect chosen. We have moved the support for TEXT .. ENDTEXT now also from the compiler to the preprocessor. This means that there are also 2 new preprocessor directives, #text and #endtext (#977, #1029)
  • Implemented new compiler option /vo17, which implements a more compatible to VO behavior for the BEGIN SEQUENCE..RECOVER command (#111, #881, #916):
  • - +
  • For code that contains a RECOVER USING, a check is made for wrapped exceptions. When the exception is not a wrapped exception then a function in the runtime is called (FUNCTION _SequenceError(e AS Exception) AS USUAL) that can process the error. It can for example call the error handler, or throw the error
  • When there is no RECOVER USING clause , then the compiler generates one and from within this generated clause detects if the RECOVER was reached with a wrapped exception or a normal exception. For wrapped exceptions it gets the value and calls a special function in the runtime (FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID). When the generated recover is called with a 'normal' exception then _SequenceError function from the previous bullet is called.
  • - +
  • We have added support for CCALL() and CCALLNATIVE()
  • The #pragma directives are now handled by the preprocessor. As a result you can add #pragma lines anywhere in your code: between entities, inside the body of an entity etc.
  • Runtime Bug fixes - +
  • Changed the prototype for AdsGetFTSIndexInfo (#966)
  • Fixed a problem with TransForm and decimal types (#1001)
  • Added several missing return types in the VFP assembly
  • @@ -333,16 +340,16 @@
  • Foreach was not working correctly on properties containing collections that were returned from a late bound property access such as IVarGet()(#1033)
  • New Features - +
  • You can now register a delegate in the runtime state that allows you to control how the macro compiler caches types from loaded assemblies( #998).
    This delegate has to have the format:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    Example:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // do not cache DevExpress assemblies
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • Compatible VO SDK - +
  • Fixed an issue where SetAnsi(FALSE) causes SingleLineEdit controls with pictures to show random characters when entering umlauts (#1038)
  • Typed VO SDK There are 2 new properties for the SQLSelect class. - +
  • ReadOnly - which makes the SQLSelect Readonly
  • BatchUpdates - which controls how updates are handled
  • @@ -350,12 +357,12 @@ Previously the SQLSelect class created DbCommand objects to update, insert and delete changes made to a cursor immediately when the result set was opened.
    That could cause problems when a complex query was used to select data, because the DbCommandBuilder object could not figure out how to create these statements.
    We are now delaying the creation of these commands until the first time they are needed.
    At the same time we have now added a ReadOnly property with a default value of FALSE.
    If you set ReadOnly to true then: - +
  • Calling FieldPut(), Delete() and Append() will generate an error with Gencode EG_READONLY.
  • No Command objects will be created for the SQLSelect, because the cursor cannot be updated.
  • If ReadOnly remains FALSE then the command objects to update, insert and delete will be created the first time they are needed.
    These commands are created in the __CreateDataAdapter() method.
    You can override this method and create the commands in your own subclass when you want.
    The command creation and the updates work as follows:
    - +
  • First a DataAdapter (of type DbDataAdapter) is created using the CreateDataAdapter method from the SQLFactory class
  • Then a CommandBuilder object (of type DbCommandBuilder) is created from the CreateCommandBuilder method of the SQLFactory class
  • Then the Insert, Delete and Update Command objects (all of type DbCommand) are created from the GetInsertCommand() etc methods from the DbCommandBuilder object. The DBCommandBuilder object takes the Select statement and creates commands with parameters based on the SQLSelect command
  • @@ -366,7 +373,7 @@ If you set the BatchUpdates property to TRUE then the SQLSelect will delay sending updates to the server and will not do that for each record movement, but will wait until you call the Update() method with an argument TRUE. This will then write all the buffered changes to the server. This may then also trigger the creation of the DBCommand objects (see before).
    If your table has autoincrement fields then you may want to call Requery() afterwards to see the newly assigned key values.
    Visual Studio Integration Bug fixes - +
  • Fixed the handling for project property pages for flavored projects (#992)
  • When trying to start the debugger with a non existing working directory or program file name, now an appropriate error is displayed (#996)
  • Fixed a problem with the form designer generating sometimes invalid code with #regions (#1020, #935)
  • @@ -376,7 +383,7 @@
  • Fixed problem with windows forms editor failing to open form with command based on UDC (#1037)
  • Sourcecode Editor - +
  • Type lookups on full names were sometimes failing because the fullname was defined as case sensitive (#978)
  • Nested type lookup was sometimes failing. This has been fixed.
  • The indenting options can now also be overridden in the .editorconfig file (#999)
  • @@ -393,12 +400,12 @@
  • Pressing CTRL+SPACE in the editor now always invokes a code completion list (#957)
  • New Features - +
  • Added options to insert page and reorder pages in a tabcontrol, in the VOWED (#1024)
  • We have updated the WPF Application template. The Main window is now called  "MainWindow".
  • Added the following new settings to the .editorconfig file to set indentation options ( #999).
  • - +
  • indent_entity_content (true or false)
  • indent_block_content (true or false)
  • indent_case_content (true or false)
  • @@ -407,13 +414,13 @@
    VOXporter - +
  • The VOXporter now correctly enabled or disables the Allow MEMVAR/Undeclared vars compiler options, if they were enabled in the VO app (#1000)
  • Changes in 2.11.0.1 Compiler Bug fixes - +
  • Fixed an internal compiler error with CLIPPER calling convention delegates (#932)
  • Fixed an AccessViolationException at runtime with the Null-conditional operator ?. on a usual property (#770)
  • [XBase++ dialect] Fixed a problem with parsing method declarations with parentheses (#927)
  • @@ -430,7 +437,7 @@
  • Fixed a problem that could lead to the "Could not emit module" error message, caused by NULL values inside IIF() expressions(#989)
  • New features - +
  • Added compiler option /noinit to not generate $Init calls for libraries without INIT procedures for the sake of postponed loading (#854)
  • Added preprocessor support for #stdout and #if. (#912)
  • The full contents of #include files is now written to the ppo file (#920)
  • @@ -441,12 +448,12 @@
    Visual Studio Integration New features - +
  • The source code editor now also supports the new #if and #stdout preprocessor commands  (#912)
  • There is new "Lightbulb" option to generate constructors for classes.
  • Bug Fixes - +
  • Fixed a problem with specifying custom preprocessor defines in the project properties (#909)
  • The VO-style editors now retain existing "CLIPPER" clause to methods/constructors when generating code (#913)
  • Fixed incorrect parsing of classes as nested to each other (#939)
  • @@ -462,7 +469,7 @@
    Runtime New features - +
  • Added a constructor with IEnumerable to the array class (#943)
  • Implemented missing functions AdsSetTableTransactionFree() and AdsGetFTSIndexInfo() (#966)
  • Moved functions GetRValue(), GetGValue() and GetBValue() from the Win32API library to XSharp.RT, so they can be used by AnyCPU code (#972)
  • @@ -472,7 +479,7 @@
  • [VFP dialect] Implemented commands MKDIR, RMDIR and CHDIR (#614)
  • Bug fixes - +
  • Fixed a problem with the ListView TextColor and TextBackgroundColor ACCESSes in the SDK (#896)
  • Fixed a problem with soft Seek not respecting order scope when to strict key is found (#905)
  • Fixed DBUseArea() search logic for files in various folders. Also SetDefault() is no longer initialized with the current directory (for VO compatibility) (#908)
  • @@ -491,25 +498,25 @@
  • [VFP dialect] Fixed a problem with SCATTER TO and APPEND FROM ARRAY (#821)
  • Typed SDK - +
  • Fixed a problem with the FileName property of standard open dialogs
  • Fixed a problem with a FOREACH inside the Menu constructor causing handled exceptions
  • RDD Bug fixes - +
  • Fixed a problem in the DBFVFP RDD with the calculation of the keysize of nullable keys (#985)
  • VOXporter Bug fixes - +
  • Fixed incorrectly detecting pointers to functions inside literal strings and comments (#932)
  • Changes in 2.10.0.3 Compiler Bug fixes - +
  • Fixed some problems with COPY TO ARRAY command in the FoxPro dialect (#673)
  • Fixed a problem with using a System.Decimal type on a SWITCH statement (#725)
  • Fixed an internal compiler error with Type() in the FoxPro dialect (#840)
  • @@ -520,7 +527,7 @@
  • Fixed a problem resolving parameters passed by reference with the @ operator when the function/ method had a parameter of the pointer type (#899, #902)
  • New features - +
  • Added compiler option (-enforceoverride) to make the OVERRIDE modified mandatory when overriding a parent member (#786, #846)
  • The compiler now reports an error when using String2Psz() and Cast2Psz() in a non local context (since such PSZs are being released on exiting the current entity) (#775)
  • FUNCTIONs and PROCEDUREs now support the ASYNC modifier (#853)
  • @@ -531,21 +538,21 @@
    Build System Bug Fixes - +
  • Running MsBuild on a X# WPF project could fail (#879)
  • Visual Studio Integration New features - +
  • We have added Visual Studio integration for VS 2022
  • We have added support for Package References
  • Now XML comments are automatically inserted in the editor when the user types "///". (#867, #887) Conditions:
  • - +
  • Cursor must be on a line before the start of an entity
  • Cursor must NOT be before a comment line
  • - +
  • Now the tooltip on a class includes also information about the parent class and implemented interfaces (if any) (#860)
  • We have added tooltips, parameter completion etc for the pseudo functions that are built into the compiler, such as PCount() and String2Psz().
  • We have added a first version of Lightbulb tips. For now to implement missing interface members and to convert a field to a Property. More implementations and configuration options will follow
  • @@ -555,7 +562,7 @@
  • We have added 'Brace Completion' to the editor
  • Bug Fixes - +
  • Fixed some problems with the Format Document command (#552)
  • Fixed several issues with Parameter Tooltips (#728, #843)
  • Fixed problem with code completion list showing even for not defined vars/identifiers (#793)
  • @@ -581,7 +588,7 @@
    Runtime Bug fixes - +
  • Fixed DBFCDX corruption that could happen with simultaneous updates (#585)
  • Fixed a problem opening FoxPro tables with indexes on nullable fields (#631)
  • The BlobGet() function was returning a LOGIC instead of the actual field value (#681)
  • @@ -602,7 +609,7 @@ Changes in 2.9.1.1 (Cahors) Compiler Bug fixes - +
  • Fixed a problem introduced in 2.9.0.2 with define symbols not respecting the /cs compiler option in combination with the /vo8 compiler option (#816)
  • Fixed an internal compiler error with assignment expressions inside object initializers when the /fox2 compiler option is enabled (#817)
  • Fixed some problems with DATEs in VOSTRUCTs (#773)
  • @@ -610,14 +617,14 @@
  • Fixed a problem compiling UDCs such as SET CENTURY &cOn because cOn was not parsed as an identifier but as a keyword.
  • New features - +
  • There is a new result marker (the NotEmpty result marker) in the preprocessor that does the same as the regular result marker, but writes a NIL value to the output when the (optional) match marker is not found in the input.
    This can be used when you want to make the result a part of an IIF() expression in the output, since the sections inside an IIF expression may not be empty.
    The result marker looks like this: <!marker!>
  • Using a Restricted match marker as the first token in an UDC was not allowed before. This has been fixed. You can now write a rule like this, which will output the keyword (SCATTER, GATHER or COPY) followed by the stringified list of options.
  • #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // is preprocessed into ? "SCATTER" , "TO TEST"
       RETURN
    Visual Studio Integration Bug Fixes - +
  • Fixed a problem introduced in 2.9.0.2 with code generation for WPF projects (#820)
  • Fixed a VS freezing problem after building (#819)
  • Fixed some problems with code collapsing and the navigation bar for source files that contains a SELF property (#825)
  • @@ -640,7 +647,7 @@
    New features - +
  • We have added a context item to the project context menu in the solution explorer to edit the project file. This will unload the project when needed and then open the file for editing.
  • The Rebuild Intellisense Database menu option in the Tools/XSharp menu now unloads the current solution, deletes the intellisense database and reopens the solution to make sure that the database is recreated correctly.
  • We have made some changes to the process that parses the source code for a solution in the background.
  • @@ -648,7 +655,7 @@
    Runtime New features - +
  • Added missing ErrorExec() function (#830)
  • Added support for BlobDirectExport, BlobDirectImport, BlobDirectPut and BlobDirectGet (#832)
  • Fixed a problem with creating DBF files with custom file extension. Also added support for _SET_MEMOEXT (#834)
  • @@ -657,7 +664,7 @@ Bug Fixes - +
  • Fixed a problem with _PrivateCount() throwing an InvalidateOperationException (#801)
  • Fixed a problem with member completion in the editor sometimes showing methods of the wrong type (#740)
  • Fixed some problems with the ACopy() function (#815)
  • @@ -665,40 +672,40 @@
    Macro compiler New features - +
  • Added support for the & operator (#835)
  • Added support for parameters by reference (both @ and REF are supported) for late bound method calls (#818)
  • VOXporter Bug Fixes - +
  • Fixed problem with incorrectly prefixing PUBLIC declarations with "@@"
  • Changes in 2.9.0.2 (Cahors) Compiler New features - +
  • The parser now supports class variable declarations and global declarations with multiple types(#709)
  • EXPORT var1 AS STRING, var2, var3 as LONG GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG - +
  • If you are using our parser you should be aware that the ClassVarList rule has disappeared and that the ClassVars, VoGlobal and ClassVar rules have changed.
  • - +
  • We have added a command to fill a foxpro array with a single value
  • STORE <value> TO ARRAY <arrayName> - +
  • When you create a VOSTRUCT or UNION that contains a DATE field, then the compiler will now use the new __WinDate structure that is binary compatible with how DATE values are stored inside a VOSTRUCT or UNION in Visual Objects (#773)
  • It is now possible to use parentheses for (instead of brackets) accessing ARRAY elements in the FoxPro dialect. The compiler option /fox2 must be enabled for that to work (#746)
  • We have added support (for the FoxPro dialect only) for accessing WITH block expressions inside code of a calling function / method. So you can type .SomeProperty and access the property that belongs to a WITH BLOCK expression inside the calling code. To use this Late Binding must be enabled, since the compiler does not know the type of the expression from the calling code (#811).
  • Bug fixes - +
  • When you use the NEW or OVERRIDE modifier for a method where no (virtual) method in a parent class exists an error will now be generated (#586, #777)
  • Fixed a problem with LOGICAL AND and OR for USUAL variables in an array (#597)
  • Error messages and Warnings for some compiler generated code (such as Late bound code) were not always pointing to the right line number, but to the first line in the body of the method or function. This has been fixed. (#603)
  • @@ -723,7 +730,7 @@
    Runtime New Features - +
  • We have added several strongly typed overloads for the Empty() function that should result in a bit better performance (#669)
  • We have added an event handler to the RuntimeState class. This event handler is called "StateChanged" and expected a method with the following signature:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    The StateChangeEventArgs type has properties for the Setting Enum, the OldValue and the NewValue.
    You can use this if you have to synchronize the state between the X# runtime and an external app, for example a Vulcan App, VO App or for example (this is where we are using it) with an external database server, such as Advantage.
  • We have added a new (internal) type __WinDate that is used when you store a DATE value into a VoStruct or Union. This field is binary compatible with the Julian date that VO stores inside structures and unions.
  • @@ -732,7 +739,7 @@
    Bug Fixes - +
  • Fixed a problem (incompatibility with VO) in the Descend() function (#779) - IMPORTANT NOTE: If you are using Descend() in dbf index expressions, then those indexes need to be reindexed!
  • Late bound code that was returning a PSZ value was not correctly storing that inside a USUAL (#603)
  • Fixed a problem in the Cached IO that could cause problems with low level file IO (#724)
  • @@ -747,7 +754,7 @@
  • Fixed a problem with Directory() including files that match by shortname but not by longname (#800)
  • RDDs - +
  • When creating a new DBF with the DBFCDX driver an existing CDX file is not automatically deleted anymore (#603)
  • Fixed a problem with updating memo contents in DBFCDX (#782)
  • Fixed a runtime exception when creating DBFCDX index files with long filenames (#774)
  • @@ -756,12 +763,12 @@
  • Fixed a problem with VODBOrdCreate function failing it the cOrder parameter contains an empty string (#809)
  • Macro compiler - +
  • Fixed a problem in the Preprocessor
  • Added support for parameters passed by reference with the @ operator
  • Added support for M->, _MEMVAR-> and MEMVAR-> prefixes in the macro compiler
  • When the Macro compiler finds 2 or more functions with the same name it now uses the same precedence rules that the compiler uses:
  • - +
  • Functions in User Code are used first
  • Functions in the "Specific" runtimes (XSharp.VO, XSharp.XPP, XSharp.VFP, XSharp.Data) take precedence over the ones inside XSharp.RT and XSharp.Core
  • Functions in XSharp.RT take precedence over functions inside XSharp.Core
  • @@ -771,9 +778,9 @@ In this build we have started to use the "Community toolkit for Visual Studio extensions" that you can find on GitHub. This toolkit contains "best practices" for code for VS Extension writers, like we are. As a result more code is now running asynchronously which should result in better performance. We have also started to remove 32 bit specific code that would become a problem when migrating to VS 2022 which is a 64 bits version if Visual Studio that is expected to ship in November 2021. New features - +
  • Added several new features to the editor
  • - +
  • The editor can now show divider lines between entities. You can enable/disable this in the options dialog (#280)
  • Keyword inside QuickInfo tooltips are now colored (#748)
  • Goto definition now also works on "external" types. The editor generates a temporary file that contains the type information for the external type. In the options dialog you can also control if the generated code should contains comments (as read from the XML file that comes with an external DLL). (#763)
  • @@ -781,16 +788,16 @@
  • You can control which keyword is used for PRIVATE visibility from the Tools/Optons menu entry (PRIVATE or HIDDEN).
  • - +
  • The various code generators inside VS now follow the capitalization rules from the source code editor.
  • The intellisense database now has views that return the unique namespaces in the source code and in the external assemblies
  • The X# specific menu points in the Tools menu have been moved to a separate submenut
  • Added option for the WinForms designer to generate backup (.bak) files of form.prg and form.designer.prg files when saving (#799)
  • Bug Fixes - +
  • Fixed several problems in the editor:
  • - +
  • We have made several improvements to increase the speed inside the editor (#689, #701)
  • Fixed a problem in the type lookup of variables for FOREACH loops (#697)
  • Parameter tips were not shown for methods selected from a completion list (#706)
  • @@ -810,14 +817,14 @@
  • Fixed an editor exception in some cases when typing invalid code (#791)
  • - +
  • The code generator for Windows Forms was replacing tab characters with spaces. This has been fixed.(#438)
  • Fixed a problem with the Form Designer corrupting code that contains EXPORT ARRAY OF <type>
  • Fixed a problem with the Form Designer that when removing an event handler in the editor, some code was deleted (#812)
  • Fixed a problem with the Form Designer converting EXPORT, INSTANCE and HIDDEN keywords to PUBLIC and PRIVATE (#802)
  • VO-Compatible Editors - +
  • Now all VO-compatible editors support full Undo/Redo functionality. Also added cut/copy/paste functionality to the Menu editor
  • Fixed several visual problems with VOWED controls in Design and Test mode (#741)
  • Fixed a VS crash when Alt-Tabbing out of the editors, with the Properties window having focus (#764)
  • @@ -830,13 +837,13 @@ Changes in 2.8.3.15 (Cahors) Compiler New features - +
  • You can now use the .AND. logical operator and .OR. logical operator between variable names or numbers without leading or trailing whitespace (a.AND.b)
  • The PRIVATE declaration in the FoxPro dialect no longer allows an initializer.
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • Bug fixes - +
  • Fixed a problem with a DIM array that uses a DEFINE for its dimension (#638)
  • Fixed a problem with the FoxPro PUBLIC ARRAY command (The ARRAY keyword is no longer mandatory)  (#662).
  • Fixed a problem with DEFAULT(Usual) expressions as parameters for function / method calls (#664)
  • @@ -850,7 +857,7 @@
    Runtime Bug Fixes - +
  • The _shutdown flag in the Runtime State is now set when the system shuts down.
  • Fixed a problem with the FoxPro ALen() function (#650)
  • Added default values on several locations (#678)
  • @@ -861,7 +868,7 @@
    MacroCompiler New features - +
  • You can now use the .AND. operator between variable names or numbers without leading or trailing whitespace
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • Strings containing .AND. and .OR. are no longer reformatted by the macro compiler (#694)
  • @@ -871,11 +878,11 @@
    Please test this new functionality and let us know what you think of it.
    Visual Studio Integration New Features - +
  • "Highlight word" now highlights words in the whole file when the cursor is outside of an entity (for example on the USING statements in the start of the file).
  • Bug Fixes - +
  • Fixed a problem with displaying names of custom controls in the toolbox of the VO compatible Windows Editor
  • Fixed a problem with extra spaces when loading settings from cavowed.inf for the VO compatible Windows Editor
  • Fixed a problem with an incorrect completion list after an assignment statement (#658)
  • @@ -889,13 +896,13 @@
  • Fixed a problem where the incorrect methods were shown in the completion list (#695)
  • Tools - +
  • Fixed an issue in VOXPorter with resources and the copying to the Resources subfolder
  • Changes in 2.8.2.13 (Cahors) Compiler - +
  • Fixed issues with extension methods that were not marked as STATIC (#660)
  • Fixed problem with IIF() expressions that returned an OBJECT and were assigned to a Decimal
  • The pragma commands were not checking for the current dialect
  • @@ -906,7 +913,7 @@
  • Implicit conversions from OBJECT -> NUMERIC are now supported when /vo7 is enabled.
  • Runtime - +
  • Enumerating a USUAL variable in a FOREACH loop will now call a runtime function that returns the ARRAY inside the USUAL or throws an error otherwise (#246)
  • Fixed a problem creating index with an Eval block and 0 records (#619)
  • Fixed an incompatibility with the ALen() function and array handling compared to FoxPro (#642)
  • @@ -921,16 +928,16 @@
    Macro compiler - +
  • Fixed a problem calling functions after a new assembly was loaded with Assembly.Load()
  • Added support for passing variables by references (not yet for functions with Clipper calling convention) (#653)
  • VO SDK - +
  • Fixed a problem in GetObjectByHandle() in the GUI Classes(#677)
  • Visual Studio Integration - +
  • Fixed an exception on the Build Options page inside VS (#654)
  • The project system did not write back the right property for the XML documentation generation (#654)
  • Intellisense could crash in header files (#657)
  • @@ -944,23 +951,23 @@
  • Improved Build Speed in Visual Studio when no files are changed (#675)
  • Tools - +
  • VO Xporter was generating 2 lines in the .xsproj file for the output folder (#672)
  • Changes in 2.8.1.12 (Cahors) Compiler - +
  • Fixed issues with interpolated strings (#598, #622):
  • - +
  • The script compiler now correctly sets the AllowDot compiler option from the current active dialect in the runtime (Core & FoxPro: AllowDot = true)
  • When compiling with DOT(.) as instance method separator then the ":" character is used inside interpolated strings to prefix the format string.
  • When compiling with COLON (:) as instance method separator then the colon can not be used to separate expressions from the format string inside interpolated strings. In that case we now support a double colon (::) between the expression and the format string. For example
  • LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // this diplays num with 2 decimals
    WAIT
    - +
  • You can now use DATE fields inside VOSTRUCT and UNION (#595)
  • Fixed an assertion error 'UnconvertedConditionalOperator' (#616)
  • Fixed an assertion error in the compiler when the namespace "xsharp" is used (#618)
  • @@ -970,7 +977,7 @@
  • Fixed a problem where the "IS Pattern" was not always working correctly for variables of type USUAL (#636)
  • Runtime - +
  • Implemented the FoxPro Evl() function (#389)
  • DbCloseArea() was returning TRUE even when no area was open. This was incompatible with VO. We are returning FALSE now.(#611)
  • Macro compiler was not able to find functions in assemblies that were loaded dynamically (#607)
  • @@ -983,15 +990,15 @@
  • Fixed a problem with the AELement() function (#639)
  • RDD System - +
  • Fixed a problem with indexes on workareas/cursors created with the SqlExec() function when the index expression contained "nullable" fields (#630)
  • Macrocompiler - +
  • The macro compiler had problems finding functions that were inside an assembly that was loaded later (#607)
  • Visual Studio Integration - +
  • Fix problem with saving dialect from General Page
  • Quick info and Goto definition were not working for members inside the same class when they were not prefixed with SELF:
  • Fix code completion for nullable types with the '?' syntax (#567)
  • @@ -1008,14 +1015,14 @@
  • Local variables were not always recognized with their correct type in the editor (#651)
  • Installer - +
  • The installer was adding an incorrect version of XSharp.CodeAnalysis.dll to the Global Assembly Cache. This has been fixed.
  • Changes in 2.8.0.0 (Cahors) Compiler General - +
  • We have migrated to the latest version of the Roslyn source code.
  • Passing a typed variable by reference to a function/method with clipper calling convention (untyped parameters) was not updating the local variable. This has been fixed.
  • Using the @ operator in a program in the VO Dialect when the /vo7 compiler option is NOT enabled could generate code that produces an error "Cannot be boxed". (#551)
  • @@ -1025,16 +1032,16 @@
  • The _SIZEOF() operator will generate a constant now for VOSTRUCTS and UNIONS. (#545)
  • Using a keyword as field name could cause problems. For example FIELD->NEXT was not handled properly. The compiler now allows that. Of course you can also use the @@ prefix to tell the compiler that in a particular case you do not mean the keyword but an identifier.
  • - +
  • Parenthesized expression that contained an expression list were not compiled correctly. This has been fixed.
    This could happen when you wanted to have more than one expression as part of an IIF() expression.
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    Since Roslyn (the C# compiler) does not allow an expression list inside a conditional expression, we are converting the parenthesized expression now to a function call to a local function. The expressions inside the Parenthesized expression become the body of the new local function and the compiler calls the generated local function.
  • The compiler now warns if you call a Function in a class that has a member with the same name. For example
  • CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // This will generate a warning that the function Left() is called and not the method Left().
                             // if you want to call the method you will have to prefix the call with SELF:
    END CLASS
    New language features - +
  • We have added support for LOCAL FUNCTION and LOCAL PROCEDURE statements.
    These functions and procedures become part of the statement list of another function, procedure, method etc. They have the following restrictions:
  • - +
  • A LOCAL FUNCTION must be terminated with END FUNCTION, a LOCAL PROCEDURE must be terminated with END PROCEDURE
  • The full "signature" of normal functions is supported, so Parameters, Return type, Type Parameters and Type Parameter constraints.
  • They cannot have Attributes (they are not compiler into methods but in a special kind of Lambda expression)
  • @@ -1045,24 +1052,24 @@
    - +
  • Added support for Expression bodied members. Expression body definitions let you provide a member's implementation in a very concise, readable form. You can use an expression body definition whenever the logic for any supported member, such as a method or property, consists of a single expression. An expression body definition has the following general syntax:
    MEMBER => expression
    An expression-bodied method consists of a single expression that returns a value whose type matches the method's return type, or, for methods that return void, that performs some operation. For example, types that override the ToString method typically include a single expression that returns the string representation of the current object.
    An example of this could be
  • CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    The result of this code is exactly the same as

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    So you could say that the => operator replaces the RETURN keyword. - +
  • We have added support for the Null Coalescing Operator (??) like C# has as well as the Null Coalescing assignment operator (??=).
    This operator does a check for != null. The operator will only work on Reference types so not on value types like USUAL, DATE and the built-in types like INT.
  • FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // The ?? is the Null Coalescing Operator
    s ??= "abc"               // This is the same as the line before but compacter
    ? s
    RETURN
    // So this will not compile
    LOCAL i := 0 AS LONG
    i := i ?? 42      // Operator '??' cannot be applied to operands of type 'int' and 'int'
    // But this will compile
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    - +
  • We have added support for the Properties with INIT accessors. These accessors allow you to assign a value to a property but only in the constructor. The property will be read only outside of he constructor of the class / structure.
  • We have added a new compiler option /enforceself. When this option is used then all calls to instance methods inside a class must be prefixed with SELF (or SUPER). In the FoxPro dialect THIS is supported too. Please note that some generated code, such as inside the Windows Forms editor does not use SELF: and applying this compiler option may force you to change the generated code, or may force you to add an #pragma options("enforceself", disable) to the code to disable the option for that file.
  • We have added a new compiler option /allowdot. With this option you can control if the DOT (".") operator is allowed to be used to access instance members. The default for the Core and FoxPro dialect is /allowdot+. The default for the other dialects is /allowdot-. You can also use this with a #pragma: #pragma options("allowdot", enable)
  • XML comments in the source code no longer require fully qualified cref names (#467)
  • Preprocessor - +
  • The preprocessor now automatically declares a match marker with the name <udc>. This match marker will contain all the tokens that were matched with the UDC by the preprocessor. This can be used for example to add the original source as string to the result:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • Wildcard markers (such as the dbfAndFields marker in the previous bullet) now can also appear in the middle of a UDC. They will continue to match until the first token after the Wildcard marker (in the above example the FROM keyword) is found.
  • The standard header files (from the XSharp\Include folder) are now also included in the compiler as resource. When the file is missing then these files will be loaded from the resource.
  • @@ -1070,19 +1077,19 @@
  • When wildcard tokens are included with a stringify result marker then the white space between these tokens is correctly included in the output of the UDC.
  • FoxPro dialect - +
  • The feature to allow parentheses as array delimiters for the FoxPro dialect that was added in the previous build had too many side effects. We have removed this feature for now. You have to use bracketed array arguments again.
  • - +
  • The /fox2 compiler option is no longer needed (and ignored by the compiler).
    The compiler now checks to see if a runtime function is marked NeedsAccessToLocalsAttribute, which is defined in the XSharp.Internal namespace.
    If the compiler finds a function that is marked with this attribute, such as the Type() function or the SQLExec() function then it will add some code before and after the function call to allow these functions to access the locals on the stack. This will only happen if the /memvar compiler option is enabled and only in the FoxPro dialect.
    The NeedsAccessToLocalsAttribute has a mandatory parameter which indicates if a function is expected to write to the locals or only read the locals.
    When the function is expected to write to locals then the compiler will generate extra code after the call to make sure that the locals are updated when needed.
  • - +
  • We have added a standard header file for the FoxPro embedded SQL statements. This header file should parse embedded SQL but will output warnings that the embedded SQL is not yet supported.
  • We have added the FoxPro array support, with a special subtype of the Array type in the runtime and support for DIMENSION and (Re)DIMENSION and filling arrays by assigning a single value. (#523)
  • Runtime General - +
  • Fixed a problem with the return value of FSeek() and FSeek3()
  • AsHexString() and AsString() were not displaying the same result for PTR values as Visual Objects.
  • Fixed a problem with SetScope() for the DBFCDX RDD when the previous scope was empty. (#578)
  • @@ -1096,7 +1103,7 @@
  • We have added a couple of functions that bring up dialogs to display the current open workareas, settings, globals and private and public memory variables. See DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() and DbgShowSettings()
  • RDD system - +
  • DbCommit and DbCommitAll were failing when a workarea is opened Read only. This has been fixed. (#554)
  • When FoxPro CDX file has more than one tag and one of the tags has an invalid index expression (for example a missing closing parenthesis, which was accepted by Visual Objects) then the RDD system did not open the CDX at all. We now open the CDX with the exception of the tag with the corrupted index expression. (#542)
  • Added support for Advantage GUID and Int64 columns. GUIDs are returned as string and INT64 as INT64. We have also added some missing DEFINE values from the ACE header file.
  • @@ -1109,27 +1116,27 @@
  • Changed several method prototypes for ADS to have the correct IN / OUT modifiers (#568)
  • Macro Compiler - +
  • Fixed a problem in the FoxPro dialect assigning a value to an expression in the form of VariableName.PropertyName
  • The X# macro compiler was allowing to reference GLOBAL and DEFINE values in macros. This made the compiler incompatible with VO and this would cause problems when indexing on a field with the same name as a GLOBAL or DEFINE. The support to reference GLOBALs or DEFINEs has been removed from the macro compiler. (#554)
  • The Macro compiler had a problem with a variable name was surrounded with parentheses. It was seeing that as a typecast. This has been fixed. (#584)
  • Visual Objects SDK - +
  • Added some missing defines to the Win32APILibrary assembly, such as DUPLICATE_SAME_ACCESS.
  • DbServer:Filter was sometimes returning NIL instead of an empty string (#558)
  • VO Dialect - +
  • We have added support for SysObject (#596)
  • Xbase++ dialect - +
  • Fixed a problem with XPP Collation tables that was introduced in 2.7
  • FoxPro dialect - +
  • Added the NeedsAccessToLocalsAttribute for the /fox2 compiler option
  • Adjusted the code that exposes the values of LOCAL variables to functions such as Type() and SqlExec().
  • Several functions have been marked with the new attributes so they will be able to "see" local variables.
  • @@ -1147,7 +1154,7 @@ Visual Studio Integration The Visual Studio integration in this build no longer supports Visual Studio 2015. Only Visual Studio 2017 and 2019 are supported. General - +
  • New code templates in a subfolder were generated with a namespace name that starts with "global::". This has been fixed.
  • Added support for LOCAL FUNCTION and LOCAL PROCEDURE.
  • Adding an item from the Class template in a folder prefixed the namespace with "global::". This has been fixed.
  • @@ -1162,7 +1169,7 @@
    Source code editor - +
  • Longer QuickInfo tooltips are now shown over multiple lines to make them easier to read.
  • Refactored the "type lookup" code to improve the speed of the source code editor
  • Member completion in the source code editor was not always working for variables declared with the VAR keyword where there were nested curly braces and/or parentheses. (#541, #560)
  • @@ -1176,11 +1183,11 @@
    Code generator - +
  • Character literals are now always prefixed with the 'c' prefix and values > 127 are written in Hex notation to make sure they work in all codepages.
  • Windows Forms Editor - +
  • We have fixed several issues with DevExpress controls.
  • Fixed a problem with a control that has the same name as a X# keyword (#566)
  • Fixed a problem with a control that has a property of type DWORD (#588)
  • @@ -1188,11 +1195,11 @@
  • The .designer.prg no longer has to have the "INHERIT FROM " clause. (#533)
  • Object Browser - +
  • Goto definition was not working when you had performed a search first (#565)
  • VO Compatible Forms editor - +
  • Added support in the WED for correctly visually displaying custom controls that do not have the expected control class inheritance defined
  • Fixed a problem with custom controls in cavowed.inf not recognized that are not data aware
  • Added support for Cloning Windows (#508)
  • @@ -1201,12 +1208,12 @@
  • There is a menu option in Tools/Options to set several settings (#279, #440)
  • Debugger - +
  • The debugger now fully supports 64 bits debugging
  • Added support for the new type names for CURRENCY and BINARY
  • Templates - +
  • We have made adjustments to several VS item templates and project templates (#589)
  • We have added a new X# t4 template (.tt file)
  • @@ -1214,39 +1221,39 @@ Changes in 2.7.0.0 (Cahors) Compiler General - +
  • Fixed a problem with Nullable types that were missing an explicit cast for an assignment
  • - +
  • Fixed a problem with calling a parent constructor in a class hierarchy where a parent level was being skipped and the constructor for the grandparent was called instead.
  • - +
  • The /usenativeversion commandline option was not checking +/- switches. This has been fixed.
  • Fixed a problem with PCall() and PCallNative() in source files with an embedded DOT in the filename (my.file.prg)
  • We have added a new header files to the files in the XSharp\Include files that helps to add custom User Defined Commands or defines that you want to include in every project. This file (CustomDefs.xh) will be automatically include by our XSharpDefs.xh.
    The default contents of this file is just some comments.
    The installer will NOT overwrite the file in this folder and will not delete it when the product is uninstalled.
    You can choose to customize this file in the Include folder under Project Files. However you can also add a file with the same name to your project folder or to a common include folder for your project/solution. That last location allows you to keep the header file under source code control with the rest of your source code.
  • FoxPro dialect - +
  • The compiler now allows a M Dot (M.) prefix in LOCAL, PRIVATE and PUBLIC declarations. (LOCAL m.Name)
  • The compiler now also accepts parentheses as array delimiters in the Foxpro Dialect (aMyArray(1,2))
  • The compiler now allows (and ignores) AS Type OF Classlib clauses for PRIVATE, PUBLIC, PARAMETERS and LPARAMETERS declarations.
  • - +
  • Support for TO keyword in CATCH clause of TRY CATCH
  • Added support for the ASSERT command and SET ASSERT
  • - +
  • Added support for SET CONSOLE and SET ALTERNATE
  • Assignments to macros with a single equals operator were not working ( &myVar = 42). This has been fixed.
  • Added support for zero length binary literals (0h)
  • Build System - +
  • Added a project property to control if RC4005 errors (duplicate defines) should be suppressed for the Native Resource compiler
  • Runtime General - +
  • IsMethod() now returns TRUE for overloaded methods.
  • AbsFloat() was "losing" the settings for # of decimal places. This has been fixed.
  • Binary:ToString() was using single digit numbers for binary values < 15. This has been fixed.
  • @@ -1261,24 +1268,24 @@
  • We have added a DatabasePropertyCollection type. This type is used to add "additional" properties to Fields, such as the DBF fields for FoxPro tables.
  • Terminal API - +
  • We have added support for Alternate files. SET ALTERNATE TO SomeFile.txt. Also SET ALTERNATE ON and SET ALTERNATE OFF
  • The ? statement now respects the sessions for Set Console and Set Alternate .
  • We have added support for the SET COLOR command. Only the fist color in the settings is used and the blink attribute is ignored and interpreted as "highlight". For example SET COLOR TO w+/b
  • We have added a CLEAR SCREEN command
  • FoxPro dialect - +
  • Added an Assert dialog
  • Added support for DBC files. This includes the SET DATABASE to commands, DbGetProp() and reading properties for files that are part of a database without explicitly opening the database first. DbSetProp() does not do anything yet. Also functions like DbAlias() and similar have been implemented.
  • The Runtime now works with DataSession object. The DBC files are opened in their own datasession as well of the files per thread. Each datasession has a list of open tables and a unique list of aliases and cursor/workarea numbers.
  • AutoIncrement columns in cursors returned by SqlExec() now have a numbering scheme that starts with -1 and subtracts 1 for every new row added.
  • - +
  • Several settings needed for the FoxPro dialect have been added to the Set Enum.
  • Macro Compiler - +
  • Until now the macro compiler was producing runtime codeblocks that take an array of objects and return an object return value. There was a class in the runtime that wrapped this and took care of usual -> object conversion for the parameters and for object-> usual conversion of the return value. This caused a problem when macros were returning a NIL value because that was converted to NULL_OBJECT.
    The reason for the OBJECT API is that the macro compiler needs to be used in the Core dialect (in the RDD system) and this dialect does not support the USUAL type.
    We have now added a new IMacroCompilerUsual interface in the XSharp.RT assembly that allows you to compile a string into a codeblock that supports USUAL arguments and a USUAL return value. The macro compiler now supports both this interface as well as the 'old' interface. As a result you may see a (very small) performance improvement when compiling macros.
  • Calling Altd() and _GetInst() inside a macro was not supported. This has been fixed.
  • The macro compiler was reporting an error when you had overridden a built-in function in your own code. We have now implemented a default MacroCompilerResolveAmbiguousMatch delegate in the runtime that now gives preference to functions that are defined in your code over functions in our code.
  • @@ -1287,7 +1294,7 @@
  • Added support for the CURRENCY and BINARY types to the macro compiler.
  • RDD System - +
  • Exclusive DBF access now works in "buffered" mode which should make it a lot faster
  • Internally the RDDs now work with the Stream objects, which makes it a bit faster.
  • Fixed a problem when updating a key in an index where many duplicate key values existed.
  • @@ -1299,7 +1306,7 @@
  • We have added structures and functions for the ADS Management API to the RDD assembly.
  • Visual Studio integration - +
  • When creating a new VO compatible UI form in the VS IDE you can now clone an existing form.
  • Fixed some problems with custom controls in the VO compatible form editor.
  • Fixed several problems in the Windows Forms editor for the code parsing and code generation for DevExpress controls
  • @@ -1311,13 +1318,13 @@ Changes in 2.6.1.0 (Cahors) This is a bug fix release with fixes for some issues found in 2.6.0.0 Compiler - +
  • Fixed problems with passing typed variables by reference to late bound code and to untyped constructors
  • Fixed an internal compiler error in code where a define containing a logic was cast to a byte
      BYTE(_CAST, LOGICDEFINE).
    Of course this is code that should be avoided at all times, but unfortunately even the VO SDK is full of code like this..
    The example above should be written as IIF(LOGICDEFINE, 1,0) for example. The compiler will see that the define is constant and will replace that code with either 1 or 0.
  • The compiler was not recognizing $.50 as a valid Currency literal (because the 0 is missing). This is now accepted.
  • Runtime - +
  • Updated the code in the runtime that handles late bound calls to improve the handling of parameters by reference
  • Fixed a problem in late bound code when accessing properties such as fInit, dwFuncs and dwVars in the OleAutoObject class
  • Added operator TRUE and operator FALSE to the Usual type
  • @@ -1326,7 +1333,7 @@
  • Added a DbTableSave() function to save changes in a DbDataTable to the current workarea.
  • Visual Studio integration - +
  • Opening and upgrading project files that are under Scc could sometimes cause problems. This has been fixed
  • Fixed a regression introduced in 2.6.0.0. causing the task list to no longer be updated.
  • Opening a solution that referenced X# projects that do not exist on disk could cause an exception. This has been fixed.
  • @@ -1338,7 +1345,7 @@ Changes in 2.6.0.0 (Cahors) Please note that there are some breaking changes in this build.
    Therefore the Assembly version number of the Runtime Components has been changed and you will need to recompile all your code and you need new versions of 3rd party components!
    Compiler - +
  • The compiler was ignoring a (USUAL) cast. This has been fixed.
  • When the compiler detects a TRY .. ENDTRY without CATCH and FINALLY then it automatically adds a CATCH class that catches all exceptions silently. This was already the case, but we now generate a warning XS9101 when this happens.
  • Passing parameters by reference with an @ sign was not working correctly for late bound method calls. This has been fixed.
  • @@ -1358,32 +1365,32 @@
  • Added support for pattern matching (WHEN clauses) in TRY .. CATCH statements, such as in the example below. The WHEN keyword is positional, so it can also be used as a variable name like in the example.
  • FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    - +
  • Added support for pattern matching and filters for SWITCH statements. We support both the "Identifier AS Type" clause as well as the "WHEN expression" filter clause, like in the examples below
  •   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // This is now called the 'constant pattern'
            ? "One"
         CASE 2 WHEN foo == 42         // Filter with a constant pattern
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
      VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // Pattern matching
            ? "Long", i
         CASE r8 AS REAL8   // Pattern matching
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // Pattern matching with filter
            ? "String abc", s
         CASE s AS STRING     // Pattern matching
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // Pattern matching with filter
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    - +
  • Please note that the performance of these patterns and filters is just like normal IF statements or DO CASE statements.
    The difference is that the compiler checks for duplicate CASE expressions so you are less likely to make mistakes.
  • We have added support for the IN parameter modifier. This declares a parameter that is a REF READONLY parameter. You could consider to use this when passing large structures to methods or functions. Instead of passing the whole structure then the compiler will only pass the address of the structure which is 4 bytes or 8 bytes depending on if you are running in 32 bits or 64 bits.
    We are planning to use this in the X# runtime for functions that accept USUAL parameters which should give you a small performance benefit (Usual variables are 16 bytes in 32 bits mode and 20 bytes when running in 64 bit mode).
  • Runtime - +
  • Error messages in Late Bound code were not always showing the error causing the exception. We now retrieve the "inner most" exception so the message shows the first exception that was thrown.
  • We have added runtime state settings for Set.Safety and Set.Compatible and the functions for SetCompatible and SetSafety
  • - +
  • A UDC used to save and restore workareas for various Db..() functions was incorrect, causing the wrong area to be selected after the function call. This has been fixed.
  • - +
  • The VFP MkDir() function has been added.
  • Fixed a problem in late bound IVarGet() / IVarPut() when a subclass of a type implements only the Getter or the Setter and the parent class implements both.
  • - +
  • We have added a IDynamicProperties interface and added an implementation of this on the XPP DataObject, VFP Empty and VO OleAutoObject classes. This interface is used to optimize late bound access to properties in these classes.
  • An Exception in OleAutoObject.NoMethod was not forwarded "as is" but as an argument exception.
  • - +
  • The Select() function now behaves differently in the FoxPro dialect to be compatible with FoxPro (no exception is thrown when the alias that is passed does not exist)
  • When an Error object is created from an exception then the innermost exception is used for the error information.
  • The casing of the Default() function has changed.
  • @@ -1391,7 +1398,7 @@
  • We have added the CLOSE ALL UDC to dbcmd.xh as synonym for CLOSE DATABASES.
  • RDD System - +
  • Fixed a problem in the Advantage RDD for the ADSADT driver when field names were > 10 characters.
  • In the Advantage RDD the EOF, BOF and FOUND flags for tables that are a child in a relation were not properly set. This has been fixed.
  • In the FoxPro dialect the 'AutoOrder' behavior has changed. In this dialect no longer the first order in the first index is selected. The index file is opened but the file stays in natural order and when opening the file the cursor is positioned on the record number 1.
  • @@ -1401,7 +1408,7 @@
  • Fixed a problem with the OrdDescend() function/
  • Visual Studio integration - +
  • Fixed a problem in the VS parser for default expressions in parameter lists
  • Parameters for external methods/functions were not always showing the right "As"/"Is" modifiers
  • The location on the QuickInfo tooltip is now shown on its own line inside the tooltip.
  • @@ -1412,12 +1419,12 @@
  • When looking for a method such as Foo.SomeMethod() the codemodel sometimes returned a method Bar.SomeMethod().
    This was leading to problems when opening forms in the Windows Forms editor. This has been fixed.
  • VO Compatible editors - +
  • Code generated from the VO Compatible editors now preserves the INTERNAL or other modifiers as well as IMPLEMENTS clauses for classes.
  • We have fixed the display of "LoadResString" captions in PushButton controls
  • Foxpro commands - +
  • We have added support for several new Foxpro compatible commands:
  • CLOSE ALL
  • SCATTER
  • @@ -1428,32 +1435,32 @@
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • All variations support a fields list, FIELDS LIKE or FIELDS EXCEPT clause and the relevant commands also support the MEMO and BLANK clauses.
  • - +
  • Not all variations from COPY TO and APPEND FROM are supports, such as copying to excel and sylk
  • The Database and name clause in the COPY TO command are ignored for now as well as the CodePage clause
  • Build System - +
  • We have prepared the X# Build System to work with SDK type projects that are used by .Net 5 and .Net Core. See the topic below for what this means for the project files.
  • Please note that the source code for the Build System has been moved to the Compiler repository on GitHub, since the build system is also needed for automated builds that run outside of Visual Studio.
  • Changes to project files - +
  • We are now no longer deploying our MSBuild support to a folder inside each VS version separately but we are only deploying it once in a folder inside the XSharp installation folder.
    The installer sets an environment variable XSharpMsBuildDir which points to that folder. As a result all project files will be updated when opened with this version of X#.
  • - +
  • The change that we make is that the macro "$(MSBuildExtensionsPath)\XSharp" is replaced with "$(XSharpMsBuildDir)" which is an environment variable that points to the location of the X# MsBuild support files on your machine. If you are running X# on a build server you can set this environment variable in your build scripts when needed.
  • The installer automatically adds this environment variable and points it to the <XSharpDir>\MsBuild folder.
  • Changes in 2.5.2.0 (Cahors) Compiler - +
  • When a define contains an expression that contains the _Chr() function with a value > 127 then a warning is generated about possible code page differences between the development machine and the end users machine
  • Fixed an issue where a define was defined as PTR(_CAST,0)  and this define was also used as a default value for a function/method.
  • Runtime - +
  • Calling IsAccess, IsAssign and similar methods on a NULL_OBJECT was causing an exception. This has been fixed.
  • EmptyUsual now also works for the type OBJECT
  • When a float division was returning an Infinite value then no divide by zero exception was generated. This has been fixed.
  • @@ -1462,15 +1469,15 @@
  • The variable name passed to NoIVarGet() and NoVarPut() is now converted to Uppercase.
  • RDD System - +
  • Fixed a problem with skipping forward when a Scoped Descending Cdx was at Eof()
  • VOSDK - +
  • Several DbServer methods were calling a method to write changes before the correct workarea was selected. This was an old bug originating in VO and has been fixed.
  • Visual Studio integration - +
  • Looking up XML documentation was sometimes not working in VS 2019. This has been fixed.
  • ClassView and Objectview are working "somewhat" now. This needs to be improved.
  • Improved the loading of so called "Primary Interop Assemblies"
  • @@ -1480,22 +1487,22 @@
  • The position and size of the property window and toolbox of the VO Window editor (and the other VO Editors) is now saved between sessions of Visual Studio.
  • Build System - +
  • The generated XML files were generated in the project folder and not in the intermediate folder. This has been fixed.
  • Documentation - +
  • The [Source] links were missing for most topics. This has been fixed.
  • Corrected some docs
  • Changes in 2.5.1.0 (Cahors) Compiler - +
  • no changes to the compiler in this build (it is still called 2.5.0.0)
  • Runtime - +
  • (VO Compatibility) Fixed a VO compatibility issue for arrays . Accessing an single dimensional array with an index with 2 dimensions now returns NIL and does not generate an exception. This is stupid but compatible.
  • (VO Compatibility) Comparing a usual with a numeric value with a symbol no longer generates an exception. The numeric value is now casted to a symbol and that symbol is used for the comparison.
  • (XPP compatibility) Accessing a USUAL variable with the index operator (u[1]) is not allowed for usuals containing a LONG. This will return TRUE or FALSE and is a simple way to check if a bit is set.
  • @@ -1503,7 +1510,7 @@
  • Added some optimizations to the support code for late binding
  • Visual Studio integration - +
  • Reading type information for external assemblies would fail when the external assembly contained 2 types for which the names were only different in case.
  • The entity parser did not recognize GET and SET accessors that were prefixed with a visibility modifier (PROTECTED SET)
  • The entity parser did not recognize ENUM members that did not start with the MEMBER keyword
  • @@ -1512,20 +1519,20 @@
  • Fixed a problem in the VS debugger where we were subtracting one from index operators for arrays and collections. This was not correct (obviously).
  • Build System - +
  • The file name of the generated XML file was derived from the project file name instead of the output assembly name. This has been fixed.
  • Changes in 2.5.0.0 (Cahors) Compiler - +
  • #pragma lines that were followed by incorrect syntax would "eat" the incorrect syntax causing entire methods to be excluded from compilation. This has been fixed.
  • Multiline compile time codeblocks in a method /function with a VOID return type were not being compiled correctly. This has been fixed.
  • The compiler now allows to type the parameters in a codeblock. Since the codeblock definition requires parameters of type USUAL this gets transformed by the compiler. The parameters will still be of type USUAL, but inside the codeblock a local variable of the proper type will be allocated. So this compiles now
  •   { | s as string, i as int| s:SubString(i,1) } - +
  • The code to fill in missing parameters was causing problems when passing parameters to COM calls (Word Example from Peter Monadjemi)
  • Fixed a problem passing an IntPtr, Typed pointer of the address of a VOSTRUCT to a function that accepts an object.
  • We have added code to add an integer value to a PSZ, which results in a new PSZ that starts at a relative location in the original PSZ. No new buffer is allocated.
  • @@ -1538,14 +1545,14 @@
  • The compiler now allows to embed quotes inside a string by writing double quotes. So this works:
  • ? "Some String that has an embedded "" character" - +
  • When you declare a MEMVAR with the same name as a function, the compiler will now have no problem anymore resolving the function call. Please note that you HAVE to declare the memvar for this resolution to work.
    For example

  • FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // assign to the memory variable
    Test(Test)      // call the function 'Test' with the value of 'Test'
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    Common Runtime - +
  • The Workareas class no longer has an array of 4096 elements, but uses a dictionary to hold the open RDDs. This reduces the memory used by the runtime state.
  • Fixed a problem in the WrapperRDD class
  • OrdSetFocus() now returns the previous active tag as STRING
  • @@ -1569,11 +1576,11 @@
  • The OS() function now returns a more appropriate version description when running on Windows. It reads the version name from the registry and also includes a x86 and x64 flag in the version.
  • RDD System - +
  • The DBF RDD Now forces a disk flush when writing a record in shared mode.
  • Fixed a problem in the DBFCDX rdd that could corrupt indexes.
  • We have built in a validation routine inside the DBFCDX RDD that validates the integrity of the current tag. To call this routine call DbOrderInfo with the DBOI_VALIDATE constant.
    This will validate:
  • - +
  • If all records are included exactly once in the index
  • If the values for each record in the index are correct
  • If the order of the index keys in a page is correct
  • @@ -1581,33 +1588,33 @@
    When a problem is found then this call returns FALSE and a file will be written with the name <BagName>_<TagName>.ERR containing a description of the errors found. - +
  • Most exported variables inside the Workarea class (inside XSharp.Core) and other RDD classes have been changed to PROTECTED.
    We have also added some properties for variables that need to be accessed from outside of the RDD
  • Fixed a problem that occurred when skipping back repeatedly from the BOF position in a scoped CDX index.
  • The Zap() operation for DBFCDX was not clearing one of the internal caches. This has been fixed.
  • The DBFCDX driver now closes and deletes a CDX file when the last tag in that CDX has been deleted.
  • Macro compiler - +
  • The macro compiler was not recognizing 0000.00.00 as an empty date. This has been fixed.
  • The macro compiler now also exotic characters in identifiers like the normal compiler. We have added the same identifier name rules that the C# compiler uses.
  • XBase++ Functions - +
  • Fixed a problem in the XPP function SetCollationTable()
  • DbCargo() can now also set the cargo value for a workarea to NULL or NIL
  • We have added several functions, such as PosUpper(), PosLower(), PosIns() and PosDel().
  • VFP Functions - +
  • Added AllTrim() , RTrim(), LTrim() and Trim() variations for FoxPro (thanks Antonio)
  • Added StrToFile() and FileToStr() (thanks Antonio and Karl Heinz)
  • VOSDK - +
  • We have created a Destroy() method on the CSession and CSocket class, so you can 'clean up' objects (in VO you could call Axit(), but that is no longer allowed). The derstructor on these classes will also call Destroy().
  • Fixed a problem in TreeView:GetItemAttributes. It can now also be called with a hItem (which happens inside TreeViewSelectionEvent:NewTreeViewItem)
  • The OpenDialog class is now resizable.
  • @@ -1618,7 +1625,7 @@
    Visual Studio Integration Code Model - +
  • We have totally rewritten the background parser and code model that is used to parse "entities" in the VS editor and that is used to build a memory model of the types, methods, functions etc in your VS solution. This parser now uses the same lexer that the compiler uses, but the entities are collected with a hand written parser (since the code in the editor buffer may contains incomplete code we can't reliably use the normal parser).
  • We are now using a SQLite database to persist the code model between sessions. This reduces the memory needed by the X# project system. We are no longer keeping the entire code model in memory.
  • This also means that when you reopen an existing solution we will only have to parse files that have  changed since the last time they were processed. That should speed up loading of large VS solutions.
  • @@ -1627,7 +1634,7 @@
    Source code editor - +
  • Fixed a problem with the dropdown comboboxes above the editor when the cursor is in a line of code before the first entity.
  • Fixed a problem that functions in the editor after a class declaration had no collapsible regions
  • The code completion inside the editor now also picks up extension methods for the types themselves, but also extension methods for interfaces implemented by these types.
  • @@ -1636,21 +1643,21 @@
  • Fixed several problems in the "reformatting" code
  • Windows Forms editor - +
  • Some inline assignments to fields inside classes that are used by the Windows Forms could make the form unusable by the form editor. This has been fixed.
  • The Windows Forms editor was sometimes removing blank lines between entities. This has been fixed.
  • User Defined Commands in code parsed by the Windows Forms Editor were not recognized and disappeared when the form was changed and saved. This has been fixed.
  • Fixed a problem with setting images and similar properties with resources stored in the project resources file (which are prefixed with "global::" in the source code)
  • VOXporter - +
  • We have added support to export VO Forms from the AEFs to XML format
  • We have added support to export VO Menus from the AEFs to XML format
  • Changes in 2.4.1.0 (Bandol GA 2.4a) Compiler - +
  • Bracketed strings are now no longer supported in the Core dialect to avoid problems with single line external property declarations that contain attributes between the GET and SET keywords
  • The PROPERTY keyword was not properly recognized after an EXTERN modifier.
  • Fixed a XS9021 warning for a IIF expressions with 2 numeric constants
  • @@ -1658,7 +1665,7 @@
  • We have added a new compiler option -fox2. This option makes local variables visible to the macro compiler and should also be used when you use SQL statements with embedded parameters. This compiler option must be used in combination with -memvar and the FoxPro dialect
  • Runtime - +
  • Fixed a problem in the DELIM Rdd that would occur when using DbServer:AppendDelimited() and DbServer:CopyDelimited().
  • Fixed a problem with DbSetOrder() returning TRUE even when the order was not found.
  • Fixed a problem where the File() function would return FALSE when using wildcard characters
  • @@ -1675,11 +1682,11 @@
  • IVarGet() and Send() now return Empty strings when a method returns a NULL_STRING and the return type  is STRING
  • RDD - +
  • Getting the OrdKeyNo for a scoped index was resetting the index position to the top of the index. This would affect scrollbars in browsers for scoped indexes
  • VOSDK - +
  • The Console classes assembly is now marked as AnyCpu.
  • Fixed a problem introduced in the previous build with the calling convention for certain functions imported from Shell32.DLL such as the Drag and Drop support.
  • Fixed a problem in the PrintingDevice constructor for reading of printers when running on a Remote Desktop
  • @@ -1688,7 +1695,7 @@
  • Improved "column scatter" code for the DataBrowser class
  • Visual Studio Integration - +
  • If you removed all the characters from the "Commit Completion List" control in the XSharp editor options, then after restarting VS all default characters would appear. We now remember that you have cleared the list and will not refill the list again.
  • Fixed a problem that caused the editor not to rescan the current buffer for changed entities
  • Added project property for the new -fox2 compiler option
  • @@ -1700,7 +1707,7 @@ Changes in 2.4.0.0 (Bandol GA 2.4) Compiler - +
  • Fixed problems where certain operations on integers would still return the wrong variable type
  • The Unary Minus operator on unsigned integral types (BYTE, WORD, DWORD, UINT64) was returning the same type as the original, so it was not returning a negative value. This has been changed. The return value of this operator is now the next larger signed integral type.
  • Using a compiler macro, such as __VERSION__ in an interpolated string was causing an internal error in the compiler. This has been fixed.
  • @@ -1708,7 +1715,7 @@
  • Bracketed strings are now also recognized after a RETURN and GET keyword.
  • Runtime - +
  • Fixed problems when subtracting a dword from a date (related to the signed/unsigned problems in the compiler)
  • LUpdate() now returns a NULL_DATE for workareas have no open table.
  • Added the missing ErrorStack() function (thanks Leonid)
  • @@ -1724,7 +1731,7 @@
  • Fixed several incompatibilities with VO for FLOAT->STRING conversions
  • RDD System - +
  • Fixed a problem with skipping backward in a DBFCDX table with a scope
  • Fixed a problem with creating unique indexes with the DBFCDX and DBFNTX drivers
  • Writing NULL values to DBF columns is now always supported. When the column is a Nullable column in a DBFVFP table then the null flags are set. For other RDDs a NULL value will be written as a blank value.
  • @@ -1737,31 +1744,31 @@
    RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // this uses the DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited writes
    DbCopyDelim("C:\test\test.csv")             // this uses the CSV RDD

    RuntimeState.DelimRDD := "TSV"              // Tell the runtime to use the TSV RDD for delimited writes
    DbCopyDelim("C:\test\test.tsv")             // this uses the TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited reads
    DbAppDelim("C:\test\test.csv")              // this uses the CSV RDD
    VO SDK - +
  • PrintingDevice:Init() no longer tries to read the default printer from win.ini but from the registry
  • Several other locations where the code was still accessing win.ini (with the GetProfile..() funcitons) have been updated.
  • The GUI Classes were delay loading several calls to common dialog DLL and winspool.drv. This has changed because that is no longer needed in .Net.
  • Cleaned up all PSZ(_CAST operations in GUI Classes.
  • Visual Studio integration - +
  • Parameter tips for OUT variables were shown as REF
  • XML descriptions for member with REF or OUT parameters were not found
  • Fixed an exception in the VS Editor
  • VOXporter - +
  • No changes in this build
  • Changes in 2.3.2 (Bandol GA 2.3b) Compiler - +
  • Added support for Bracketed Strings ([Some String containing quotes: '' and ' ] )
  • Added support for Support for PRIVATE/PUBLIC syntax with &Id and &Id.Suffix notation
  • EXE files were created without manifest before, unless you were using a WIN32 resource with a manifest. This manifest is now correctly added to exe files when no manifest is supplied.
  • The handling of unmanaged resources in relation to version resources and manifests has changed:
  • - +
  • When the compiler detects native resources it will now check to see if there is a version and/or manifest resource included.
  • When there is no manifest resource, then the default manifest resource will be added to the resources from the Win32 resource file.
  • When there is a version resource then this version resource will be replaced by the version resource that the compiler generates from the Assembly attributes.
  • @@ -1769,18 +1776,18 @@
  • Of course we have added a command line option to suppress this: if you use the commandline option "-usenativeversion" then the native version that is included in the Win32 resource will be used. If there is no version resource included in the Win32 resource file, then this commandline option is ignored.
  • - +
  • PCOUNT() and ARGCOUNT() are now supported inside ACCESS/ASSIGN methods. The number of parameters that you can pass is still fixed, but both functions will now return the # of parameters defined in ACCESS and/or ASSIGN methods.
  • We fixed a problem that a compiler error "Failed to emit module" was produced instead of showing the real problem in the code (a missing type) .
  • Extended match markers in the preprocessor, such as <(file)>  in the USE udc, now also properly match file names.
  • Improved the detection algorithm that distinguishes parenthesized expressions and typecasts. This algorithm is now:
  • - +
  • Built in type names between parentheses are always seen as a typecast. For example (DWORD), (SHORT) etc.
  • Other type names between parentheses may be treated as typecast but also as parenthesized expression. This depends on the token following the closing parenthesis. When this token is an operator such as +, -, / or * then this is seen as parenthesized expression. When the token following the closing parenthesis is an opening parenthesis then the expression is seen as a typecast. Some examples:
  • ? (DWORD) +42       // this is a typecast
    ? (System.UInt32) +42   // this is a parenthesized expression and will NOT compile
    ? (System.UInt32) 42    // this is a typecast because there is no operator before 42
    ? (System.UInt32) (+42) // this is a typecast because +42 is between parentheses
    - +
  • Code that calls the Axit() method now generates  a compiler error.
  • We have implemented the /vo11 compiler option
  • We have fixed several signed/unsigned warnings
  • @@ -1788,7 +1795,7 @@
  • The lexer now recognizes (in the FoxPro dialect) the For() and Field() functions and you do not need to prefix these with @@ anymore.
  • Runtime - +
  • Fix for StrZero() with negative values
  • Fix for IsSpace() crashing with empty or null string
  • AFill() in the VFP dialect now fills also elements in subarrays (for multi dimensional arrays)
  • @@ -1809,18 +1816,18 @@
  • We have added DBOI_COLLATION and DBS_CAPTION for FoxPro specific properties
  • VO SDK - +
  • We have removed the versioninfo resource from the GUI classes sourcecode. The version info is now generated from the Assembly attributes
  • We have cleaned up the code and removed the warnings 9020 and 9021 from the suppressed warnings, since the compiler now handles this correctly.
  • RDD system - +
  • The DBFVP driver no longer fails to open a DBF when the DBC file is used exclusively by someone else
  • Added support for reading captions with DBS_CAPTION and collations with DBOI_COLLATION
  • The DBFNTX driver was not setting the HPLocking flag properly when creating new indexes
  • Visual Studio integration - +
  • The type lookup for variables declared with a VAR keyword could sometimes go into an infinite loop. This has been fixed.
  • Members starting with '__' are now only hidden from completion lists when the 'Hide Advanced members' checkbox in the general editor options is checked
  • Added support for colorizing BRACKETED_STRING constants
  • @@ -1830,18 +1837,18 @@
  • You can now enable/disable /vo11 in the project properties dialog
  • VOXporter - +
  • When porting from Clipboard contents, now VOXporter puts back the modified code to the clipboard
  • Added option to remove ~ONLYEARLY pragmas
  • Installer - +
  • The installer now has a new command line parameter "-nouninstall" that prevents the automatic installation of a previous version. This allows you to install multiple versions of X# side by side.
    Please note that the installer sets a registry key to the location where X# is last installed. This location will be used by the Visual Studio integration to locate the compiler.
    If you don't change this then all VS installations will always use the version of X# that is last installed. See the topic about the build process in VS and with MsBuild for information about how this mechanism works.
    Also if you choose to install the X# runtime assemblies in the GAC then newer versions of these runtime DLLs will/may overwrite older versions. This depends on the fact if the newer DLLs have a new Assembly version.
    At this moment all X# runtime DLLs (still) have version 2.1.0.0 even when X# itself is now on version 2.3.2.
  • The installer now lists all found instances of VS 2017 and VS 2019, including the Visual Studio Buildtools, so you can choose to install in a particular instance of these versions of Visual Studio or simply in all instances.
    Please note that when you run X# with the -nouninstall command line option, this will prevent the installer from removing X# from VS installations where it was previously installed.
  • We have added some documentation about all the installer command line options to the help file.
  • Documentation - +
  • Fixed errors in the documentation of escape codes
  • We have added a chapter with tips and tricks that contains the following topics at this moment.
  • Added description of the installer command line arguments
  • @@ -1854,42 +1861,42 @@ Changes in 2.3.1.0 (Bandol GA 2.3a) Compiler - +
  • When compiling in case sensitive mode, the compiler now checks to see if a child class declares a method that only differs from a method in its parent class by case
  • - +
  • The warning message about assigning to a foreach iterator variable has been changed from "Cannot assign" to "Should not assign"
  • #pragma warnings was not working with the xs1234 syntax but only with numbers. This has been corrected
  • Runtime - +
  • Added the SetFieldExtent method to the IRdd interface
  • The USUAL type no longer "caches" the dialect setting
  • Fixed some problems with ACopy() with skipped or negative arguments.
  • The return value for Alias() is now in upper case.
  • VO SDK - +
  • The VO SDK Console class now uses the System.Console class internally. The only functionality that is no longer available is:
  • - +
  • It does not respond to the mouse anymore
  • Creating a "new" console window is not supported.
  • RDD system - +
  • Fixed a problem in the Advantage RDDs that was caused by a casing problem (a method in a child class had a different case than the method in the parent class that it tried to override). This is why we also added a check to the compiler.
  • Creating an NTX with the DBFNTX driver could fail in some situations due to timing issues. This has been fixed.
  • Visual Studio integration - +
  • Fixed a problem in keyword case synchronization that could corrupt the editor contents.
  • Changes in 2.3.0.0 (Bandol GA 2.3) Compiler - +
  • Syntax errors (1003) or Parser errors (9002) in a source file could lead to multiple errors in the error list. We are now only reporting the first of these error types in a source file.
  • Implemented the -cs (Case Sensitive identifiers) compiler option
  • The compiler now includes the source for a compiletime codeblock as string in that codeblock. Calling ToString() on a compile time codeblock will retrieve this string.
  • @@ -1905,7 +1912,7 @@
  • Added support for #pragma options. See the #pragma options topic in the help file for more info.
  • Runtime - +
  • Added XSharp.Data.DLL which contains support code for .Net SQL based data access used by the RDD system and the new Unicode SQL classes.
  • DbEval() was throwing an exception when no FOR block or no WHILE block was passed
  • DbEval() was throwing an exception when the block that is evaluated was not returning a logical expression
  • @@ -1915,7 +1922,7 @@
  • Added a fix for converting USUAL values of type STRING with NULL to STRING
  • Fixed a problem in __FIeldSetWa() when the area was NIL or "M".
  • - +
  • Added the FoxPro CURRENCY type. These are also supported in USUAL variables. Internally the values of a CURRENCY variable are stored as Decimal but rounded to 4 decimal places.
  • Most runtime DLLs are now compiled in Case Sensitive mode.
  • Fixed a problem in the STOD() function, so it allows strings that are longer than 8 characters.
  • @@ -1924,13 +1931,13 @@
  • Fixed problems in ACopy(), Transform(), Str()
  • VOSDK Classes - +
  • Added DbServer:FieldGetBytes() and DbServer:FieldPutBytes() to read the 'raw' bytes of a string field. Please note that (in ccOptimistic mode) the bytes value is NOT cached and that you have to manually lock and unlock the server when calling FieldPutBytes().
  • Added several missing defines
  • Synchronized the VO SDK to the VO 2.8 SP4 SDK. The only changes that are not included are the ones from the DateTimePicker class. These changes were causing conflicts with the existing code in the X# VOSDK.
  • RDD System - +
  • Querying the header size for the Advantage RDD would cause an exception. This has been fixed
  • Fixed a problem with DbRlockList() and the advantage RDD
  • Skipping in a cursor for the Advantage RDDs was not refreshing the EOF and BOF flags for related tables
  • @@ -1943,66 +1950,66 @@
  • The DBFCDX RDD now implements the BLOB_GET and also BlobExport() and BlobImport()
  • Packing, Zapping or Rebuilding a CDX index with a Custom or Unique flag would not keep these flags. This has been fixed.
  • When you create a file with the DBFVFP driver you can now include Field Flags in the field type of the DbCreate() array by following the type with a colon and one or more flags, where flags is one of:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (not supported by FoxPro)
    Other flags may follow ( for example Harbour also has E = Encrypted and C = Compressed)
    Note:
  • - +
  • Please note that the size of the field is the # of bytes, so {"NAME","C:U",20,0} declares a Unicode character field of 10 Unicode characters and 20 bytes.
  • We do not validate combinations of flags. For example AutoIncrement is only working for fields of type Integer.
  • - +
  • DbFieldInfo(DBS_PROPERTIES) returns 5 for all RDDs with the exception of the DBFVFP driver. That driver returns 6. The 6th property is the FLAGS field. This field is a combination of the DBFFieldFlags enum values.
  • Fixed a problem with AppendDb() and CopyDb() for the Advantage RDD
  • Fixed a problem in the Append() code of the DBF RDD. When Append() was called and no data was written then the record that was written to disk could be corrupted. The Append() method now directly writes the new record with blanks..
  • The Fully qualified names of the Advantage RDDs inside XSharp.RDD.DLL are now the same as in the AdvantageRDD.DLL for Vulcan.
  • - +
  • We have added a FileCommit event to the notifications. This sent when a workarea is committed.
  • Macro compiler - +
  • The macro compiler now also recognizes the Array(), Date() and DateTime() functions.
  • Fixed problems with Aliased expressions
  • On the place where the macro compiler expects a single expression you can now also have an expression list between parentheses. The last expression in the list is seen as the return value of the expression list
  • Visual Studio integration - +
  • The option to compile case sensitive has been enabled in the VS project system
  • - +
  • The speed of 'Format Document' has improved a lot.
  • The XSharp Intellisense Optionspage in Tools/Options now has a scroll bar when needed
  • The ToolPalette in the VO Window editor now has icons
  • - +
  • We have added templates for VO MDI windows and VO SDI windows.
  • Build System - +
  • When compiling native resources the resource compiler now automatically includes a file with some defines such as VS_VERSION_INFO
  • Debugger - +
  • When you enter a watch expression in the debugger or a breakpoint condition, you can now use 1 based array indices. Our debugger will now automatically subtract 1 when evaluating the expression.
  • VOXporter - +
  • Fixed a problem in the Windows Forms code generation
  • - +
  • You can now also export single MEF files, single PRG files and data from the Clipboard.
  • Code between #ifdef .. #endif is not touched by VOXPorter
  • Changes in 2.2.1.0 (Bandol GA 2.2a) Compiler - +
  • When compiling code that contained an assign and not an access then trying to read the access could lead to a compiler exception. This has been fixed.
  • Runtime - +
  • Added a missing _Run() function
  • Visual Studio integration / Build system - +
  • Fixed a problem that caused a dialog to be shown with the message "The 'XSharp Project System' package did not load correctly."
  • Fixed a problem with writing response files for the resource compiler when the source file names contained ASCII characters with accents or other  characters > 128. Even though this is now fixed we still recommend not go to crazy with file names, because these names have to be converted from Unicode to Ansi, since the resource compiler can only read response files in Ansi format.
  • Fixed a problem for certain QuickInfo / Tooltip windows
  • @@ -2011,14 +2018,14 @@
  • Expressions in the Watch window, Breakpoint conditions etc may now contain SELF, SUPER and a colon separator. Unfortunately they are still case sensitive.
  • VOXPorter - +
  • we now detect that a class has fieldnames and accesses/assigns with the same name. This was allowed in VO but no longer in .Net. The field names will be prefixed with an underscore inside the class.
  • We now prefix the name "Trace" with @@ because this is quite often used to conditional compile tracing code in VS.
  • Changes in 2.2.0.0 (Bandol GA 2.2) Compiler - +
  • The compiler now recognizes the functions Date(), DateTime() and Array(), even though their names are the same as type names.
    Date() with 1 parameter will still be seen as a cast from that parameter to a Date(), like in the following example
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // This is still a cast from Date to DWORD
    However when Date is called with 0 or 3 parameters then either the current date is returned (like with Today()) or a date is constructed from the 3 parameters (like in ConDate())
    The DateTime() function takes 3 or more parameters and constructs a DateTime() value.
    The Array() function takes the same parameters as the ArrayNew() function.
  • When choosing overloads for String.Format() and a usual expression is passed as first reference we no longer allow the compiler to choose one of the overloads that expects an IFormatProvider interface.
  • Parameters passed by reference to untyped methods/functions now have the IsByRef flag set. You can query for "By Reference" parameters by checking the parameter with IsByRef(uParameter). Please note that after assigning a new value to a parameter, this flag will be cleared.
  • @@ -2027,12 +2034,12 @@
    Macrocompiler - +
  • The macro compiler now recognizes and compiles nested codeblocks, such as
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb will now contain {||SomeFunc()}
    ? Eval(cb)
  • In the FoxPro dialect the macro compiler now recognizes AND, OR, NOT and XOR as logical operators
  • Runtime - +
  • Added some Xbase++ compatible functions, such as DbCargo(), DbDescend() and DbSetDescend().
  • The DateCountry Enum now also the values System and Windows, which both read the date format from the Regional settings in the System.
  • We have added a WrapperRDD class that you can inherit from. This allows you to wrap an existing RDD and subclass methods of your choice. See the documentation of WrapperRDD for an example.
  • @@ -2046,7 +2053,7 @@
    RDD system - +
  • Fixed locking problems in the DBFCDX RDD that were causing problems when opening files shared between multiple apps but also between multiple threads. The RDD now should properly detect that the CDX was updated by another process or thread.
  • Fixed a problem with the File IO system when running multiple threads
  • Fixed a problem with the File() and FPathName() functions when running multiple threads
  • @@ -2056,11 +2063,11 @@
  • Fix a read error at EOF for the DBF RDD.
  • VOSDK - +
  • Fixed a problem in the DbServer destructor when called at application shutdown for a server that was already closed.
  • Visual Studio integration - +
  • Fixed speed problem in the "Brace Matching" code with the help of a user (thanks Fergus!)
  • You should no longer be able to edit source code when the debugger is running.
  • We have added a property "Register for COM Interop" to the build options of the Project Properties.
  • @@ -2077,18 +2084,18 @@
  • The Code Generator for Windows Forms, Settings and Resources now respect the keyword case setting from the Tools - Options TextEditor/XSharp page.
  • VOXPorter - +
  • Folder names ending with a backslash could confuse VOXPorter
  • Changes in 2.1.1.0 (Bandol GA 2.11) Compiler - +
  • We have added new syntaxes for OUT parameters. You can now use one of the following syntaxes

  •   LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // this declares the out variable inline, the type is derived from the method call
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // this declares the out variable inline, the type is specified by us
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // this tells the compiler to generate an out variable, we are not interested in the result
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // this tells the compiler to generate an out variable, we are not interested in the result.
    // The name "_" has a special meaning "ignore this"
         ? "Parsing succeeded"
      ENDIF
    - +
  • The compiler now allows the function names Date(), DateTime() and Array(). The runtime has these functions (see below)
  • Fixed a preprocessor problem where the <token> match marker inside UDCs was stopping matching tokens when the .not. or ! operator was found after another logical operator such as .AND. or .OR..
  • Added support for <usualValue> IS <SomeType>. The compiler will automatically extract the contents of the USUAL and wrap it in an object and then apply the normal IS <SomeType> operation.
  • @@ -2099,7 +2106,7 @@   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    You can also use the M prefix to indicate a local variable or memory variable. The compiler will try to resolve the variable to the local first and when that fails it will try to resolve the variable to a memory variable (when dynamic memory variables are enabled). Runtime - +
  • We have added support functions for the FoxPro cursor access syntax.
  • In the Vulcan dialect the NoMethod() method now receives the methodname as first parameter (this is NOT compatible with VO)
  • Added functions Date() (can have 0 or 3 parameters, equivalent to Today() and ConDate()), DateTime() and Array().
  • @@ -2108,7 +2115,7 @@
    RDD - +
  • There was a problem reading negative numbers from DBFs. This has been fixed
  • Fixed an exception when FPT drivers were writing data blocks in the FPT file with a 0 byte length.
  • The DBF() function returns the Full filename in the FoxPro dialect and the alias in the other dialects.
  • @@ -2117,7 +2124,7 @@ Changes in 2.1.0.0 (Bandol GA 2.1) Compiler - +
  • We have added support for parameters by reference to function and method calls for untyped parameters
  • In the Xbase++ and FoxPro dialect arguments passed with '@' are always treated as BY REF arguments because these dialects do not support the 'AddressOf' functionality
  • When /undeclared was used and an entity added a new private then this private was not cleared when the entity went out of scope. This has been fixed.
  • @@ -2128,7 +2135,7 @@
  • We have added support for several SET commands, such as SET DEFAULT, SET PATH, SET DATE, SET EXACT etc.
  • Runtime - +
  • We have made some changes to get XSharp.Core to run on Linux
  • We have fixed a problem in the Subtract operator for the Date type. This changes the signature of the Subtract operator which has forced us to increase the Assemblyversion of the runtime.
  • The Xbase++ dialect now allows the [] operator on a string inside a usual. This returns a substring of 1 character for the given position.
  • @@ -2147,7 +2154,7 @@
  • The DateCountry settings now include a System setting which will read the date format from the settings for the current culture.
  • Macrocompiler - +
  • When the macro compiler detects an ambiguous method or constructor it now includes the signatures of these in the error message
  • We have added a new IMacroCompiler2 interface that adds an extra property "Resolver". This property will may receive a Delegate of type "MacroCompilerResolveAmbiguousMatch". This delegate has the following prototype:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • The delegate will be called when the macro compiler detects an ambiguous match and receives the System.Reflection.MemberInfo for possible candidates and an array of the detected types of the arguments (detected at compile time). The delegate can return 1 or 2 to choose between either candidate. Any other value means that the delegate does not know which of the ambiguous members to choose.
    If the macro compiler finds more than 2 alternatives, it first calls the delegate with alternatives 1 & 2, and then the selected delegate from these 2 and alternative 3 etc.
  • @@ -2159,13 +2166,13 @@
  • PCount() for macro compiled codeblocks was always returning 1. This has been fixed.
  • VOSDK - +
  • Fixes a problem with DbServer objects that were not closed in code.
    The existing code was trying to close the workarea from the destructor. But in .Net the destructor runs in a separate thread and in that GC Thread there where no files open...
  • Removed unneeded calls to DbfDebug()
  • The AdsSqlServer class is now added to the VORDDClasses assembly
  • RDD - +
  • We have fixed a problem with parsing incorrect or empty dates
  • We have fixed a problem with reading Dates in the Advantage RDD that could cause a Heap error when reading dates.
  • We have added several 'missing' functions for Advantage support that were in the 'Ace.Aef' for VO
  • @@ -2181,7 +2188,7 @@
  • Visual Studio integration - +
  • The WCF Service template has been fixed
  • We have migrated the project system to the Asynchronous API. This should make loading of solutions with a large number of X# projects a bit faster.
  • Fixed a problem in the Keyword Case synchronization that could lock up the UI for several seconds
  • @@ -2191,7 +2198,7 @@
  • We have improved the type lookup between X# projects.
  • VOXPorter - +
  • DbServer and FieldSpec entities are now also exported
  • VOXPorter now also can genarate a separate project/application that contains Windows Forms versions of the VO GUI windows found in the VO Applications.
  • When running VOXPorter you now can choose to export to XIDE, Visual Studio or Both.
  • @@ -2199,7 +2206,7 @@ Changes in 2.0.8.1 (Bandol GA 2.08a) Compiler - +
  • Fixed a recursion problem in the preprocessor
  • MEMVAR-> and FIELD-> were no longer correcty detected This has been fixed.
  • We have fixed several issues in  dbcmd.xh
  • @@ -2207,12 +2214,12 @@
  • The = Expression() statements (FoxPro dialect) was not generating any code. This has been fixed.
  • Runtime - +
  • XPP.Abstract.NoMethod() and XPP.DataObject.NoMethod() were still expecting the method name as 1st parameter.This has been fixed.
  • StretchBitmap() was doing the same as ShowBitmap() because of an incorrect parameter. This has been fixed.
  • Visual Studio integration - +
  • Improved the Format-Document code
  • Fixed a problem in the VS Parser when looking up the type for variables defined with the VAR keyword which could send VS in an endless loop.
  • The contents of the TEXT .. ENDTEXT block and the line after the \ and \\ tokens now has its own color
  • @@ -2220,7 +2227,7 @@ Changes in 2.0.8 (Bandol GA 2.08) Compiler - +
  • The compiler had a problem with the "return" attribute target
  • Errors inside the "statementblock" rule are now better detected and the compiler will no longer report many errors after these for correct lines of code.
  • Fixed a problem with Casts to logic
  • @@ -2228,12 +2235,12 @@
  • Improved the code generation for FIELDs, MEMVARs and undeclared variables for prefix operation, postfix operations and assignments.
  • Improved the code generation for method calls where the parameter is a ref or out variable when default parameters are involved. The compiler now generates extra temporary variables for these calls.
  • - +
  • In the dialects where this relevant the compiler now also supports ENDFOR as alias for NEXT and FOR EACH as alias for FOREACH.
  • Added support for the DO <proc> [WITH arguments] syntax
  • Runtime - +
  • The DbCreate() function now creates a unique alias when the base filename of the file to create is already opened as an alias
  • The Numeric overflow checking for USUAL values now follows the overflow checks of the main app
  • DbUnLock() now accepts an (optional) record number as parameter
  • @@ -2250,11 +2257,11 @@
  • Fixed a problem with transform and "@ez" picture.
  • VOSDK - +
  • Fixed a problem in the SQLSelect class when re-opening a cursor.
  • RDD System - +
  • Fixed a problem reading Advantage MEMO fields
  • Improved the error messages when an index cannot be opened due to an index expression with an error (for example a missing function)
  • We have added the option to install an event handler in the RDD system. See the topic Workarea Events for more information.
  • @@ -2264,7 +2271,7 @@
  • DbSetRelation() was not working correctly. This has been fixed.
  • VS Integration - +
  • Fixed a problem with the code generation for DbServer and FieldSpec entities
  • Added support for the Import and Export buttons in the DbServer Editor
  • Improved entity parsing inside the editor in the Xbase++ dialect.
  • @@ -2275,11 +2282,11 @@
  • Added compiler option to the Project Property pages to suppress generating a default Win32 manifest.
  • VOXporter - +
  • VOXPorter was ignoring entities that were not properly prototyped in VO. This has been fixed
  • FoxPro dialect - +
  • We have added a compiler option /fox1 that controls the class hierarchy for objects. With /fox1 enabled (the default in the FoxPro dialect) all classes must inherit from the Custom class. The code generation for properties stores the values for properties in a collection inside the Custom class. With /fox1- properties will be generated as "auto" properties with a backing field.
  • We have added support for FoxPro classes. See the topic FoxPro class syntax for more information about what works and what doesn't work.
  • We have added support for DIMENSION and DECLARE statements (which create a MEMVAR initialized with an array)
  • @@ -2287,14 +2294,14 @@ Changes in 2.0.7 (Bandol GA 2.07) Possible breaking change - +
  • We have removed the #define CRLF from the standard header file. There is a DEFINE CRLF in XSharp.Core now. If you are compiling against Vulcan and you are seeing an error about a missing CRLF then you may want to add the following to your code:
    DEFINE CRLF := e”\r\n”
  • Compiler - +
  • UDCs that were resulting in an empty list of tokens were triggering a compiler error in the preprocessor. This has been fixed.
  • - +
  • Calling a method on an array would be translated to a ASend() with the method name as parameter when the method does not exist in the underlying array class.
    The compiler will generate a warning now when this happens,.
  • The compiler was producing incorrect code for (USUAL) casts. This has been fixed. In rare cases this may produce a compilation error. If that happens to you then simply create a usual by calling the USUAL constructor:  USUAL{somevalue}
  • Fixed several problems with methods declared outside of a CLASS .. END CLASS
  • @@ -2304,14 +2311,14 @@
  • Incorrect use of language features (such as using a VOSTRUCT in the Core or FoxPro dialect) is now detected earlier by the compiler leading to somewhat faster compile times for incorrect code.
  • The compiler now also initialized multi dimensional string arrays with an empty string when /vo2 is enabled, like in the code below:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • - +
  • In previous builds you could not set breakpoints on the source code line with a SELF() or SUPER() call if this line was immediately after the CONSTRUCTOR(). This has been fixed.
  • When a project contains "_DLL METHOD", "_DLL ASSIGN" or "_DLL ACCESS" (after exporting from VO) then the compiler will now generate a more meaningful errormessage.
  • The compiler will no longer produce hundreds of the same error messages when a source file contains many of the same error. After 10 errors per source file the compiler will only report unique error numbers. So if your source code has 20 different error messages then you will still see 20 errors reported, but if your source contains the same error type 100 times then the list will be truncated after 10 errors.
  • The compiler no longer allows code behind end tokens such as ENDIF or NEXT. The standard header file 'XSharpDefs.xh' now includes rules that will eliminate these tokens.
  • Runtime - +
  • The ++ and -- operators for the usualtype were not working for Date and Datetime values
  • FErase() and FRename() now set FError() to 2 when the source file does not exist
  • The File() function was throwing an exception for paths with invalid characters. It now returns FALSE and sets the Ferror()
  • @@ -2327,7 +2334,7 @@
  • AEval and AEvalOld() now both pass the array index as second parameter to the codeblock that is evaluated
  • RDD System - +
  • Fixed a problem that EOF and BOF were not both set to true when opening an empty DBF with an index
  • Fixed a problem with DbSeek() and Found() for DBFNTX and DBFCDX
  • The DBF class was not properly decoding field names and/or index expressions that contain Ascii characters > 127 (field names like STRAßE)
  • @@ -2338,7 +2345,7 @@
  • Fixed a small incompatibility between DBFCDX and AXDBFCDX
  • VS Integration - +
  • The Core Classlibrary template had a typo in a file name which caused it not to be loaded correctly
  • The code generator for the Windows Forms editor was duplicating USING statements. This has been fixed. Duplicate using statements will be deleted when a form is opened and saved in the designer.
  • The compilation messages on the output window for the compile time and the number of warnings and errors is now only shown for the build verbosity normal and higher. The warnings and errors message is also shown for lower build verbosity if there are compiler errors.
  • @@ -2348,24 +2355,24 @@
  • The Properties folder is now placed as first child in the tree of a Project, and the VO Binaries items are placed before resource items in the list of children of a source item in the tree.
  • VOXporter - +
  • VOXPorter now prefixes Debug tokens with @@
  • VOXPorter now removes INSTANCE declaration for properties that are also declared as ACCESS/ASSIGN
  • VOXPorter now adds spaces between variable names that are delimited with .AND. or .OR.. So  "a.and.b" becomes "a .and. b"
  • Documentation - +
  • We have "lifted" some of the documentation of the Visual Objects runtime functions and added these to our runtime documentation. This is 'work in progress', some topics will need some extra work.
  • Changes in 2.0.6.0 (Bandol GA 2.06) General - +
  • We received a request to keep the version numbering simpler. For that reason this new build is called Bandol 2.06 and the file versions for this build are also 2.06. The assembly versions for the runtime assemblies are all 2.0, and we intend to keep those stable as long as possible, so you will not be forced to recompile code that depends on the runtime assemblies.
  • Several fixes that were meant to be included in 2.0.5.0 were not included in that build. This has been corrected in 2.0 6.0
  • Compiler - +
  • A missing ENDTEXT keyword now produces an error XS9086
  • Unbalanced textmerge delimiters produce a warning XS9085
  • The TEXT keyword in the FoxPro dialect is now only recognized when it is the first non whitespace token on a line. As a result of this you can use tokens like <text> in Preprocessor commands again.
  • @@ -2373,7 +2380,7 @@
    Runtime - +
  • Runtime errors in late bound code were always shown as TargetInvocationException. The true cause of the error was hidden that way. We are now unpacking the error and rethrowing the original error, including the callstack that was leading to that error
  • Some texts in the string resources were updated
  • Calling the Str() function with a -1 value for length and/or decimals produced results that were not compatible with VO. This was fixed.
  • @@ -2383,25 +2390,25 @@
    RDD System - +
  • The code to read and write to columns in an Advantage workarea now uses separate column objects, just like the code for the DBF RDD. This makes the code a bit easier to understand and should make the code a bit faster.
  • VS Integration - +
  • The text block between TEXT and ENDTEXT is now displayed in the same color as literal strings
  • The VO compatible Project Item templates no longer automatically add references to your project
  • Project files from version 2.01.0 and later will no longer be "touched" when opening with this version of the X# project system, since there have been no changes to the project file format since that build.
  • VOXporter - +
  • The CATCH block in the generated Start function now calls ErrorDialog() to show the errors. This uses the new language resources to display the full error with VO compatible error information (Gencode, Subcode etc)
  • Changes in 2.0.5.0 (Bandol GA 2.01) Compiler - +
  • Blank lines after an END PROPERTY could confuse the compiler. This has been fixed
  • The TEXT .. ENDTEXT command has been implemented in the compiler (FoxPro dialect only)
  • The \ and \\ commands have been implemented (FoxPro dialect only)
  • @@ -2409,11 +2416,11 @@
  • Error messages no longer refer to Xbase types by their internal names (XSharp.__Usual) but by their normal name (USUAL).
  • MacroCompiler - +
  • Creating classes with a namespace prefix was not working. This has been fixed.
  • Runtime - +
  • Fixed a problem with ArrayNew() and multiple dimensions
  • When calling constructor of the Array class with a number the elements were already initialized. This was not compatible with Vulcan.NET. There is now an extra constructor whtich takes a logical parameter lFill which can be used to automatically fill the array
  • The text for the ERROR_STACK language resource has been updated
  • @@ -2424,26 +2431,26 @@
  • We have added several FoxPro system variables (only _TEXT does something at this moment)
  • RDDs - +
  • Zap and Pack operations were not properly setting the DBF file size
  • An Append() in shared mode was not properly setting the RecCount
  • Opening a file with one of the Advantage SQL RDDs was not working. This has been fixed.
  • Writing DateTime.Minvalue to a DBF would not write an empty date but the date 1.1.1 This has been fixed.
  • VO SDK - +
  • Fixed a problem in ListView:EnsureVisible().
  • Some questionable casts (such as the one that cause the previous problem) have been cleaned up
  • Visual Studio Integration - +
  • Parameter tips for constructor calls were off by one parameter. This has been fixed.
  • When looking for types, the XSharp namespace is now the first namespace that is searched.
  • Changes in 2.0.4.0 (Bandol GA) Compiler - +
  • Fix a problem in assignment expressions where the Left side is an aliased expression with a workarea in parentheses:
    (nArea)->LastName := AnotherArea->LastName
  • Multiline statements, such as FOR blocks, no longer generate Multiline breakpoints in the debugger.
  • Fixed a problem where blank lines or lines with 'inactive' preprocessor comments after a class definition would generate a compiler error.
  • @@ -2454,12 +2461,12 @@
  • Indexing PSZ values is no longer affected by the /az compiler option
  • MacroCompiler - +
  • Fixed a problem with some aliased expressions
  • The macro compiler now detects that you are overriding a built-in function in your own code and will no longer throw an "ambigous method" exception but will choose function from your code over functions defined in the X# runtime
  • Runtime - +
  • FIxed several problems in the Directory() function
  • Fixed problem with indexing PSZ values
  • Added StackTrace property on the Error object so also errors caught in a BEGIN SEQUENCE will have stack information.
  • @@ -2473,7 +2480,7 @@
  • Added a Turkish language resource.
  • RDD System - +
  • Fix locking problem in FPT files
  • Fixed several problems with OrdKeyCount() and filters, scopes and SetDeleted() setting
  • Some DBF files have a value in the Decimals byte for field definitions for field types that do not support decimals. This was causing problems. These decimals are now ignored.
  • @@ -2483,24 +2490,24 @@
  • Fixed several problems with OrdKeyCount() in combination with Filters, SetDeleted() and scopes.
  • VO SDK Classes - +
  • Most of the libraries now compile with "Late Binding" disabled for better performance.
    To help in doing this some typed properties have been added such as SqlStatement:__Connection which is typed as SQLConnection.
  • Visual Studio integration - +
  • Fixed a problem in the Brace matching code
  • Improved Brace matching for keywords. Several BEGIN .. END constructs have now been included as well as CASE statements inside DO CASE and SWITCH, RECOVER, FINALLY, ELSE, ELSEIF and OTHERWISE
  • Fix a problem with adding and deleting references when unloaded or unavailable references existed.
  • VOXPorter - +
  • The program is now able to comment, uncomment and delete source code lines from the VO code when exporting to XSharp.
    You have to add comments at the end of the line. The following comments are supported:
  • // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    example:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    Changes in 2.0.3.0 (Bandol RC3) Compiler - +
  • Code generation for STATIC LOCALs of type STRING was not initializing the variables to an empty string when /vo2 was selected. We have also improved code generation for STATIC LOCALs when they are initialized with a compile time constant
  • In preparation for the support for variables passed by reference to functions/methods with clipper calling convention we are now assigning back the locals variables to the parameter array at the end of a function/method with clipper calling convention.
  • The compiler would not complain if you were assigning a value of one enum to a variable of another enum. This has been fixed.
  • @@ -2512,14 +2519,14 @@
  • The compiler was allowing you to use the '+' operator between variables/ expressions of type string and logic. This is now flagged as an error.
  • MacroCompiler - +
  • Fixed a problem with resolving Field names that were identical to keywords or keyword abbreviations (for example DATE and CODE) and for Field names that are equal to built-in function names (such as SET)
  • Fixed a problem where a complicated expression evaluated with an alias prefix was not evaluated correctly.
  • The macro compiler initializes itself from the Dialect option in the runtime to enable/disable certain behavior.
  • The macro compiler now recognizes the "." operator for workarea access and memvar access when running in the FoxPro dialect.
  • Runtime - +
  • Added functions FieldPutBytes() and FieldGetBytes()
  • Added function ShowArray()
  • Added several defines that were missing, such as MAX_ALLOC and ASC_A.
  • @@ -2536,7 +2543,7 @@
  • Casts from USUAL values to SHORT, WORD, BYTE and SBYTE are no longer checked to be compatible with VO.
  • RDD System - +
  • Added support for different block sizes in DBFFPT.
  • DBFFPT now allows to override the block size (when creating) from the users code. Please note that block sizes < 32 bytes prevent the FPT from opening in Visual FoxPro.
  • Added support for reading various Flexfile memo field types, including arrays.
  • @@ -2560,18 +2567,18 @@ So this creates a nullable date: "D0" and this creates an autoincremental integer "I+". Auto increment columns are initialized with a counter that starts with 1 and a step size of 1. You can change that by calling DbFieldInfo: DbFieldInfo(DBS_COUNTER, 1, 100) // sets the counter for field 1 to 100
            DbFieldInfo(DBS_STEP, 1, 2)   // sets the step size for field 1 to 2
    - +
  • Fixed a locking problem with FPT files opened in shared mode
  • Fixed several problems related to OrderKeyCount() and various settings of Scopes and SetDeleted()  in the DBFCDX RDD.
  • VO SDK Classes - +
  • Fixed a problem in the DateTimePicker class when assigning only a time value.
  • System classes and RDD classes have been cleaned up somewhat and now compile in AnyCPU mode. So this means that you can use the DbServer class in a 64 bit program !
    The projects for these two libraries also no longer have the "Late Binding" compiler option enabled. There is still some late bound code in these libraries but this code now uses explicit late bound calls such as Send(), IVarGet() and IVarPut().
  • Because of the change in the handling of __DEBUG__ some SDK assemblies are not better optimized.
  • Visual Studio integration - +
  • Added support for WITH .. END WITH blocks in the editor
  • When generating Native Resources (RC files) the BuildSystem now sets a #define __VERSION__. This will have the fileversion number of the XSharp.Build.DLL without the dots. (2.1.0.0 will be written as "2100")
  • The XSharp help item in the VS Help menu now opens the local Help (CHM) file
  • @@ -2584,13 +2591,13 @@
  • We have made some improvements to the presentation of QuickInfo in the source code editor.
  • Tools - +
  • VOXporter now also exports VERSIONINFO resources
  • Changes in 2.0.2.0 (Bandol RC 2) Compiler - +
  • File wide PUBLIC declarations (for MEMVARs) were incorrectly parsed as GLOBALs. Therefore they were initialized with NIL and not with FALSE. They are now generated correctly as public Memvars. The creation of the memvars and the initialization is done in after the Init3 procedures in the assembly have run.
  • Instance variable initializers now can refer other fields and are allowed to use the SELF keyword. This is still not recommended. The order in which fields are initialized is the order in which they are found in the source code. So make sure the field initializers are defined in the right order in your code.
  • AUTO properties are now also initialized with an empty string when /vo2 is enabled.
  • @@ -2598,10 +2605,10 @@
  • When the compiler detects 2 ambiguous symbols with different types (for example a LOCAL and a CLASS with the same name) then the error message now clearly indicates the type for each of these symbols.
  • Fixed an exception in the Preprocessor
  • - +
  • Added support for the FoxPro runtime DLL.
  • - +
  • The ANY keyword (an alias for USUAL) is no longer supported.
  • Keywords that appear after a COLON (":") DOT (".") or ALIAS (->) operator are no longer parsed as keyword but as identifier. This should solve issues with parsing code that for example accesses the Date property of a DateTime class.
  • We have added support for the WITH .. END WITH statement block:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    You can also use the DOT (.) as prefix for the names. The only expressions allowed inside WITH .. ENDWITH are assignments and method calls (like you can see above)
  • @@ -2697,19 +2704,19 @@ - +
  • The compiler now registers the Dialect of the main in the Dialect property of the RuntimeState (Non Core dialects only)
  • MacroCompiler - +
  • Fixed a problem with escaped literal strings
  • - +
  • Fixed a problem with implicit narrowing conversions
  • Fixed a problem with macro compiled alias operations  (Customer)->&fieldName
  • Runtime - +
  • Fixed a problem in the Round() function.
  • Fixed a problem in the ExecName() function.
  • Added FoxPro runtime DLL.
  • @@ -2719,13 +2726,13 @@
  • converting a NULL to a symbol would cause an exception. This has been fixed.
  • RDD system - +
  • Fixed several problems in the ADS RDD
  • The DBFCDX RDD is now included
  • The DBFVFP RDD is now included. This RDD can be used to access files with DBF/FPT/CDX extension and support the Visual Foxpro field types, such as Integer, Double, DateTime and VarChar. Reading files should be fully supported. Writing should also work with the exception of the Picture and General formats and with the exception of the AutoIncremental Integer fields. You can also use the RDD to open the various "definition" files from VFP such as projects, forms and reports. The RDD 'knows' about the different extensions for indexes and memos. You can also open DBC files as normal tables. In a future version we will support the VFP database functionality.
  • Visual Studio Integration - +
  • You can now specify that multi line statements should indent on the 2nd and subsequent lines.
  • Type lookup for functions inside a BEGIN NAMESPACE .. END NAMESPACE did not include the types in this namespace.
  • Started intellisense for INLINE methods in the Xbase++ dialect
  • @@ -2734,7 +2741,7 @@
  • Several other (smaller) improvements.
  • Tools - +
  • VOXporter now writes DEFINES in the RC files and no longer literal values.
  • VOXporter: fix for module names with invalid chars for filenames
  • @@ -2743,7 +2750,7 @@ Changes in 2.0.1.0 (Bandol RC 1) Compiler - +
  • Added support for the so called IF Pattern Expression syntax, which consists of an IS test and an assignment to a variable, prefixed with the VAR keyword:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    The variable oFoo introduced in the expression will only be visible inside the IF statement.
    Of course you can also use the pattern on other places, such as ELSEIF blocks, CASE statements, WHILE expressions etc:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • Fixed a problem with method modifiers and generic methods
  • Fixed a problem with partial classes with different casing and destructors
  • @@ -2763,7 +2770,7 @@
  • The Roslyn code was not marking some variables as 'assigned but not read' to be compatible with the old C# compiler. We are now flagging these assignments with a warning. This may produce a lot of warnings in your code that were not detected before.
    To support this we have received some requests to "open up" the support for 1 based indexes in the compiler. In the past the compiler would only allow 1 based indexing for variables of type System.Array or of the XBase ARRAY Type.
    We have now added a couple of interfaces to the runtime. If your type implements one of these interfaces then the compiler will recognize this and allow you to use 1 based indexes in your code and then the compiler will automatically subtract 1 from the numeric index parameter. The XSharp ARRAY type and ARRAY OF type now also implement (one of) these interfaces/
    The interfaces are:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • Runtime - +
  • Fixed some problems in the OrderInfo() function
  • Fixed several problems with DB..() functions in the runtime
  • Fixed several problems with the macro compiler
  • @@ -2783,7 +2790,7 @@
  • Changed implementation of the functions used by the compiler for Aliased operations
  • RDD system - +
  • Added support for DBF character fields up to 64K.
  • Implemented the DBFCDX RDD
  • Fixed several problems related to the DBFNTX RDD
  • @@ -2791,7 +2798,7 @@
  • Macro compiled index expressions are not of the type _CodeBlock and not of the type RuntimeCodeBlock (the RuntimeCodeblock is encapsulated inside the _CodeBlock object).
    That prevents problems when storing these expressions inside a USUAL
  • Visual Studio integration - +
  • Fixed an exception that could occur when typing a VAR expression
  • When the project system makes a backup of a project file, we are now making sure that Readonly flags are cleared before writing to or deleting existing files.
  • Reading intellisense data from C++ projects could send the intellisense engine into an infinite loop. This has been fixed.
  • @@ -2809,7 +2816,7 @@
  • Sometimes a type lookup for intellisense was triggered inside a comments region. This has been fixed.
  • Tools - +
  • VOXPorter was not removing calling conventions when creating delegates. This has been fixed
  • VOXporter was sometimes generating project files with many duplicates of resource items. This has been fixed.
  • VOXporter now marks prefix identifiers that conflict with one of the new keywords with "@@"
  • @@ -2819,17 +2826,17 @@ Changes in 2.0.0.9 (Bandol Beta 9) Compiler - +
  • The Lexer (the part of the compiler that recognizes keywords, literals etc) has been rewritten and is slightly faster.
  • The compiler now supports digit separators for numeric literals. So you can now write 1 million as:
    1_000_000
  • - +
  • Fixed problem where static local variables were not initialized with "" even when compiler option -vo2 was selected
  • #ifdef commands using preprocessor macros such as __XSHARP_RT__ were not working correctly.
  • The Xbase++ dialect now also supports the 'normal' class syntax.
  • We had changed the 'Entrypoint' algorithm in Beta 8. This has been restored now and the -main command line option now works again as well. In stead the "body" of the Start method is now encapsulated in an anonymous function.
  • - +
  • Duplicate include files no longer produce an error but a warning
  • Fix for problem with default parameter values with 'L' or 'U' suffix
  • Added compiler error when specifying default parameter values for methods/functions with clipper calling convention
  • @@ -2846,7 +2853,7 @@
  • CASE statements without CASE block but only a OTHERWISE block would crash the compiler. This has been fixed and an warning about an empty CASE statement has been added.
  • Runtime - +
  • Several changes to the Macro compiler, such as the parsing of Hex literals, case sensitivity of parameters (they are no longer case sensitive) and limited support for function overloading.
  • Several missing functions have been added, such as _Quit(),
  • The return value of several Ord..() functions was incorrect. This has been fixed.
  • @@ -2859,7 +2866,7 @@
  • SetDecimalSep() and SetThousandSep() now also set the numeric separators in the current culture.
  • The USUAL -> STRING conversion now calls AsString()
  • - +
  • Added support for Dbase style dynamic memory variables (MEMVAR, PUBLIC, PRIVATE, PARAMETERS). See the Memory Variables topic in the help file for more information.
  • The IsDate() function now also returns TRUE for USUALs of type DateTIme. There is also a separate IsDateTime() function. We have also added IsFractional() (FLOAT or DECIMAL) and IsInteger (LONG or INT64) and IsInt64()
  • Added missing Cargo slot to the Error class. Also improved Error:ToString()
  • @@ -2867,15 +2874,15 @@
  • And many more small changes.
  • Visual Studio Integration - +
  • We have added a new tab page in the Project Properties dialog: Dialect. This contains dialect specific language options.
  • 2 options from the Build options page (which is configuration dependent) have been moved to the Language page (which is build INdepedent), because that makes more sense:
  • - +
  • Include Path
  • NoStdDef
  • - +
  • We have also added a project property on the Language page to specify an alternative standard header file (in stead of XSharpDefs.xh)
  • The XSharp.__Array type was shown in the intellisense with the wrong name
  • We have added entries on the Project Properties dialog pages to enable MEMVAR support and to enable Undeclared variables
  • @@ -2890,26 +2897,26 @@
  • Commenting a single line in the editor will now always use the // comment format
  • Tools - +
  • No changes in this release.
  • Changes in 2.0.0.8 (Bandol Beta 8) Compiler - +
  • The compiler source code has been upgraded to Roslyn 2.10 (C# 7.3). As a result of that there are some new compiler options, such as /refout and we also support the combination of the "PRIVATE PROTECTED" modifier that defines a type member as accessible for subclasses in the same assembly but not for subclasses in other assemblies
  • We have added support for Xbase++ class declarations. See the Xbase++ class declaration topic for more information about the syntax and what is supported and what not.
  • We have added support for simple macros with the &Identifier syntax
  • We have added support for late bound property access:
  • - +
  • The <Expression>:&<Identifier> syntax.
    This translates to IVarGet(<Expression>, <Identifier>).
  • The <Expression>:&(<Expression2>) syntax.
    This translates to IVarGet(<Expression>, <Expression2>).
  • Both of these can also be used for assignments and will be translated to IVarPut:
    <Expression>:&<Identifier> := <Value>
    This becomes IVarPut(<Expression>, <Identifier>, <Value>)
  • All of these will work even when Late Binding is not enabled.
  • - +
  • We have added a new compiler options /stddefs that allows you to change the standard header file (which defaults to XSharpDefs.xh)
  • We have added a new preprocessor Match marker <#idMarker> which matches a single token (all characters until the first whitespace character)
  • When you select a dialect now, then the compiler will automatically add some compiler macros. The VO dialect declares the macro __VO__, the Vulcan dialect declares the macro __VULCAN__ the harbour dialect declares the macro __HARBOUR__ and the Xbase++ dialect declares the macro __XPP__.
  • @@ -2918,7 +2925,7 @@
  • We have also added a warning that will be shown when you assign a value from a larger integral type into a smaller integral type to warn you about possible overflow problems.
  • Runtime - +
  • This build includes a new faster macro compiler. It should be fully compatible with the VO macro compiler. Some of the .Net features are not available yet in the macro compiler.
  • We moved most of the generic XBase code to XSharp.RT.DLL. XSharp.VO.DLL now only has VO specific code. We have also added XSharp.XPP.DLL for XPP
  • Fix Ansi2OEM problem with FRead3(), FWrite3() and FReadStr
  • @@ -2939,7 +2946,7 @@
  • DebOut32 was not outputting data to the debug terminal if the runtime was compiled in release mode. This has been fixed.
  • Visual Studio Integration - +
  • Fixed filtering on 'current project' in the error list
  • Type lookup for local variables was sometimes failing. This has been fixed
  • Fixed a problem with Brace Matching that could cause an exception in VS
  • @@ -2952,7 +2959,7 @@
  • PRG files that are not part of a X# project and not part of a Vulcan project are now also colorized in the editor.
  • Tools - +
  • VulcanXPorter was always adjusting the referenced VO libraries and  was ignoring the "Use X# Runtime" checkbox
  • VOXPorter now has an option to copy the resources referenced in the AEF files to the Resources subfolder in the project
  • VOXPorter now also copies the cavowed, cavofed and cavoded template files to the properties folders in your project.
  • @@ -2961,7 +2968,7 @@ Changes in 2.0.0.7 (Bandol Beta 7) Compiler - +
  • When calling a runtime function with a USUAL parameter the compiler now automatically prefers methods or functions with "traditional' VO types over the ones with enhanced .Net types. For example when there are 2 overloads, one that takes a byte[] and another that takes a string, then the overload that takes a string will get preference over the overload that takes a byte[].
  • Resolved a problem with .NOT. expressions inside IIF() expressions
  • Improved debugger break point generation for Invoke expressions ( like String.Compare())
  • @@ -2970,7 +2977,7 @@
  • The code generated by the compiler for Array operations now uses the new interfaces declared in the X# runtime (see below).
  • Runtime - +
  • We have added several missing functions, such as _GetCmdLine, Oem2AnsiA() and XSharpLoadLibrary
  • Fixed problems in CreateInstance, IVarGet, IVarPut(), CtoDAnsi() and more.
  • Added VO Compatible overload for FRead4()
  • @@ -2979,25 +2986,25 @@
  • We have added a new FException() function that returns the last exception that occurred for a low level file operation
  • Casting a usual containing a PTR to a LONG or DWORD is now supported
  • Some new interfaces have been added related to array handling. The compiler no longer inserts a cast to Array inside the code, but inserts a cast to one of these interfaces depending on the type of the index parameter. The USUAL type implements IIndexer and IIndexProperties and dispatches the call to the objects inside the usual when this objects exposes the interface. This is used for indexed access of properties when using AEval or AScan on an ARRAY OF <type>
  • - +
  • XSharp.IIndexer
  • XSharp.INamedIndexer
  • XSharp.IIndexedProperties
  • SDK Classes - +
  • We have added the Hybrid UI classes from Paul Piko (with permission from Paul)
  • Tools - +
  • The Vulcan XPorter now also has an option to replace the runtime and SDK references with references to the X# runtime
  • Changes in 2.0.0.6 (Bandol Beta 6) Compiler - +
  • The compiler was sometimes still generating warnings for unused variables generated by the compiler. This has been fixed.
  • The compiler will now produce a warning that #pragmas are not supported yet (9006)
  • Added compiler macro __FUNCTION__ that returns the current function/method name in original casing.
  • @@ -3017,7 +3024,7 @@
  • Fixed a problem in the PDB line number generation that would cause incorrect line numbers in the debugger
  • Visual Studio integration - +
  • The source code editor was not always showing the correct 'active' region for #defines defined in #include files.
  • Opening a source file without entities (e.g. a header file) could result in an error message inside VS.
  • Fixed a null reference exception in the editor
  • @@ -3028,16 +3035,16 @@
  • Added an option to select the Harbour dialect on the project properties page.
  • The Build System - +
  • The Build system did not recognize that begin NAMESPACE lines in source code were commented out. This has been fixed.
  • VOXporter - +
  • We have added an option to sort the entities in alphabetical order in the output file.
  • We have added an option so you can choose to add the X# Runtime as reference to your application (otherwise the Vulcan runtime is used)
  • Runtime - +
  • The SetCentury setting was incorrect after calling SetInternational(#Windows). This has been fixed.
  • The Descend function for dates now returns a number just like in VO
  • The functions ChrA and AscA have been renamed to Chr() and Asc() and the original functions Chr() and Asc() have been removed. The original functions were using the DOS (Oem) codepage and this is not compatible with Visual Objects.
  • @@ -3047,13 +3054,13 @@
  • All String - PSZ routines (String2PSz(), StringAlloc() etc) now use the Windows Codepage to convert the unicode strings to ansi.
  • If you library is compiled with 'Compatible String comparisons' but the main app isn't, then the string comparisons in the library will follow the same rules as the main app because the main app registers the /vo13  setting with the runtime. The "compatible" stringcomparison routines in the runtime now detect that the main app does not want to do VO compatible string comparisons and will simply call the normal .Net comparison routines.
    We therefore recommend that 3rd party products always use the Compatible String comparisons in their code.
  • - +
  • Preliminary documentation for the runtime was generated from source code comments and has been included as chapter in this documentation.
  • The VO SDK - +
  • This build includes the first version of the VO SDK compiled against the X# runtime. We have included the following class libraries
  • - +
  • Win32API
  • System Classes
  • RDD Classes
  • @@ -3064,14 +3071,14 @@
  • Report Classes
  • - +
  • All assemblies are named VO<Name>.DLL and the classes in these assemblies are in the VO namespace.
  • This SDK is based on the VO 2.8 SP3 source code. The differences between VO 2.8 SP3 and VO 2.8 SP4 will be merged in the source later,
  • The Libraries for OLE, OleServer and Internet Server are not included. The OleAutoObject class and its support classes is included in the XSharp.VO library. OleControl and OleObject are not included.
  • Preliminary documentation for these classes was generated from source code comments and has been included as chapter in this documentation.
  • The RDD system - +
  • This build includes the first version of the RDD system. DBF-DBT is ready now. Other RDDs will follow in the next builds. Also most of the RDD related functions are working in this build.
  • This build also includes the first version of the Advantage RDD. With this RDD you can access DBF/DBT/NTX files , DBF/FPT/CDX files and ADT/ADM/ADI files. The RDD names are the same as the RDD names for Vulcan. (AXDBFCDX, AXDBFNTX, ADSADT). We also support the AXDBFVFP format and the AXSQLCDX, AXSQLNTX, AXSQLVFP. For more information about the differences and possibilities of these RDD look in the Advantage documentation.
    We have coded the Advantage RDD on top of the Advantage Client Engine. Our RDD system detects if you are running in x86 or x64 mode and calls functions in Ace32 or Ace64 accordingly.
    To use Advantage you copy the support DLLs from an Advantage Vulcan RDD to the folder of your application. Look at the Advantage docs for Vulcan to see the list of the DLLs. The Advantage RDD is part of the standard XSharp.RDD.DLL which therefore replaces the AdvantageRDD.Dll for Vulcan.
  • The XSharp.Core DLL now also has RDD support. We have chosen NOT to implement this in functions, but as static methods inside the CoreDb class. Old code that uses the VoDb..() functions can be simply ported by changing "VoDb" to "CoreDb."
    The parameters and return values that are USUAL in VO and Vulcan are implemented as OBJECT in the CoreDb class.
    The ..Info() methods have 2 overloads. One that takes an Object and one that takes a reference to an object.
    The methods inside CoreDb return success or failure with a logical value like the VODB..() functions in VO. If you want to know what the error was during the last operation then you can access that with the method CoreDb._ErrInfoPtr() . This returns the last exception that occurred in a RDD operation.
  • @@ -3085,31 +3092,31 @@ Changes in 2.0.0.5 (Bandol Beta 5) Compiler - +
  • The strong named key for assemblies with native resources was invalid. This has been fixed
  • When an include file was included twice for the same source (PRG) file then a large number of compiler warnings for duplicate #defines would be generated. Especially when the Vulcan VOWin32APILibrary.vh was included twice then over 15000 compiler warnings would be generated per source file where this happened. This large number of warnings could lead to excessive memory usage by the compiler. We are now outputting a compilation error when we detect that the same file was included twice. We have also added a limit of 500 preprocessor errors per source (PRG) file.
  • A change in Beta 4 could result in compiler warnings about unused variables that were introduced automatically by the X# compiler. This warning will no longer be generated.
  • The compiler now correctly stores some compiler options in the runtime state of XSharp.
  • Runtime - +
  • Fixed a problem in the Ansi2OEM and OEM2Ansi functions.
  • Fixed a problem in the sorting for SetCollation(#Windows)
  • Fixed a problem with string comparisons in runtime functions like ASort(). This now also respects the new runtime property CompilerOptionVO13 to control the sorting
  • Visual Studio integration - +
  • The sorting of the members in the editor dropdown for members was on methodname and propertyname and did not include the typename. When a source file contained more than one type then the members would be mixed in the members dropdown
  • Build System - +
  • The default value for VO15 has been changed back from false to undefined.
  • Changes in 2.0.0.4 (Bandol Beta 4) Compiler - +
  • POSSIBLY BREAKING CHANGE: Functions now always take precedence over same named methods. If you want to call a method inside the same class you need to either prefix it with the typename (for static methods) or with the SELF: prefix. If there is no conflicting function name then you can still call the method with just its name. We recommend to prefix the method calls to make your code easier to read.
  • The compiler was accepting just an identifier without a INSTANCE, EXPORT or other prefix and without a type inside a class declaration. It would create a public field of type USUAL. That is no longer possible.
  • Improved the positional keyword detection algorithm (this also affects the source code editor)
  • @@ -3118,13 +3125,13 @@
    And will compile this with a warning that you should use the assignment operator (:=). We have added this because many people (including we) copy examples from VB and C# where the operator is a single equals token. - +
  • Error messages about conflicting types now include the fully qualified type name.
  • The compiler no longer includes the width for literal Floats. This is compatible with VO.
  • A Default parameter of type Enum is now allowed.
  • Runtime - +
  • Added several functions that were missing, such as __Str() and DoEvents()
  • Fixed a problem in the macro compiler with non-english culctures.
  • Added several overloads for Is..() functions that take a PSZ instead of a string, such as IsAlpha() and IsUpper().
  • @@ -3138,7 +3145,7 @@
  • Fixes for the Str() family of functions in combination with SetFixed() and SetDigitFixed().
  • Visual Studio integration - +
  • Fixed a problem when building projects in the latest build of Visual Studio
  • Several 'keywords' were not case synchronized before, such as TRUE, FALSE, NULL_STRING etc,
  • Keywords are not case synchronized on the current line as long as the user has the cursor on them or immediately after them. That means that when you type String and want to continue to change it to StringComparer then the formatter will no longer kick in and change "String" to the keyword case before you have the chance to complete the word.
  • @@ -3150,13 +3157,13 @@
  • Fixed a problem when debugging in X64 mode.
  • Fixed an exception when comparing source code files with SCC integration.
  • Fixed several problems w.r.t. the XAML editor:
  • - +
  • Code is now generated with STRICT calling convention to avoid problems when compiler option "Impliciting CLIPPER calling convention" is enabled
  • WPF and other templates now include STRICT calling convention for the same reason
  • The XAML editor could not properly load the current DLL or EXE and had therefore problems resolving namespaces and adding user controls to the tool palette. This has been fixed.
  • - +
  • We have added an option to the Tools/Editor/XSharp/Intellisense options that allow you to control how the member combobox in the editor works. You can choose to only show methods & properties of the current type or all entities in the right combobox. The left combobox always shows all types in the file.
  • Some of the project and item templates have been updated. Methods and constructors without parameters now have a STRICT calling convention. Also the compiler option /vo15 has been explicitly disabled in templates for the Core dialect.
  • @@ -3164,21 +3171,21 @@ Changes in 2.0.0.3 (Bandol Beta 3) Compiler - +
  • When 2 method overloads have matching prototypes the compiler now prefers the non generic one over the generic one
  • Fixed an exception that could occur when compiling a single line of source code with a preprocessor command in it.
  • Runtime - +
  • Added Mod() function
  • Added ArrayNew() overload with no parameters
  • - +
  • Fixed problem in __StringNotEquals() when length(RHS) > length(LHS) and SetExact() == FALSE
  • Added missing string resource for USUAL overflow errors
  • Visual Studio integration - +
  • Improved keyword case synchronization and indenting. Also a source file is 'Keyword Case' synchronized when opened.
  • Opening a source file by double clicking the find results window no longer opens a new window for the same source file
  • Improved type lookup speed for intellisense
  • @@ -3190,18 +3197,18 @@
  • Fixed problem in the window editor with generating code for tab pages
  • Vulcan XPorter - +
  • Project dependencies defined in the solution file were not properly converted
  • VO XPorter - +
  • Fixed a problem where resource names were replaced with the value of a define
  • Changes in 2.0.0.2 (Bandol Beta 2) Compiler - +
  • The compiler now transparently accepts both Int and Dword parameters for XBase Array indices
  • When the compiler finds a weakly typed function in XSharp.VO and a strongly typed version in XSharp.Core then it will choose the strongly typed version in XSharp.Core now.
  • In the VO and Vulcan dialect sometimes an (incorrect) warning 'duplicate usings' was displayed. This is now suppressed.
  • @@ -3211,7 +3218,7 @@
  • /vo6, /vo7 and /vo11 are now only supported in the VO/Vulcan dialect
  • Runtime - +
  • Removed DWORD overloads for Array indexers
  • Fixed overload problem for ErrString()
  • Fixed overload problem for _DebOut()
  • @@ -3220,7 +3227,7 @@
  • Fixed memory blocks now get filled with 0xFF when they are released to help detect problems
  • Visual Studio - +
  • Fix 'Hang' in VS2017 when building
  • Fix 'Hang' in VS2017 when a tooltip (QuickInfo) was displayed
  • Fixed problem with debugging x64 apps
  • @@ -3230,7 +3237,7 @@
  • Enhancements in the Goto Definition
  • Build System - +
  • Fix problem with CRLF in embedded resource commandline option
  • @@ -3238,14 +3245,14 @@ Changes in 2.0.0.1 (Bandol Beta 1) Compiler New features - +
  • Added support for ARRAY OF language construct. See the Runtime chapter  for more information about this.
  • Added support for the X# Runtime assemblies when compiling in the VO or Vulcan dialects.
  • Added support for the "Pseudo" function ARGCOUNT() that returns the # of declared parameters in a function/method compiled with clipper calling convention.
  • Added a new warning number for assigning values to a foreach local variable. Assigning to USING and FIXED locals will generate an error.
  • Optimizations - +
  • Optimized the code generation for Clipper calling convention functions/methods
  • The /cf and /norun compiler options are no longer supported
  • The preprocessor no longer strips white space. This should result in better error messages when compiling code that uses the preprocessor.
  • @@ -3254,7 +3261,7 @@
  • The preprocessor now generates an error when it detects recursive #include files.
  • Bug fixes - +
  • Fixed a problem when using the [CallerMemberAttribute] on parameters when compiling in Vulcan or VO Dialect
  • Abstract properties should no longer generate a warning about a body
  • You can now correctly use ENUM values as array indexes.
  • @@ -3264,14 +3271,14 @@
  • Fixed an issue where the declaration LOCAL x[10] was not compiled correctly. This now compiles into a local VO Array with 10 elements.
  • Visual Studio Integration - +
  • Build 1.2.1 introduced a problem that could cause output files to be locked by the intellisense engine. This has been fixed
  • The editor parser had problems with nested types. This has been fixed
  • Enum members were not included in code completion for enums inside X# projects
  • Some improvements in the code reformatting
  • Added option on the Tools/Options for the editor to include keywords in the "All tokens" completion list
  • - +
  • Fixed a problem where assemblies that could not be loaded to retrieve meta information would be retried 'for ever'
  • Fixed a problem with retrieving type information from assemblies that contained both managed and unmanaged code.
  • Added some properties for referenced assemblies to the IDE Properties window
  • @@ -3282,22 +3289,22 @@
  • Fixed a problem where the codemodel was sometimes locking output DLLs for Project references
  • Build System - +
  • Fixed a problem with the naming of the XML documentation file.
  • Runtime - +
  • Added XSharp.Core.DLL, XSharp.VO.DLL and XSharp.Macrocompiler.DLL.
    Most runtime functions are implemented and supported. See the X# Runtime chapter for more information
  • VO XPorter - +
  • SDK related options have been removed. They will be moved to a new tool later.
  • Changes in 1.2.1 Compiler - +
  • Fixed a problem where a compilation error resulted in the message "Failed to emit module" without further information
  • Fixed a problem with ++, -- += and similar operations in aliased expressions (like CUSTOMER->CUSTNO++)
  • Constructor initializers and Collection initializers were not working after a constructor with parameters. That has been fixed.
  • @@ -3306,7 +3313,7 @@
      CATCH ID AS ExceptionType
      CATCH ID                  // defaults to Exception type
      CATCH AS ExceptionType  
      CATCH            // defaults to Exception type
    Visual Studio Integration - +
  • Improved the speed of the background code scanning
  • Improved the speed of the background parser inside the editor
  • Fixed a problem in the codedom provider that is used by the windows forms editor
  • @@ -3315,7 +3322,7 @@ Changes in 1.2.0 Compiler - +
  • You can now pass NULL for parameters declared by reference for compatibility with VO & Vulcan.
    We STRONGLY advise not to do this, unless you make sure that the function expects this and does not assign to the reference parameter without checking for a NULL reference first. This will only work when the /vo7 compiler option is enabled.
  • We have made some optimizations in the Lexer. The compiler should be a little faster because of that
  • We fixed a problem with the automatic constructor generation (/vo16) for classes that inherit from classes defined in an external DLL
  • @@ -3330,7 +3337,7 @@
  • The compiler now generates a warning when the #pragma command is used
  • Visual Studio Integration - +
  • More performance improvements in the editor. Especially large source files with incorrect code could slow down the editor.
  • The editor parser no longer tries to parse include files repeatedly when these files contain #defines only (like the Vulcan header files)
  • The source code editor tried to show intellisense for words in a comment region. That has been fixed.
  • @@ -3340,19 +3347,19 @@
  • Matching keywords, such as IF .. ENDIF and FOR .. NEXT should now be highlighted in the editor
  • If you select an identifier in the editor then that identifier will be highlighted in the current method/function on all places where it is used
  • We have added several features that you need to enable/disable on the Tools/Options/Text Editor/XSharp/Intellisense dialog:
  • - +
  • The code completion in the editor also supports instance member completion when a dot is pressed.
    Please note that the compiler ONLY accepts this in the Core language, not in the VO & Vulcan dialect. So the option has no effect inside projects with other dialects.
  • We have added some options to control the sorting of the DropDown comboboxes in the editor, as well as if fields/instance variables should be included in these comboboxes. When you do not sort, then the entries in the dropdown box will be shown in the order in which they are found in the source file.
  • We have added the option to autocomplete identifiers when typing. This includes locals, parameters, class fields, namespaces, types etc.
  • - +
  • Overridden methods in subclasses with the same signature as the parent methods they override are no longer counted as overloads in completionlists
  • A missing reference DLL could "kill" the intellisense engine. This no longer happens. Of course the type info from a missing referenced DLL is not included.
  • Properties and methods in the generated source files for XAML code (the .g.prg files in the OBJ folder) are now also parsed and included in the completion lists in intellisense and in the Class Browser and Object Browser windows.
  • VOXPorter - +
  • The installer now includes the correct version of VOXPorter <g>
  • VOXporter now supports the following commandline options:
    /s:<source folder or aef>
  • @@ -3360,7 +3367,7 @@ /r:<runtime folder> /nowarning - +
  • Some code corrections were added for issues found in the GUI classes
  • The template files can now also be found when VOXPorter is run from a different working directory
  • @@ -3368,19 +3375,19 @@ Changes in 1.1.2 Compiler - +
  • Added compiler warning for code that contains a #pragma
  • Fixed a problem with iif() functions and negative literal values
  • Visual Studio Integration - +
  • Fixed a slowness in the editor after typing a send (: ) operator
  • Enum values are now properly decoded in the debugger
  • Fixed the CodeDom provider for handling literal FALSE values and negative numbers. As a result, more (Vulcan created) winforms should open without problems
  • Some positional keywords (such as ADD and REMOVE) are no longer colored as keyword in the editor for incomplete code when they appear after a colon ‘:’ or dot ‘.’;
  • VOXPorter - +
  • Fixes for exporting the VO RDD Classes from the SDK
  • @@ -3388,7 +3395,7 @@ Changes in 1.1.1 Compiler - +
  • Fixed a problem with Debugger Breakpoints for DO CASE and OTHERWISE
  • Fixed a problem with Debugger Breakpoints for sourcecode that is defined in #included files
  • Added support for the Harbour Global Syntax where the GLOBAL keyword is optional
  • @@ -3398,14 +3405,14 @@
  • Prepared the compiler for Xbase type names and function names in the XSharp Runtime
  • Preprocessor - +
  • Fixed a crash in the preprocessor
  • The preprocessor was generating an error "Optional block does not contain a match marker" for blocks without match marker. This is now allowed.
    (for example for the ALL clause in some of the Database UDCs )
  • When the same include files was used by multiple source files, and different sections of this file were included because of different #ifdef conditions, then the preprocessor would get "confused". This has been fixed.
  • Debugger file/line number information from source code imported from #include files is not processed correctly.
  • Visual Studio Integration - +
  • Fixed several issues with the Windows Form Editor
  • The class declaration generated by the VO compatible editors now included the PARTIAL modifier.
  • @@ -3413,7 +3420,7 @@ Changes in 1.1 Compiler - +
  • Fixed a problem with Codeblocks used in late bound code after the release of X# 1.0.3
  • Fixed a problem with overriding properties in a subclass that inherit from a class where only the Assign (Set) or Access (Get) are defined.
  • The compiler option /vo16: automatically generate VO Clipper constructors has been implemented.
  • @@ -3434,7 +3441,7 @@
    Visual Studio Source code editor - +
  • Added Goto Definition for Functions and Procedures
  • Improved Info tips for Functions and Procedures
  • Improved case synchronization
  • @@ -3446,7 +3453,7 @@
  • Performance improvements for the background file scanner. This scanner is also paused during the build process to improve the compilation speed.
  • Project System and MsBuild - +
  • Fixed a problem in the project files with conditioned property groups. Existing projects will be updated automatically
  • Added support for the /vo16 compiler option in MsBuild and the VS Project Property pages.
  • Fixed a problem with the /nostddef compiler option which was not working as expected.
  • @@ -3458,19 +3465,19 @@
  • The MSBuild support DLL was unable to find the location of the compiler and native resource compiler when running inside a 64 bit process
  • Form Editor - +
  • Improved Windows Form Editor support for types defined in project references. We will now detect the location of the output files for these projects, like the C# and VB project systems.
  • The Code parser for the Form Editor was having problems with untyped methods. This has been fixed.
  • VO Window and Menu Editor - +
  • The code generator for the Window and Menu editor will delete old unused defines.
  • Changed the item template for VO windows to fix a problem when adding an event handler to a window that has not been saved yet
  • The code generator for the Window editor was not outputting a style for WS_VISIBLE. This has been fixed.
  • Debugger This build introduces a first version of the XSharp debugger support - +
  • The Visual Studio debugger now shows the language X# in the callstack window and other places
  • Functions, Methods and procedures are now displayed in the X# language style in the callstack window
  • Compiler generated variables are no longer shown in the locals list
  • @@ -3478,12 +3485,12 @@
  • X# predefined types such as WORD, LOGIC etc are shown with their X# type names in the locals window
  • Testing - +
  • Added support for the Test Explorer window
  • Added templates for unit testing with XUnit, NUnit and Microsoft Test
  • Other - +
  • Added warning when Vulcan was (re)installed after XSharp, which could cause a problem in the Visual Studio integration
  • The VS Parser was marking Interfaces as structure in stead of interface. This has been fixed.
  • The tool XPorter tools have better names in the VS Tools Menu
  • @@ -3491,11 +3498,11 @@
  • Several changes were made to the templates that come with X#
  • XPorter - +
  • Fix problem in propertygroup conditions.
  • VOXPorter - +
  • Generate clipper constructors is now disabled by default
  • Fixed a problem in the VS Template files.
  • @@ -3503,7 +3510,7 @@ Changes in 1.0.3 Compiler - +
  • Fixed a problem with the index calculation for Vulcan Arrays indexed with a usual argument
  • Fixed a problem with the generation of automatic return values for code that ends with a begin sequence statement or a try statement
  • Optimized the runtime performance for literal symbols.
    The compiler now generates a symbol table for the literal symbols and each literal symbol used in your app is only created once.
    You may experience a little delay at startup if your app uses a LOT (thousands) of literal symbols. But the runtime performance should be better.
  • @@ -3513,7 +3520,7 @@ Changes in 1.0.2 Compiler - +
  • Added support for XML doc generation. We support the same tags that the C# compiler and other .Net compiler support.
  • Improved some parser errors.
  • Created separate projects for portable and non portable (.Net framework 4.6) for the compiler and scripting
  • @@ -3527,11 +3534,11 @@
  • Some compiler warnings for unused variables were being suppressed in the VO/Vulcan dialect. They are activated again.
  • Scripting - +
  • The scripting was not working in release 1.01
  • Visual Studio Integration - +
  • QuickInfo could generate a 'hang' in the VS editor. This has been fixed
  • Added quickinfo for globals and defines
  • Added completionlists for globals and defines
  • @@ -3545,7 +3552,7 @@
  • Fixed a 'hang' that could occur with Visual Studio 2017 version 15.3 and later
  • VO Xporter - +
  • Fixed a problem when importing certain VO 2.7 AEF files
  • Fixed a problem with acceptable characters in the solution folder name
  • VO Form and menu entities are also included in the xsproj file
  • @@ -3555,27 +3562,27 @@ Changes in General Release (1.0.1.1) Compiler - +
  • Fixed a problem with VERY old versions of the Vulcan Runtime
  • Variables declared as DIM Byte[] and similar are now Pinned by the compiler
  • [Return] attribute was not properly handled by the compiler. This has been fixed
  • Compound Assignment (u+= f or -=) from USUAL and FLOAT were causing a stackoverflow at runtime caused by a problem in the Vulcan Runtime. These expressions now generate a compiler error with the suggestion to change to a simple assignment ( u := u + f)
  • Visual Studio Integration - +
  • Project References between XSharp Projects were also loaded as assemblyreference when resolving types. This could lead to speed problems and unnecessary memory usage
  • Improved the speed of the construction of Completion Lists (such as methods and fields for a type).
  • We have also added Completion List Tabs, where you can see fields, properties, methods etc. on separate tabs. You can enable/disable this in the Tools/Options/Text Editor/XSharp/Intellisense options page.
  • VO XPorter - +
  • We have added a check to make sure that the default namespace for a X# project cannot contain a whitespace character
  • Changes in General Release (1.0.1) New Features - +
  • We have added support for ENUM Basetypes (ENUM Foo AS WORD)
  • We have added a separate syntax for Lambda Expressions
  • We have added support for Anonymous Method Expressions
  • @@ -3583,7 +3590,7 @@
  • Methods with the ExtensionAttribute and Parameters with the ParamArrayAttribute attributes now compile correctly, but with a warning
  • Compiler - +
  • Fixed a problem with a late bound assign of a literal codeblock
  • Resolved several name conflicts
  • Improved several of the error messages
  • @@ -3597,7 +3604,7 @@
  • When an ambiguity is detected between a function and a static method then a warning is displayed
  • Visual Studio - +
  • Added parameter tips for Functions and methods from "Using Static" classes
  • Added parameter tips for Clipper Calling Convention functions and methods
  • Added support for generics in Intellisense
  • @@ -3616,14 +3623,14 @@
  • Added a menu option to start the VO Xporter tool
  • Added background scanning for dependent items, to make sure that newly generated code is scanned and available for intellisense.
  • Several changes to the Windows Forms editor and project system:
  • - +
  • Added support for adding ActiveX controls
  • Added support for Form Inheritance. Our forms are also visible in the C# Inherited form wizard
  • Added support to add our Windows Forms Custom Controls to the ToolBox in Visual Studio
  • Some performance enhancements in the Codedom Parser that is used by the Windows Form Editor. You should notice this for larger forms.
  • - +
  • Fixed several crashes reported by users
  • Native Resource files (.rc) now open in the Source code editor
  • Improved background parsing speed
  • @@ -3631,24 +3638,24 @@
  • Improved handling of Type and Member dropdowns in the editor
  • Tools - +
  • Added a first version of the VO Xporter tool
  • The installer now registers .xsproj files, .prg, .ppo. .vh, .xh and .xs files so they will be opened with Visual Studio
  • Documentation - +
  • We have added some chapters on how to convert your VO AEF and/or PRG files to a XIDE project and/or a Visual Studio solution.
  • Changes in 0.2.12 Scripting - +
  • We have added the ability to use X# scripts. Some documentation about how this works can be found here. You can also find scripting examples in the
    c:\Users\Public\Documents\XSharp\Scripting folder
  • Compiler All dialects - +
  • The compiler is now based on the Roslyn source code for C# 7.
  • Accesses and Assigns with the same name for the same (partial) class in separate source files are now merged into one property. This will slow down the compiler somewhat. We recommend that you define the ACCESS and ASSIGN in the same source file.
  • Added support for repeated result markers in the preprocessor
  • @@ -3659,12 +3666,12 @@
  • We made some changes to the character literal rules. For the VO and Harbour dialect there are now other rules then for Core and Vulcan. See the help topic for more information
  • VO and Vulcan Dialect - +
  • Several VO compatibility issues have been fixed
  • The QUIT, ACCEPT, WAIT, DEFAULT TO and STORE command are now removed from the compiler and defined in our standard header file "XSharpDefs.xh" which is located in the \Program Files(x86)\XSharp\Include folder. These commands are not compiled in the core dialect
  • Added support for CONSTRUCTOR() CLASS MyClass and DESTRUCTOR CLASS MyClass (in other words, outside the CLASS .. ENDCLASS construct
  • - +
  • The # (not equal) operator is now recognized when used without space before the keywords NIL, NULL_STRING, NULL_OBJECT etc. so #NIL is not seen as the symbol NIL but as Not Equal To NIL
  • SizeOf and _TypeOf were special tokens in VO and could not be abbreviated. We have changed the X# behavior to match this. This prevents name conflicts with variables such as _type.
  • We have added support for DLL entrypoints with embedded @ signs, such as "CAVOADAM.AdamCleanupProtoType@12"
  • @@ -3673,11 +3680,11 @@
  • Fixed several cases of "incorrect" code that would be compiled by VO, such as a codeblock that looks like:
    cb := { |x|, x[1] == 1 }
    Note the extra comma.
    This now compiled into the same codeblock as:
  • cb := { |x| x[1] == 1 } - +
  • The /vo16 compiler option has been disabled for now (does not do anything) because it had too many side effects.
  • Visual Studio Integration - +
  • Deleted files and folders are moved them to the Trash can.
  • Fixed an intellisense problem in the XAML editor
  • Added support for Code Completion between different X# projects
  • @@ -3685,7 +3692,7 @@
  • Added support for parameter info
  • Documentation - +
  • We have added (generated) topics for all undocumented compiler errors. Some topics only contain the text that is shown by the compiler. More documentation will follow. Also some documentation for the X# Scripting has been added.
  • @@ -3693,40 +3700,40 @@ Changes in 0.2.11 Compiler All dialects - +
  • Improved some error messages, such as for unterminated strings
  • Added support for the /s (Syntax Check only) command line option
  • Added support for the /parseonly command line option which is used by the intellisense parser
  • - +
  • Added some compiler errors and warnings for invalid code
  • The preprocessor did not properly handle 4 letter abbreviations for #command and #translate. This has been fixed
  • Fixed some problems found with the preprocessor
  • We switched to a new Antlr parser runtime. This should result in slightly better performance.
  • Changed the way literal characters and strings are defined:
  • - +
  • In the Vulcan dialect a literal string that is enclosed with single quotes is a char literal. Double quotes are string literals
  • In the Core and VO dialect a literal string that is enclosed with single quotes is a string literal. Double quotes are also string literals.
    To specify a char literal in Core and VO you need to prefix the literal with a 'c':
  •      LOCAL cChar as CHAR
         cChar := c'A'
    - +
  • Changed the way literal characters and strings are defined:
  • sizeof() and _sizeof() no longer generate a warning that they require 'unsafe' code, when compiling for x86 or x64. When compiling for AnyCpu the warning is still produced.
  • When the includedir environment variable was not set then the XSharp\Include folder would also not be found automatically.
  • VO/Vulcan Compatibility - +
  • Added /vo16 compiler option to automatically generate constructors with Clipper calling convention for classes without constructor
  • Harbour Compatibilty - +
  • Started work on the Harbour dialect. This is identical with the VO/Vulcan dialect. The only difference so far is that the IIF() expressions are optional
  • Visual Studio New features / changed behavior: - +
  • Added Brace Matching
  • Added Peek definition (Alt-F12)
  • All keywords are not automatically part of the Completionlist
  • @@ -3738,12 +3745,12 @@
  • Prevent crashes when the X# language buffer is fed with "garbage" such as C# code
  • Installer - +
  • The local template cache and components cache for VS2017 was not cleared properly this has been fixed.
  • Added code to properly unregister an existing CodeDomProvider when installing
  • Documentation - +
  • Several empty chapters are now hidden.
  • Added description of the templates
  • @@ -3753,7 +3760,7 @@ This build focuses on the last remaining issues in the VO and Vulcan compatibility and adds a lot of new features to the Visual Studio integration. Compiler VO/Vulcan Compatibility - +
  • We have completed support for the DEFINE keyword. The type clause is now optional. The compiler will figure out the type of the define when no type is specified.
    The DEFINEs will be compiled to a Constant field of the Functions class, or a Readonly Static field, when the expression cannot be determined at compile time (such as for Literal dates or symbols).
  • We have extended the preprocessor . It now has support for #command, #translate, #xcommand and #xtranslate. Also "Pseudo function" defines are supported, such as :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    This works just like a #xtranslate, with the exception that the define is case sensitive (unless you have enabled the "VO compatible preprocessor" option (/vo8).
    The only thing that is not working in the preprocessor is the repeated result marker.
  • In VO/Vulcan mode the compiler now accepts "garbage" between keywords such as ENDIF and NEXT and the end of the statement, just like the VO compiler.
    So you no longer have to remove "comment" tokens after a NEXT or ENDIF. This will compile without changes in the VO and Vulcan dialect:

      IF X == Y
          DoSomething()
      ENDIF X == Y
    or
      FOR I := 1 to 10
         DoSomething()
      NEXT I
    We do not recommend this coding style, but this kind of code is very common...
  • @@ -3761,12 +3768,12 @@
  • In VO and Vulcan dialect when the compiler option /vo1 is used then RETURN statements without value or with a return value of SELF are allowed for the Init() and Axit() methods. Other return values will trigger a compiler warning and will be ignored.
  • New features / changed behavior: - +
  • The compiler now produces an error when a source file ends with an unterminated multi line comment
  • Added ASTYPE expression, similar to the AS construct in other languages. This will assign a value of the correct type or NULL when the expression is not of the correct type:
  • VAR someVariable := <AnExpression> ASTYPE <SomeType>
    - +
  • The Chr() and _Chr() functions are now converted to a string or character literal when the parameter is a compile time constant
  • Compilation speed for assemblies with larger numbers of functions, procedures, defines, globals or _dll functions has been improved.
  • _DLL FUNCTIONS now automatically are marked with CharSet.Auto
  • @@ -3775,10 +3782,10 @@
    Visual Studio New features / changed behavior: - +
  • Tested and works with the release version of Visual Studio 2017
  • - +
  • We have added support for regions inside the VS editor. At this moment most "entities" are collapsible as well as statement blocks, regions and lists of usings, #includes and comments.
  • We have added support for member and type drop downs in the VS Editor
  • We have added support for Code completion in the VS editor
  • @@ -3787,7 +3794,7 @@
  • We have added help links to the errors in the VS error list. The help links will bring you to the appropriate page on the X# website. Not all the help pages are complete yet, but at least the infrastructure is working.
  • We have added support for snippets and included several code snippets in the installer
  • We have made several changes to the project properties dialogs
  • - +
  • The pre and post build events are now on a separate page for the Project Properties. These are now also not defined per configuration but are shared between the various configurations.
    If you want to copy output results to different folders for  different configurations you should use the $(Configuration) and $(Platform) variables
  • We have  moved the Platform and Prefer32Bits properties to the Build page to make them configuration dependent
  • Fixed a problem with casing of the AnyCPU platform which would result in duplicate items in the VS Platform combobox
  • @@ -3796,24 +3803,24 @@
  • We have added a project property to control how Managed file resources are included:  Use Vulcan Compatible Managed Resources
    When 'True' then resources files are included in the assembly without namespace prefix. When 'False' then the resource files are prefixed with the namespace of the app, just like in other .Net languages, such as C#
  • - +
  • We have fixed some code generation problems
  • The parser that is used in the Windows Forms editor now also properly handles background images. Both images in the resx for the form and also background images in the shared project resources
  • We have added Nuget support for our project system.
  • We have made several changes to fix problems in project files
  • - +
  • The project system now silently fixes problems with duplicate items
  • Fixed a problem with dependencies between xaml files and their dependent designer.prg files and other dependent files
  • Fixed a problem with dependent items in sub folders or in a folder tree that includes a dot in a folder name.
  • Fixed a problem in the WPF template
  • - +
  • Fixed a refresh problem when deleting a references node
  • Added implementation of the OAProject.Imports property, which is used by JetBrains
  • XPorter - +
  • Fixed a problem converting WPF style projects
  • @@ -3823,10 +3830,10 @@ With this build you can compile the Vulcan SDK without changes, except for some obvious errors in the Vulcan SDK that Vulcan did not find!
    We consider the Vulcan Compatibility of the compiler finished with the current state of the compiler. All Vulcan code should compile without proble now.
    VO/Vulcan Compatibility New features / changed behavior: - +
  • All Init procedures are now properly called at startup. So not only the init procedures in the VOSDK libraries but also init procedures in other libraries and the main exe
  • Changed the method and type resolution code:
  • - +
  • A method with a single object parameter is now preferred over a method with an Object[] parameter
  • When both a function (static method) exists and an instance method we will now call the static method in code inside methods that does not have a SELF: or SUPER: prefix.
  • In situations where the @ operator is used to pass variables by reference.
  • @@ -3837,12 +3844,12 @@
  • When 2 identical functions or types are detected in referenced assemblies we now choose the one in the first referenced assembly like Vulcan does, and generate warning 9043
  • - +
  • The sizeof operator now returns a DWORD to be compatible with VO and Vulcan.
  • Added support for EXIT PROCEDURES (PROCEDURE MyProcedure EXIT). These procedures will automatically be called during program shutdown, just before all the global variables are cleared.
    The compiler now generates an $Exit function for each assembly in which the exit procedures will be called and the reference globals in an assembly will be cleared. In the main app a $AppExit() function is created that will call the $Exit functions in all references X# assemblies. When a Vulcan compiled assembly is referenced, then all the public reference globals will be cleared from the $AppExit() function.
  • Added support for PCALL and PCALLNATIVE
  • Added support for several Vulcan compatible compiler options:
  • - +
  • /vo1 Allow Init() and Axit() for constructor and destruction
  • /vo6 Allow (global) function pointers. DotNet does not "know" these. They are compiled to IntPtr. The function information is preserved so you can use these pointer in a PCALL()
  • /ppo. Save the preprocessed compiler output to a file
  • @@ -3854,15 +3861,15 @@
  • WAIT command
  • - +
  • Several code generation changes:
  • - +
  • Changed the code generation for DIM elements inside VOStruct arrays because the Vulcan compiler depends on a specific naming scheme and did not recognize our names.
  • Improved the code generation inside methods with CLIPPER calling convention.
  • Bug fixes - +
  • Implicit namespaces are now only used when the /ins compiler option is enabled. In Vulcan dialect the namespace Vulcan is always included.
  • Fixed several problems with the @ operator and VOSTRUCT types
  • Fixed a problem with DIM arrays of VOSTRUCT types
  • @@ -3882,15 +3889,15 @@
    All dialects New features / changed behavior: - +
  • Several code generation changes:
  • - +
  • The code generation for ACCESS and ASSIGN has changed. There are no longer separate methods in the class, but the content of these methods is now inlined in the generated Get and Set methods for the generated property.
  • Optimized the code generation for IIF statements.
  • The debugger/step information has been improved. The debugger should now also stop on IF statements, FOR statements, CASE statements etc.
  • - +
  • Indexed access to properties defined with the SELF keyword can now also use the "Index" property name
  • Functions and Procedures inside classes are not allowed (for now)
  • RETURN <LiteralValue> inside an ASSIGN method will no longer allocate a variable and produce an warning
  • @@ -3898,7 +3905,7 @@
    You can see that the Visual Studio language support also recognizes that INTERFACE and OPERATOR are not used as keywords in this context Bug fixes - +
  • Fixed a problem with the REPEAT UNTIL statement
  • Fixed a crash for code with a DO CASE without a matching END CASE
  • Fixed several issues for the code generation for _DLL FUNCTIONs and _DLL PROCEDUREs
  • @@ -3919,7 +3926,7 @@
  • And many more changes.
  • Visual Studio Integration - +
  • Added support for all compiler options in the UI and the build system
  • Fixed problems with dependent file items in subfolders
  • The Optimize compiler option was not working
  • @@ -3931,7 +3938,7 @@
    Documentation - +
  • We have added many descriptions to the commandline options
  • We have added a list of the most common compiler errors and warnings.
  • @@ -3940,7 +3947,7 @@ Changes in 0.2.8 Compiler VO/Vulcan Compatibility - +
  • Default Parameters are now handled like VO and Vulcan do. This means that you can also have date constants, symbolic constants etc as default parameter
  • String Single Equals rules are now 100% identical with Visual Objects. We found one case where Vulcan does not return the same result as Visual Objects. We have chosen to be compatible with VO.
  • When compiling in VO/Vulcan mode then the init procedures in the VO SDK libraries are automatically called. You do not have to call these in your code anymore
    Also Init procedures in the main assembly are called at startup.
  • @@ -3955,7 +3962,7 @@
  • Fixed several numeric conversion problems
  • New features - +
  • We have added support for Collection Initializers and Object Initializers
  • Anonymous type members no longer have to be named. If you select a property as an anonymous type member then the same property name will be used for the anonymous type as well.
  • Missing closing keywords (such as NEXT, ENDIF, ENDCASE and ENDDO) now produce better error messages
  • @@ -3963,7 +3970,7 @@
    FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    We really do not encourage to hide assignments like this, but in case you have used this coding style,it works now <g>. - +
  • AS VOID is now allowed as (the only) type specification for PROCEDUREs
  • We have added a .config file to the exe for the shared compiler that should make it faster
  • The XSharpStdDefs.xh file in the XSharp is now automatically included when compiling. This file declares the CRLF constant for now.
  • @@ -3973,7 +3980,7 @@
  • Compiler error messages for unexpected tokens have been improved
  • Bug fixes - +
  • Several command-line options with a minus sign were not properly handled by the compiler
  • Fixed several crashes related to assigning NULL_OBJECT or NULL to late bound properties have been fixed
  • Partial class no longer are required to specify the parent type on every source code location. When specified, the parent type must be the same of course. Parent interfaces implemented by a class can also be spread over multiple locations
  • @@ -3986,22 +3993,22 @@
    Visual Studio Integration We have changed the way the error list and output window are updated. In previous version some lines could be missing on the output window, and the error code column was empty. This should work as expected now. - +
  • We have merged some code from some other MPF based project systems, such as WIX (called Votive), NodeJS and Python (PTVS) to help extend our project system. As a result:
  • - +
  • Our project system now has support for Linked files
  • Our project system now has support for 'Show All Files' and you can now Include and Exclude files. This setting is persisted in a .user file, so you can exclude this from SCC if you want.
  • We have made some changes to support better 'Drag and Drop'
  • - +
  • We have fixed several issues with regard to dependent items
  • When you include a file that contains a form or user control, this is now recognized and the appropriate subtype is set in the project file, so you can open the windows forms editor
  • We are now supporting source code generation for code behind files for .Settings and .Resx files
  • The combobox in the Managed Resource editor and Managed Settings tool to choose between internal code and public code is now enabled. Selecting a different value in the combobox will change the tool in the files properties.
  • The last response file for the compiler and native resource compiler are now saved in the users Temp folder to aid in debugging problems.
  • - +
  • The response file now has each compiler option to a new line to make it easier to read and debug when this is necessary.
  • The code generation now preserves comments between entities (methods)
  • We fixed several minor issues in the templates
  • @@ -4014,13 +4021,13 @@ Changes in 0.2.7.1 Compiler - +
  • The compiler was not accepting wildcard strings for the AssemblyFileVersion Attribute and the AssemblyInformationVersion attribute. This has been fixed
  • The #Pragma commands #Pragma Warnings(Push) and #Pragma Warnings(Pop) were not recognized. This has been fixed.
  • The compiler was not recognizing expressions like global::System.String.Compare(..). This has been fixed
  • Visual Studio Integration - +
  • Dependent items in subfolders of a project were not recognized properly and could produce an error when opening a project
  • Fixed a problem in the VulcanApp Template
  • The Windows Forms Editor would not open forms in a file without begin namespace .. end namespace. This has been fixed
  • @@ -4033,7 +4040,7 @@
  • Added 'Copy to Output Directory' property to the properties window
  • Setup - +
  • The installer, exe files and documentation are now signed with a certificate
  • @@ -4041,7 +4048,7 @@ Changes in 0.2.7 Compiler New features: - +
  • Added support for the VOSTRUCT and UNION types
  • Added support for Types as Numeric values, such as in the construct
    IF UsualType(uValue) == LONG
  • Added a FIXED statement and FIXED modifier for variables
  • @@ -4052,14 +4059,14 @@
  • The FOX version of the compiler is now distributed in Release mode and much faster. A debug version of the compiler is also installed in case it is needed to aid in finding compiler problems.
  • Changed behavior - +
  • The compiler generated Globals class for the Core dialect is now called Functions and no longer Xs$Globals.
  • Overriding functions in VulcanRTFuncs can now be done without specifying the namespace:
    When the compiler finds two candidate functions and one of them is inside VulcanRTFuncs then the function that is not in VulcanRTFuncs is chosen.
  • Warning 9001 (unsafe modifier implied) is now suppressed for the VO/Vulcan dialect. You MUST pass the /unsafe compiler option if you are compiling unsafe code though!
  • Improved the error messages for the Release mode of the compiler
  • Bug fixes - +
  • RETURN and THROW statements inside a Switch statement would generate an 'unreachable code' warning. This has been fixed
  • Fixed several problems with mixing signed and unsigned Array Indexes
  • Fixed several problems with the FOR .. NEXT statement. The "To" expression will now be evaluated for every iteration of the loop, just like in VO and Vulcan.
  • @@ -4068,7 +4075,7 @@
  • Fixed a visibility problem with static variables inside static functions
  • Visual Studio Integration - +
  • Fixed a problem that the wrong Language Service was selected when XSharp and Vulcan.NET were used in the same Visual Studio and when files were opened from the output window or the Find Results window
  • Fixed some problems with 'abnormal' line endings in generated code
  • Fixed a problem in the Class Library template
  • @@ -4077,7 +4084,7 @@ Changes in 0.2.6 Compiler - +
  • Added alternative syntax for event definition. See EVENT keyword in the documentation
  • Added Code Block Support
  • Implemented /vo13 (VO compatible string comparisons)
  • @@ -4095,7 +4102,7 @@
  • Fixed a crash for properties defined with parentheses or square brackets, but without actual parameters
  • Visual Studio Integration - +
  • Completed support for .designer.prg for Windows.Forms
  • Fixed an issue in the CodeDom generator for generating wrappers for Services
  • The XSharp Language service will no longer be used for Vulcan PRG files in a Side by Side installation
  • @@ -4105,11 +4112,11 @@ Changes in 0.2.51 Visual Studio Integration & Build System - +
  • The Native Resource compiler now "finds" header files, such as "VOWin32APILibrary.vh" in the Vulcan.NET include folder. Also the output of the resource compiler is now less verbose when running in "normal" message mode. When running in "detailed" or "diagnostics" mode the output now also includes the verbose output of the resource compiler.
  • Compiler - +
  • Fixed a problem that would make PDB files unusable
  • The error "Duplicate define with different value" (9012) has been changed to warning, because our preprocessor does a textual comparison and does not "see" that "10" and "(10)" are equal as well as "0xA" and "0xa". It is your responsibility of course to make sure that the values are indeed the same.
  • Exponential REAL constants were only working with a lower case 'e'. This is now case insensitive
  • @@ -4119,7 +4126,7 @@ Changes in 0.2.5 Visual Studio Integration - +
  • Fixed a problem where the output file name would contain a pipe symbol when building for WPF
  • Fixed a problem with the Item type for WPF forms, pages and user controls
  • The installer now has an option to not take away the association for PRG, VH and PPO items from an installed Vulcan project system.
  • @@ -4128,40 +4135,40 @@
  • Added several item templates for WPF, RC, ResX, Settings, Bitmap, Cursor etc.
  • Build System - +
  • Added support for the new /vo15 command line switch.
  • Added support for compiling native resources.
  • Compiler - +
  • A reference to VulcanRT and VulcanRTFuncs is now mandatory when compiling in VO/Vulcan dialect
  • Added support for indexed access for VO/Vulcan Arrays
  • Added support for VO/Vulcan style Constructor chaining (where SUPER() or SELF() call is not the first call inside the constructor body)
  • Added support for the &() macro operator in the VO/Vulcan dialect
  • Added support for the FIELD statement in the VO/Vulcan dialect
  • - - + +
  • The statement is recognized by the compiler
  • Fields listed in the FIELD statement now take precedence over local variables or instance variables with the same name
  • - +
  • Added support for the ALIAS operator (->) in the VO/Vulcan dialect, with the exception of the aliased expressions (AREA->(<Expression>))
  • Added support for Late bound code (in the VO/Vulcan dialect)
  • - - + +
  • Late bound method calls
  • Late bound property get
  • Late bound property set
  • Late bound delegate invocation
  • - +
  • Added a new /vo15 command line option (Allow untyped Locals and return types):
    By default in the VO/Vulcan dialect missing types are allowed and replaced with the USUAL type.
    When you specify /vo15- then untyped locals and return types are not allowed and you must specify them.
    Of course you can also specify them as USUAL
  • - +
  • The ? and ?? statement are now directly mapped to the appropriate VO/Vulcan runtime function when compiling for the VO/Vulcan dialect
  • We now also support the VulcanClassLibrary attribute and VulcanCompilerVersion attribute for the VO & Vulcan dialect.
    With this support the Vulcan macro compiler and Vulcan Runtime should be able to find our functions and classes
  • The generated static class name is now more in par with the class name that Vulcan generates in the VO & Vulcan dialect.
  • @@ -4171,43 +4178,43 @@
  • Fixed a problem with case sensitive namespace comparisons
  • Fixed a problem with operator methods
  • - +
  • Added preprocessor macros __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ and __DIALECT_VULCAN__
  • The _Chr() pseudo function will now be mapped to the Chr() function
  • - +
  • Added support for missing arguments in arguments lists (VO & Vulcan dialect only)
  • Fixed a crash when calculating the position of tokens in header files
  • The installer now offers to copy the Vulcan Header files to the XSharp Include folder
  • Added support for skipping arguments in (VO) literal array constructors
  • Documentation - +
  • Added the XSharp documentation to the Visual Studio Help collection
  • Added reference documentation for the Vulcan Runtime
  • Changes in 0.2.4 Visual Studio Integration - +
  • Double clicking errors in the error browser now correctly opens the source file and positions the cursor
  • Fixed several problems in the project and item templates
  • The installer now also detects Visual Studio 15 Preview and installs our project system in this environment.
  • Build System - +
  • Fixed a problem with the /unsafe compiler option
  • Fixed a problem with the /doc compiler option
  • Treat warnings as error was always enabled. This has been fixed.
  • Compiler - +
  • Added support for Lambda expressions with an expression list
  • LOCAL dfunc AS System.Func<Double,Double> dfunc := {|x| x := x + 10, x^2} ? dfunc(2) - +
  • Added support for Lambda expressions with a statement list
  • LOCAL dfunc AS System.Func<Double,Double> @@ -4215,7 +4222,7 @@ ? 'square of', x RETURN x^2 } - +
  • Added support for the NAMEOF intrinsic function
  • FUNCTION Test(cFirstName AS STRING) AS VOID @@ -4223,7 +4230,7 @@ IF String.IsNullOrEmpty(cFirstName) THROW ArgumentException{"Empty argument", nameof(cFirstName)} ENDIF - +
  • Added support for creating methods and functions with Clipper calling convention (VO and Vulcan dialect only)
  • Using Statement now can contain a Variable declaration:
  • @@ -4237,11 +4244,11 @@ BEGIN USING VAR ms := System.IO.MemoryStream{} // do the work END USING - +
  • Added support for /vo10 (Compatible IIF behavior). In the VO and Vulcan dialect the expressions are cast to USUAL. In the core dialect the expressions are cast to OBJECT.
  • New language features for the VO and Vulcan dialect - +
  • Calling the SELF() or SUPER() constructor is now allowed anywhere inside a constructor (VO and Vulcan dialect only). The Core dialect still requires constructor chaining as the first expression inside the constructor body
  • Added support for the PCOUNT, _GETFPARAM and _GETMPARAM intrinsic functions
  • Added support for String2Psz() and Cast2Psz()
  • @@ -4249,7 +4256,7 @@
  • Added support for BREAK
  • Fixed several problems: - +
  • Nested array initializers
  • Crash for BREAK statements
  • Assertion error for generic arguments
  • @@ -4261,7 +4268,7 @@ Changes in 0.2.3 Visual Studio Integration - +
  • We have changed to use the MPF style of Visual Studio Integration.
  • We have added support for the Windows Forms Editor
  • We have added support for the WPF Editor
  • @@ -4270,15 +4277,15 @@
  • We have added several templates
  • Build System - +
  • Added support for several new commandline options, such as /dialect
  • The commandline options were not reset properly when running the shared compiler. This has been fixed.
  • - +
  • The build system will limit the # of errors passed to Visual Studio to max. 500 per project. The commandline compiler will still show all errors.
  • Compiler - +
  • We have started work on the Bring Your Own Runtime support for Vulcan. See separate heading below.
  • The __SIG__ and __ENTITY__ macros are now also supported, as well as the __WINDIR__, __SYSDIR__ and __WINDRIVE__ macros
  • The debugger instructions have been improved. You should have a much better debugging experience with this build
  • @@ -4291,7 +4298,7 @@
  • Fixed a problem for the DYNAMIC type.
  • BYOR - +
  • XBase type names are resolved properly (ARRAY, DATE, SYMBOL, USUAL etc)
  • Literal values are now resolved properly (ARRAY, DATE, SYMBOL)
  • NULL_ literals are resolved properly (NULL_STRING follows the /vo2 compiler option, NULL_DATE, NULL_SYMBOL)
  • @@ -4307,7 +4314,7 @@ Changes in 0.2.2 Visual Studio Integration - +
  • Added more project properties. One new property is the "Use Shared Compiler" option. This will improve compilation speed, but may have a side effect that some compiler (parser) errors are not shown in details.
    If you experience this, then please disable this option.
  • Added more properties to the Build System. All C# properties should now also be supported for X#, even though some of them are not visible in the property dialogs inside VS.
  • Added a CreateManifest task to the Build System so you will not get an error anymore for projects that contain managed resources
  • @@ -4315,7 +4322,7 @@
  • Marking and unmarking text blocks as comment would not always be reflected in the editor colors. This has been fixed.
  • Compiler - +
  • We have added a first version of the preprocessor. This preprocessor supports the #define command, #ifdef, #ifndef, #else, #endif, #include, #error and #warning. #command and #translate (to add user defined commands) are not supported yet.
  • Missing types (in parameter lists, field definitions etc) were sometimes producing unclear error messages. We have changed the compiler to produce a "Missing Type" error message.
  • We rolled the underlying Roslyn code forward to VS 2015 Update 1. Not that you see much of this from the outside <g>, but several fixes and enhancements have made their way into the compiler.
  • @@ -4333,14 +4340,14 @@ Changes in 0.2.1 Visual Studio Integration - +
  • Added and improved several project properties
  • Fix a problem with the "Additional Compiler Options"
  • Improved coloring in the editor for Keywords, Comments etc. You can set the colors from the Tools/Options dialog under General/Fonts & Colors. Look for the entries with the name "XSharp Keyword" etc.
  • Added Windows Forms Template
  • Compiler - +
  • Several errors have been demoted to warnings to be more compatible with VO/Vulcan
  • Added support for Comment lines that start with an asterisk
  • Added support for the DEFINE statement. For now the DEFINE statement MUST have a type
    DEFINE WM_USER := 0x0400 AS DWORD
  • @@ -4349,7 +4356,7 @@
    Changes in 0.1.7 - +
  • The "ns" (add default namespace to classes without namespace) has been implemented
  • The "vo3" compiler option (to make all methods virtual ) has been implemented
  • Fixed an issue where the send operator on an expression between parentheses was not compiling properly
  • @@ -4364,7 +4371,7 @@
    Changes in 0.1.6 - +
  • This version now comes with an installer
  • This version includes a first version of the Visual Studio Integration. You can edit, build, run and debug inside Visual Studio. There is no "intellisense" available.
  • The compiler now uses 1-based arrays and the “az” compiler option has been implemented to switch the compiler to use 0-based arrays.
  • @@ -4378,7 +4385,7 @@
    Changes in 0.1.5 - +
  • When an error occurs in the parsing stage, X# no longer enters the following stages of the compiler to prevent crashes. In addition to the errors from the parser also an error 9002 is displayed.
  • Parser errors now also include the source file name in the error message and have the same format as other error messages. Please note that we are not finished yet with handling these error messages. There will be improvements in the format of these error messages in the upcoming builds.
  • The compiler will display a “feature not available” (8022) error when a program uses one of the Xbase types (ARRAY, DATE, FLOAT, PSZ, SYMBOL, USUAL).
  • @@ -4387,7 +4394,7 @@
    Changes in 0.1.4 - +
  • Several changes to allow calculations with integers and enums
  • Several changes to allow VO compatible _OR, _AND, _NOT an _XOR operations
  • Fix interface/abstract VO properties
  • @@ -4410,7 +4417,7 @@
    Changes in 0.1.3 - +
  • Change inconsistent field accessibility error to warning and other similar errors
  • Added commandline support for Vulcan arguments. These arguments no longer result in an error message, but are not really implemented, unless an equivalent argument exists for the Roslyn (C#) compiler. For example: /ovf and /fovf are both mapped to /checked, /wx is mapped to /warnaserror. /w should not be used because that has a different meaning /warning level). /nowarn:nnnn should be used in stead
  • Fixed problem where the PUBLIC modifier was assigned to Interface Members or Destructors
  • @@ -4429,7 +4436,7 @@
    Changes in 0.1.2.1 - +
  • Added default expression
  • Fixed problem with events
  • Fixed some small lexer problems
  • @@ -4437,7 +4444,7 @@
    Changes in 0.1.2 - +
  • Fixed problem with handling escape sequences in extended strings
  • Fixed issue in FOR.. NEXT statements
  • Fixed a problem with SWITCH statements