Bug 57308 - Basic IDE: watching of variable not working if variable is returning value of function
Summary: Basic IDE: watching of variable not working if variable is returning value of...
Status: VERIFIED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: BASIC (show other bugs)
Version:
(earliest affected)
3.4.2 release
Hardware: All All
: medium minor
Assignee: Andreas Heinisch
URL:
Whiteboard: target:7.3.0
Keywords:
Depends on:
Blocks: Macro-StarBasic
  Show dependency treegraph
 
Reported: 2012-11-20 08:37 UTC by sasha.libreoffice
Modified: 2021-10-28 09:11 UTC (History)
4 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 sasha.libreoffice 2012-11-20 08:37:24 UTC
Basic IDE problem: If we place variable which returns value from function to Watch window, it not working. Always tells "Out of scope"

Steps to reproduce:
0. Start any LO module, for example, Writer
1. Press Alt-F11, in dialog "LibreOffice Basic Macros" press "New" and then "Ok"
2. In Basic IDE enter something like this:

Sub Main
c=MySum(1,2)
End Sub
Function MySum (a as Integer, b as Integer)
MySum=0
MySum=a+MySum
MySum=MySum*10
MySum=b+MySum
End Function

3. Place cursor on word MySum and press F7. This variable added to Watch window
4. Place cursor on line where is MySum=0 and press F9. BreakPoint added
5. Place cursor on line where Sub Main and press F5
6. Press F8 several times and see on Watch window
Expected: value of variable MySum is shown
Actually: always "Out of scope"

reproduced in 3.4.2 on Windows XP 32 bit and in 3.6.3 on RFR 17 64 bit

Workaround: create new variable and use it for all calculations, then assign result to returning variable in last line of function
Comment 1 LeMoyne Castle 2012-12-22 05:36:28 UTC
Confirmed with 12/20 build of dev master.  Always <Out of scope>.  The lexical scope of  the function name is file/module scope.  IIRC, some time ago, Noel Power told me that some module scope objects have this issue.  Moved to NEW.

Tested global vars (working) and const items (don't work) with the following: 

global SomeTweak as integer  
const TweakToo = 2

Sub Main
    SomeTweak = 1 
    c=MySum(1,2)
    MsgBox c 
End Sub

public Function MySum (a as Integer, b as Integer)
   MySum=SomeTweak+TweakToo
   MySum=a+MySum
   MySum=MySum*10
   MySum=b+MySum
End Function

I know watching a const isn't very useful but there may be even more BASIC constructs that have this issue of falsely reporting <out of scope> in the Watch Window.
Comment 2 LeMoyne Castle 2013-01-04 17:03:50 UTC
More generally, want to be able to watch expressions that include functions, in scope vars and values from the object model.  For example the following should show true, false, <type error>?, in addition to <out of scope> where appropriate: oSheet.Cells(r,c).value = 3 . 

Will look at this while working on 57307.
Comment 3 QA Administrators 2015-01-05 17:52:32 UTC Comment hidden (obsolete)
Comment 4 Buovjaga 2015-01-29 10:18:03 UTC
Reproduced.

Win 7 Pro 64-bit Version: 4.5.0.0.alpha0+
Build ID: 784d069cc1d9f1d6e6a4e543a278376ab483d1eb
TinderBox: Win-x86@62-TDF, Branch:MASTER, Time: 2015-01-25_23:07:36
Comment 5 QA Administrators 2016-02-21 08:38:05 UTC Comment hidden (obsolete)
Comment 6 QA Administrators 2017-03-06 16:08:25 UTC Comment hidden (obsolete)
Comment 8 himajin100000 2019-08-24 16:35:42 UTC Comment hidden (obsolete)
Comment 9 himajin100000 2019-08-24 16:55:51 UTC
' As Subroutine name is added to the public variable list, the following code runs without errors.

Option Explicit

Sub Recursive() As Integer

End Sub 

Sub Main()
	Recursive = 1
End Sub
Comment 10 himajin100000 2019-08-29 21:41:22 UTC
Hmmm, if the variable with another function name is used, the function with that named seems to be called.
Comment 11 Andreas Heinisch 2021-04-07 17:25:09 UTC
The problem is that if you watch a method/variable, LO tries to retrieve the value of the that variable, which is not yet fully computed. Hence, the watch window always shows out of scope.

However, I tried to add:
else if (SbxMethod const* pMeth = dynamic_cast<SbxMethod*>(pSBX))
{
    const SbxValues& pVals = pMeth->GetValues_Impl();
    double test = pVals.nDouble;
    aTypeStr += getBasicTypeName(pMeth->GetType());
}

but the test value in this example are always empty.
Comment 12 Andreas Heinisch 2021-10-22 18:19:41 UTC
Proposed patch: https://gerrit.libreoffice.org/c/core/+/124075
Comment 13 Commit Notification 2021-10-25 11:23:11 UTC
Andreas Heinisch committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/f9ce4b2d04b58843d7986acd9382864b0b30d617

tdf#57308 - Basic IDE: Watching of a variable does not work

It will be available in 7.3.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 14 Andreas Heinisch 2021-10-25 11:31:06 UTC
I test the feature extensively on my machine, and I hope it works. However, there could be some circumstances where it could fail. Maybe there will be some regressions where it doesn't work, but it is a starting point.
Comment 15 Andreas Heinisch 2021-10-25 11:31:33 UTC
Tested ofc.
Comment 16 himajin100000 2021-10-26 05:04:42 UTC
For unknown reason, 

after "End Function"

code goes to 

MySum=SomeTweak+TweakToo
Comment 17 himajin100000 2021-10-26 05:05:01 UTC
Version: 7.3.0.0.alpha0+ (x64) / LibreOffice Community
Build ID: d80547c7f4ddf599cce52e5c52269cb07a677466
CPU threads: 4; OS: Windows 10.0 Build 19042; UI render: default; VCL: win
Locale: ja-JP (ja_JP); UI: en-US
Calc: CL
Comment 18 Andreas Heinisch 2021-10-26 05:20:32 UTC
Thx for testing! The problem lies here:

If (SbxVariable const* pVar = dynamic_cast<SbxVariable*>(pSBX

I should cast it to SbxMethod, otherwise the value will be retrieved which leads to the problem.
Comment 19 Commit Notification 2021-10-26 06:06:29 UTC
Andreas Heinisch committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/514e83a0a548e61753b1238f55ee929c3c799eed

Revert "tdf#57308 - Basic IDE: Watching of a variable does not work"

It will be available in 7.3.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 20 Commit Notification 2021-10-27 07:30:41 UTC
Andreas Heinisch committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/7d27e4b0257a8a927d3b59edcd549ff9103cbaa9

tdf#57308 - Basic IDE: Watching of a variable does not work

It will be available in 7.3.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.