Bug 150185 - Error while working with an array of structures.
Summary: Error while working with an array of structures.
Status: NEW
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: BASIC (show other bugs)
Version:
(earliest affected)
Inherited From OOo
Hardware: All All
: medium normal
Assignee: Not Assigned
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-07-28 12:18 UTC by Vladimir Sokolinskiy
Modified: 2022-07-28 18:56 UTC (History)
5 users (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Sokolinskiy 2022-07-28 12:18:34 UTC
Run macro:

Sub TestAWTPoint
  Dim p(0) As New com.sun.star.awt.Point
  Dim h As New com.sun.star.awt.Point
  h.X=1
  p(0)=h
  Msgbox "h.X=" & h.X & " p(0).X=" & p(0).X 
End Sub

Result:  h.X=1 p(0).X=0
Must be: h.X=1 p(0).X=1

Looks like an error in the interpretation of the expression p(0).X
Comment 1 Mike Kaganski 2022-07-28 13:36:45 UTC
Repro.
Comment 2 Mike Kaganski 2022-07-28 13:38:43 UTC
Note that the following works OK:

Sub TestAWTPointInVAriantArray
  Dim p(0)
  Dim h As New com.sun.star.awt.Point
  h.X=1
  p(0)=h
  Msgbox "h.X=" & h.X & " p(0).X=" & p(0).X 
End Sub
Comment 3 Rafael Lima 2022-07-28 14:08:18 UTC
As pointed out by Mike, using Object or Variant as the type of p(0) will work.

Sub Test1
  Dim p(0) As Object
  Dim h As New com.sun.star.awt.Point
  h.X=1
  p(0)=h
  Msgbox "h.X=" & h.X & " p(0).X=" & p(0).X 
End Sub

Now one thing bent my mind. Although printing p(0).X returns 0, if you inspect p(0) using XRay Tool you'll see that X = 1 inside p(0). What gives?

Sub Test2
  Dim p(0) As New com.sun.star.awt.Point
  Dim h As New com.sun.star.awt.Point
  h.x = 1
  p(0) = h
  MsgBox p(0).X ' Prints 0
  XRay p(0) ' Here p(0).X is equal to 1
End Sub
Comment 4 Vladimir Sokolinskiy 2022-07-28 14:30:06 UTC
The built-in debugger in the IDE also sees no problem with the p array from the start message.

The problem arises for arrays of structures. Same for custom types:

Type MyType 
  X As Long
End Type  

Sub TestCustomType
  Dim p(0) As MyType
  Dim h As MyType
  h.X=1
  p(0)=h
  Msgbox "h.X=" & h.X & " p(0).X=" & p(0).X 
End Sub

Result: h.X=1 p(0).X=0
Comment 5 Vladimir Sokolinskiy 2022-07-28 17:19:35 UTC
The array elements are correct in all examples. The construct p(0).X "sees" the previous version of p(0).

Sub TestAWTPoint5
  Dim p(0) As New com.sun.star.awt.Point, q
  Dim h As New com.sun.star.awt.Point
  Dim v
  p(0).X=9
  h.X=1
  p(0)=h
  Msgbox "h.X=" & h.X & " p(0).X=" & p(0).X   ' h.X=1 p(0).X=9
  v=p(0)
  Msgbox "v.X=" & v.X                         ' v.X=1  
End Sub