Skip to content

Commit

Permalink
Dev (#1689)
Browse files Browse the repository at this point in the history
* SqlRdd updates

* [Compiler] Simplified Keyword Rule (no need for separate rules for Base, Xpp, Fox). These is now a single rule for "soft" keywords.
Added ThisForm keyword for FoxPro.  The detection and translation is done in the TransformationFox. The implementation of the FindForm() call is inside the code that also handles Clipper arguments and PSZs inside TransformationRT.
See https://www.xsharp.eu/forum/topic/5213

* [Tests] Adjust tests to work with X# 3:
- Added method FindForm() for code that uses ThisForm
- Cannot use .cs extension for source file
- Disable an extra warning
-

* [Compiler tests] Added C934 for #1673

* [Compiler tests] Added C935 for #1677

* [XGui] Suppress wndproc because current code disables mouse move messages on fixed text controls

* [Compiler] Fix for C935 and #1677 . The hascode is now calculated for the full filename including the path. Previously the hashcode was for the path only.

* [Runtime] Added 2 functions (ASortFunc and ASortEx) to handle comparisons with duplicates better.

* Fix for #1685 . Allow * comment lines to continue to the next line when the last non whitespace character is a semicolon.

* [Runtime] Some changes to Asort() to handle duplicate elements, especially for multi dimensional arrays

* Fix for #1686 . Added Delegate in the RuntimeState that gets called when an error occurs in the MacroCompiler. You can return a compile time codeblock, or a runtime codeblock created with MCompile().

* [Runtime] Improve performance of the __IsFoxArray property in the Array class, by making it virtual and overriding it in XSharp.VFP.

* [Vsintegration] Do not mark region as shown in #1667

* [COdemodel] Fix error in Interpolated Strings

* [Documentation] Adjusted short description for several entity type items. Also adjusted some body information. See #1655

* [Runtime] fix for #1676, Integer() function with SetFloatDelta()

* [Vsintegration] Implement ToggleLineComment and ToggleBlockComment and also allow box selection

* [Runtime] Small optimization: suppress creation of Float when all we want is the Real8 value inside it. Optimization for #1676

* [Runtime] Fix conversion error for latebound call with default parameters (#1684)

* [Tests] Updated tests to add some Settings tests

---------

Co-authored-by: cpyrgas <[email protected]>
  • Loading branch information
RobertvanderHulst and cpyrgas authored Feb 14, 2025
1 parent 27e2691 commit bb3b819
Show file tree
Hide file tree
Showing 16 changed files with 282 additions and 149 deletions.
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_CONSTRUCTOR.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" lasteditedby="robert" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:13:09.599+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>ACCESS CONSTRUCTOR</title>
<keywords>
<keyword>Compile-time declaration</keyword>
Expand All @@ -14,7 +14,7 @@
<para styleclass="Heading1">CONSTRUCTOR Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a method to access a non-exported or virtual instance variable.</para>
<para styleclass="Normal">Declare a special method that is automatically invoked when a type is instantiated.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] <text style="font-weight:bold;">CONSTRUCTOR</text>[([&lt;<text styleclass="Italic">idParam</text>&gt; [AS | REF|OUT|IN &lt;<text styleclass="Italic">idType</text>&gt;] [, ...])] </para>
<para styleclass="Normal"><tab />[=&gt; &lt;expression&gt;]</para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_DESTRUCTOR.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" lasteditedby="robert" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:17:26.889+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>DESTRUCTOR Statement</title>
<keywords>
<keyword>Compile-time declaration</keyword>
Expand All @@ -14,7 +14,7 @@
<para styleclass="Heading1">DESTRUCTOR Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a method to access a non-exported or virtual instance variable.</para>
<para styleclass="Normal">Declare a special method that is automatically invoked when the Garbage Collector frees up the memory used by an object which is not needed anymore.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] <tab /><text style="font-weight:bold;">DESTRUCTOR [()]</text></para>
<para styleclass="Normal"><tab />[=&gt; &lt;expression&gt;] </para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_ENUM.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:30:15.476+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:19:31.142+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>ENUM Statement</title>
<keywords>
<keyword>ENUM</keyword>
Expand All @@ -12,7 +12,7 @@
<para styleclass="Heading1">ENUM Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare an enum to &#160;the compiler.</para>
<para styleclass="Normal">Declare an enumeration to the compiler.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[attributes] [Modifiers] </para>
<para styleclass="Normal"><tab />ENUM &lt;idEnumName&gt; [AS type] &#160; </para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_EVENT.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:06:51.343+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:21:51.163+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>EVENT Statement</title>
<keywords>
<keyword>Access() Methods</keyword>
Expand All @@ -15,7 +15,7 @@
<para styleclass="Heading1">EVENT Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a method to access a non-exported or virtual instance variable.</para>
<para styleclass="Normal">Declare an event to a class, which can be used to notify other classes or objects when something of interest occurs.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] &#160;<text style="font-weight:bold;">EVENT</text>&lt;<text styleclass="Italic">idName</text>&gt;</para>
<para styleclass="Normal"><tab />[AS &lt;<text styleclass="Italic">idType</text>&gt;] [&lt;<text styleclass="Italic">idConvention</text>&gt;]<text style="font-weight:bold;">CRLF</text></para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_FUNCTION.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:35:52.294+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T10:57:44.739+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>FUNCTION Statement</title>
<keywords>
<keyword>Compiledeclaration</keyword>
Expand Down Expand Up @@ -51,7 +51,7 @@
<para styleclass="Normal"></para>
<para styleclass="Normal">Simply declare all support functions using STATIC FUNCTION. Doing this gives you two immediate advantages. First, no other module in the application will inadvertently call one of your support routines. Second, since static references are resolved at compile time and public references are resolved at link time, there is no possibility of a name conflict. For example, if you have a static Service() function declared in module X and a public Service() function declared in module Y, all references to Service() in X execute the static version and all other references to Service() in the application execute the public version.</para>
<para styleclass="Heading1">Notes</para>
<para styleclass="Normal"><text styleclass="BoldItalic" style="font-family:Arial; font-size:11pt; font-weight:normal; font-style:normal; text-decoration:none; text-transform:none; vertical-align:baseline; color:#000000; background-color:transparent; letter-spacing:normal; letter-scaling:100%;">The Start() function: </text>All applications must either have one function or procedure named Start() or be linked with the GUI Classes library and have a method Start() of CLASS App. Start() serves as the start-up routine when the application is executed. Start() cannot declare any parameters and, under normal circumstances, should not return a value. If you want to use <link displaytype="text" defaultstyle="true" type="topiclink" href="Strong-Typing">strong typing</link> in the declaration statement, you must specify AS USUAL PASCAL.</para>
<para styleclass="Normal"><text styleclass="BoldItalic" style="font-family:Arial; font-size:11pt; font-weight:normal; font-style:normal; text-decoration:none; text-transform:none; vertical-align:baseline; color:#000000; background-color:transparent; letter-spacing:normal; letter-scaling:100%;">The Start() function: </text>All applications must either have one function or procedure named Start(). FUNCTION Start() serves as the start-up routine when the application is executed. Start() must be declared without parameters or with an string array parameter and must either have an Int return value or of type Void.</para>
<para styleclass="Normal"></para>
<para styleclass="Normal"><text styleclass="BoldItalic" style="font-family:Arial; font-size:11pt; font-weight:normal; font-style:normal; text-decoration:none; text-transform:none; vertical-align:baseline; color:#000000; background-color:transparent; letter-spacing:normal; letter-scaling:100%;">Exporting locals through code blocks: </text>When you create a code block, you can access local variables defined in the creating entity within the code block definition without having to pass them as parameters (i.e., local variables are visible to the code block). Using this fact along with the fact that you can pass a code block as a parameter, you can export local variables. For example:</para>
<para styleclass="Normal"></para>
Expand Down
7 changes: 4 additions & 3 deletions docs/Help/Topics/command_METHOD.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:14:12.874+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:08:47.816+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>METHOD Statement</title>
<keywords>
<keyword>Classes<keyword>declaring() Methods</keyword></keyword>
Expand Down Expand Up @@ -45,8 +45,6 @@
<para styleclass="Normal"></para>
<para styleclass="Normal">Classes, instance variables (see the CLASS statement in this guide), and methods, are the basic object-oriented programming units. You will use methods in your applications to organize computational blocks of code for a specific class of objects.</para>
<para styleclass="Heading1">Notes</para>
<para styleclass="Normal"><text styleclass="BoldItalic" style="font-family:Arial; font-size:11pt; font-weight:normal; font-style:normal; text-decoration:none; text-transform:none; vertical-align:baseline; color:#000000; background-color:transparent; letter-spacing:normal; letter-scaling:100%;">The Start() method: </text>All applications must either have one function or procedure named Start(). &#160;<br/>Start() serves as the startup routine when the application is executed. Start() must be declared without parameters or with an string array parameter and must either have an Int return value or of type Void</para>
<para styleclass="Normal"></para>
<para styleclass="Normal">VO Compatibility:</para>
<para styleclass="Normal"></para>
<para styleclass="Normal">VO has 2 special method names for constructing and destructing class objects: Init() and Axit().<br/>In X#, these methods should be named <link displaytype="text" defaultstyle="true" type="topiclink" href="command_CONSTRUCTOR">CONSTRUCTOR</link> and <link displaytype="text" defaultstyle="true" type="topiclink" href="command_DESTRUCTOR">DESTRUCTOR</link>.</para>
Expand Down Expand Up @@ -98,6 +96,9 @@
<para styleclass="Normal"></para>
<para styleclass="Normal"><text styleclass="BoldItalic" style="font-family:Arial; font-size:11pt; font-weight:normal; font-style:normal; text-decoration:none; text-transform:none; vertical-align:baseline; color:#000000; background-color:transparent; letter-spacing:normal; letter-scaling:100%;">Parameters: </text>As an alternative to specifying method parameters in the METHOD declaration statement, you can use a PARAMETERS statement to specify them. This practice, however, is not recommended, because it is less efficient and provides no compile-time integrity validation. See the PARAMETERS statement in this guide for more information.</para>
<para styleclass="" style="text-align:left; text-indent:0px; margin-top:0px; margin-right:16px; margin-bottom:0px; margin-left:0px; line-height:1.00; background-color:transparent; white-space:normal; page-break-inside:auto; page-break-after:auto; border:none; tabstops:64px left ;"><snippet src="__IncludeStrongTyping" inline="false"/></para>
<para styleclass="Heading1">Methods with single expression instead of main body</para>
<para styleclass="Normal">Methods (and every other entity type that can contain code) may include code as a single expression, using the =&gt; operator in the same line of code that defines the entity, instead of using a regular body. The single expression may or may not return a value:</para>
<para styleclass="Code Example"><text style="font-weight:bold; font-style:normal; color:#ff0000;">METHOD</text><text style="font-weight:normal; font-style:normal; color:#000000;"> SimpleMethod() </text><text style="font-weight:bold; font-style:normal; color:#ff0000;">AS VOID</text><text style="font-weight:normal; font-style:normal; color:#000000;"> =&gt; </text><text style="font-weight:bold; font-style:normal; color:#ff0000;">SELF</text><text style="font-weight:normal; font-style:normal; color:#000000;">:CallAnotherMethod()</text><br/><text style="font-weight:bold; font-style:normal; color:#ff0000;">METHOD</text><text style="font-weight:normal; font-style:normal; color:#000000;"> SimpleMethodWithReturnValue() </text><text style="font-weight:bold; font-style:normal; color:#ff0000;">AS INT</text><text style="font-weight:normal; font-style:normal; color:#000000;"> =&gt; </text><text style="font-weight:bold; font-style:normal; color:#ff0000;">SELF</text><text style="font-weight:normal; font-style:normal; color:#000000;">:nSomeIvar + 1</text></para>
<para styleclass="Heading1">Examples</para>
<para styleclass="Normal">This example creates a class of two-dimensional coordinates with methods to initialize the coordinates, draw a grid, and plot the point:</para>
<para styleclass="Normal"></para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_OPERATOR.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:14:34.311+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:25:55.202+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>OPERATOR Statement</title>
<keywords>
<keyword>Compile-time declaration</keyword>
Expand All @@ -14,7 +14,7 @@
<para styleclass="Heading1">OPERATOR Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a method to access a non-exported or virtual instance variable.</para>
<para styleclass="Normal">Declare an operator method for a class which defines how standard operators like &quot;+&quot;, &quot;-&quot;, &quot;++&quot; etc operate when used with instances of the class as arguments</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] <tab /><text style="font-weight:bold;">OPERATOR </text>&lt;<text styleclass="Italic">operatortype</text>&gt;</para>
<para styleclass="Normal"><tab />[([&lt;<text styleclass="Italic">idParam</text>&gt; [AS | REF &lt;<text styleclass="Italic">idType</text>&gt;] [, ...])] </para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_PROPERTY.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:15:42.042+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:29:10.121+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>PROPERTY Statement</title>
<keywords>
<keyword>Access() Methods</keyword>
Expand All @@ -21,7 +21,7 @@
<para styleclass="Heading1">PROPERTY Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a method to access a non-exported or virtual instance variable.</para>
<para styleclass="Normal">Declare a property to a class, which can be used for reading, writing and computing data from/to it.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] <text style="font-weight:bold;">PROPERTY</text>&lt;<text styleclass="Italic">idName</text>&gt;</para>
<para styleclass="Normal"><tab />[([&lt;<text styleclass="Italic">idParam</text>&gt; [AS | REF &lt;<text styleclass="Italic">idType</text>&gt;] [, ...])] </para>
Expand Down
4 changes: 2 additions & 2 deletions docs/Help/Topics/command_STRUCTURE.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../helpproject.xsl" ?>
<topic template="Default" modified="2024-11-14T15:51:15.639+01:00" lasteditedby="Eva" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<topic template="Default" modified="2025-02-13T11:31:08.975+02:00" lasteditedby="cpc" version="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../helpproject.xsd">
<title>STRUCTURE Statement</title>
<keywords>
<keyword>END STRUCTURE</keyword>
Expand All @@ -11,7 +11,7 @@
<para styleclass="Heading1">STRUCTURE Statement</para>
</header>
<para styleclass="Heading1">Purpose</para>
<para styleclass="Normal">Declare a class name to the compiler.</para>
<para styleclass="Normal">Declare a structure name to the compiler.</para>
<para styleclass="Heading1">Syntax</para>
<para styleclass="Normal"><tab />[Attributes] [Modifiers] <text style="font-weight:bold;">STRUCTURE </text>&lt;<text styleclass="Italic">idStructure</text>&gt; <br/><tab />[IMPLEMENTS &lt;idInterface&gt;[, &lt;IdInterface2&gt;,..]</para>
<para styleclass="Normal"><tab />[StructureMembers]</para>
Expand Down
58 changes: 58 additions & 0 deletions src/Runtime/XSharp.RT.Tests/ConversionTests.prg
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,64 @@ BEGIN NAMESPACE XSharp.RT.Tests
s := u
Assert.Equal(s, "")

[Fact, Trait("Category", "IntegerFunction")];
METHOD IntgerFunctionTests() AS VOID

Assert.True( Integer (1.9) == 1 )
Assert.True( Integer (1.1) == 1 )
Assert.True( Integer (0.1) == 0 )
Assert.True( Integer (-0.1) == 0 )
Assert.True( Integer (-1.1) == -1 )
Assert.True( Integer (-1.9) == -1 )

LOCAL fd := SetFloatDelta(0.2) AS REAL8

Assert.True( Integer (1.9) == 1 )
Assert.True( Integer (1.1) == 1 )
Assert.True( Integer (0.1) == 0 )
Assert.True( Integer (-0.1) == 0 )
Assert.True( Integer (-1.1) == -1 )
Assert.True( Integer (-1.9) == -1 )

Assert.True( Integer ($1.9) == 1 )
Assert.True( Integer ($1.1) == 1 )
Assert.True( Integer ($0.1) == 0 )
Assert.True( Integer (-$0.1) == 0 )
Assert.True( Integer (-$1.1) == -1 )
Assert.True( Integer (-$1.9) == -1 )

Assert.True( Integer (1.9m) == 1 )
Assert.True( Integer (1.1m) == 1 )
Assert.True( Integer (0.1m) == 0 )
Assert.True( Integer (-0.1m) == 0 )
Assert.True( Integer (-1.1m) == -1 )
Assert.True( Integer (-1.9m) == -1 )

SetFloatDelta(fd)

[Fact, Trait("Category", "Settings")];
METHOD SettingsTest() as VOID
var dec := Set(Set.Decimals)
Set(Set.Decimals, 1.0)
var dec1 := Set(Set.Decimals)
Assert.True( dec1 is Long)
Assert.True( dec1 == 1L)
Set(Set.Decimals, 2.0)
var dec2 := Set(Set.Decimals)
Assert.True( dec2 is Long)
Assert.True( dec2 == 2L)
Set(Set.Decimals, dec)
var ext := Set(Set.Exact)
Set(Set.Exact, "ON")
Assert.True( Set(Set.Exact) == TRUE)
Set(Set.Exact, "OFF")
Assert.True( Set(Set.Exact) == FALSE)
Set(Set.Exact,ext)

RETURN




END CLASS
END NAMESPACE // XSharp.Runtime.Tests
Loading

0 comments on commit bb3b819

Please sign in to comment.