fbpx
Welcome, Guest
Username: Password: Remember me
Visual Objects

Please use this forum to post questions about Visual Objects and Vulcan.NET
  • Page:
  • 1

TOPIC: Compiler switch "Initialize strings" /vo2

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #1

  • ArneOrtlinghaus
  • ArneOrtlinghaus's Avatar Topic Author
  • Offline
  • Posts: 124
  • Karma: 1
When I found an incompatibility between our VO and X# versions of programs regarding initializing strings I looked further to the switch "Initialize strings" /vo2
It is interesting how many details may have influences when moving from Win32 to Dotnet.
I want to resume what I have found out (Surely Chris will tell if I am correct)
switch has been set to on
- All strings initially are automatically filled with "": object variables within the constructor, local variables before execution of the first line
- Comparisons with null_string are changed internally to comparisons with ""
- So comparing a string with null_string or "" returns True
- Small disadvantage: object string variables initialized before calling the super constructor are emptied again by the first constructor.
switch has been set to off
- All strings not initialized explicitly are null references to the string object
- Comparing a string "" with "" returns true and comparing with null_string returns false
- Comparing a null_string with "" returns false and comparing with null_string returns true

So it seems safe to set the switch to "On" if in an existing program there are many equal comparisons mixed with null_string and ""

Arne

Please Log in or Create an account to join the conversation.

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #2

Arne,

Arne Ortlinghaus wrote: - Small disadvantage: object string variables initialized before calling the super constructor are emptied again by the first constructor.


What exactly do you mean with that.
(I want to be sure that this is not a bug in the compiler)

Robert
XSharp Development Team
The Netherlands
This email address is being protected from spambots. You need JavaScript enabled to view it.

Please Log in or Create an account to join the conversation.

Last edit: by robert.

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #3

  • ArneOrtlinghaus
  • ArneOrtlinghaus's Avatar Topic Author
  • Offline
  • Posts: 124
  • Karma: 1
Robert,

in my eyes it is a small bug regarding the compatibility to VO.
According to Chris it isn't easy to modify this behavior and I can understand this. So I looked into our code and there shouldn't be too many places to change. More important is having the int variables being set.

I have added the test example below. In case of initializing a variable before calling the super constructor leaves the int variable as it had been set by the program whereas the string variable is set to an empty string.

class Testbase
protect _nRegArt as int
protect _cReportCaption as string
protect _cts as string
access cReportCaption
return _cReportCaption

CONSTRUCTOR(oOwner, nCtrlID, oServer)
Super()
return

end class

class Testbase2 inherit Testbase


CONSTRUCTOR(oOwner, nCtrlID, oServer)
_nRegArt := 123
_cReportCaption := "Test"
Console.WriteLine("Before Super() "+asstring(typevalue2string(_cReportCaption, _nRegArt)))
Super(oOwner, nCtrlID, oServer)
Console.WriteLine("After Super() "+asstring(typevalue2string(_cReportCaption, _nRegArt)))
end class

Please Log in or Create an account to join the conversation.

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #4

Arne,

Thanks for the example. That helps a lot.
I will see if I can fix this.

Robert
XSharp Development Team
The Netherlands
This email address is being protected from spambots. You need JavaScript enabled to view it.

Please Log in or Create an account to join the conversation.

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #5

  • ArneOrtlinghaus
  • ArneOrtlinghaus's Avatar Topic Author
  • Offline
  • Posts: 124
  • Karma: 1
Robert,

many thanks. If it is possible, it will save some time.

Please Log in or Create an account to join the conversation.

Compiler switch "Initialize strings" /vo2 1 year 6 months ago #6

Hi Arne,

Just to be clear about this, only string vars/fields are affected by /vo2.
Numeric vars are _always_ initialized to zero by the CLR itself, our compiler/runtime has nothing to do with it. Well, that is at least in the windows implementation of .Net!

Chris
XSharp Development Team
chris(at)xsharp.eu

Please Log in or Create an account to join the conversation.

  • Page:
  • 1