New way to modify nested uno structs in LibreOffice BASIC
Andrew Douglas Pitonyak
andrew at pitonyak.org
Thu Jul 5 08:09:31 PDT 2012
On 07/05/2012 04:22 AM, Noel Power wrote:
> On 05/07/12 02:47, Andrew Douglas Pitonyak wrote:
>> On 07/04/2012 03:23 PM, Noel Power wrote:
>>> a long standing wrinkle with modifying nested structs in basic
>>> should be eliminated
> [ blah blah blah ]
>> The behavior change scares me a bit. I seem to remember some time
>> back that there was a reason for this behavior, but I was given that
>> information many years back..... I discussed it in Berlin
> I'd be interested if you can recall
>> Do you intend to change UNO so that structures return as a reference
>> (very dangerous, don't do it), or only when used in basic as
>> object.structure.property? This may be workable / safe, but may break
>> some existing code (although I can't think of any code that it would
> there is no change to uno only how basic handles an already acquired
> uno structure ( either one defined locally or fetched from some other
> uno operation )
>> I feel silly asking this, since if you know how to change the
>> behavior, then you likely know more about this than I (I don't know
>> how to change the behavior).
> being bitten ( often ) by changing basic I understand the fear :-)
> But, I can't see that this change would be 'dangerous' it surely is
> the correct and desired behaviour ( but maybe indeed I am missing
> something and perhaps influenced by a long irritation with the way it
> worked before ). Of course the caveat is there is always a risk of
> some unexpected side-effect with any change ( especially true in basic )
The best that I can remember is that it is common to do things such as
initialize one structure from another. For example, set the value of the
top border to the value of the bottom border and then make some changes.
What if structures now copy by reference.... Consider this code:
tempBorder = table.topBorder
tempBorder.someValue = something
table.bottomBorder = tempBorder
At this point, the top and bottom border will be the same because they
reference the same object.
This is why I asked if the intention is to change the copy semantics, or
to simply change it so that in basic when you use
table.topBorder.someValue = something
THe example immediately above, is not likely to cause a problem, in
fact, it will probably eliminate bugs.
I expect that as long as copy by value semantics is retained apart from
use in a "dot" notation in basic, then something like this will still
work without introducing bugs
tempBorder = table.topBorder
If the code above causes tempBorder to reference the topBorder object in
the table, then there will likely be numerous bugs.
So, with your changes, how will it affect Case 0, Case 1, and Case 2?
I consider Case 0 and Case 2 the same. I believe that you are saying
that your change only affects Case 1, which will then work as expected
without changing case 0 / case 2.
I was probably exchanging email with Mathias Bauer, but was unable to
find the exchange. I did spend time looking for it.
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
More information about the LibreOffice