Re: Bug report : 'Optional' keyword with 'Option Compatible'

2024-03-06 Thread Bidouille
Use isMissing to find out if the parameter is present

- Mail original -
> De: "Lucien Mathay" 
> À: qa@openoffice.apache.org
> Envoyé: Mardi 5 Mars 2024 11:29:01
> Objet: Bug report : 'Optional' keyword with 'Option Compatible'
> 
> Hello,
> 
> I would like to report the following bug : in the declaration of a
> function, when an "Optional" parameter declares its type definition,
> that type is not assigned to the parameter immediately, but only
> after
> the first use of this parameter by the function.
> 
> Example :
> 
> 1    Option Compatible:  Option VBASupport 1
> 2    Function TestCompatible(*Optional xyz As Long = 5*)
> 3      If xyz = 5 Then
> 4        xyz = 23
> 5      else
> 6        print "KO"
> 7      end if
> 8      print xyz
> 9    End Function
> 
> This function should obviously print out '23', however it prints out
> "KO" !
> 
> Here is the explanation why :
> - setting a break at line 3 shows that xyz has a value "Missing
> parameter"
> - the condition of line 3 thus evaluates to False,
> - and execution continues at line 6, printing "KO"
> - note that breaking again at line 8 shows that xyz now has a type
> 'Variant/String' with value "5"
> 
> Discussion :
>    - Andrew already reported this bug in 2016 in its 'OOME Pitonyak
>    2016
> _3_0 UserGuide.pdf', page 58.
>    - Note that without the "Option Compatible" the function could be
> written also :
> 
> 2    Function TestCompatible(Optional xyz) As Long
> 2.5    If IsMissing(xyz) then xyz = 5
> 
>      and in this case there is no bug (and it is then normal for xyz
>      to
> have that value "Missing parameter", used by IsMissing).
>    -> Thus as a preliminary conclusion, it shows that the parser
> actually processes the "As Long = 5", because the value "5" is
> displayed
> at line 8,
>      but it does not apply this type and value immediately : it sets
>      the
> value to "Missing parameter" (just as if ignoring Option Compatible
> at
> that moment)
> 
> 
> 
> To demonstrate that the type of xyz is assigned only after the first
> use
> of this parameter, look at the following example now, where a line
> 2bis
> has been inserted :
> 
> 1    Option Compatible:  Option VBASupport 1
> 2    Function TestCompatible(Optional xyz As Long = 5)
> *2bis **xray xyz*
> 3      If xyz = 5 Then
> 4        xyz = 23
> 5      else
> 6        print "KO"
> 7      end if
> 8      print xyz
> 9    End Function
> 
> This function is the same as previous one and should also obviously
> print out '23', however it now prints out '5' !!
> 
> Here is the explanation why :
> - xray of xyz tells us that xyz is of type "String" with value "5" ;
> this is confirmed by setting a break at line 3 which shows that xyz
> is
> "Variant/String"
> - the condition thus evaluates to True, as it compares xyz to
> Cstr("5")
> - line 4 is thus executed, but ... *the assignment xyz = 23 is not
> performed* !
> 
> Discussion :
>   - The same behavior will result if the line 2bis is replaced by any
> statement making use of the variable xyz, like e.g. "txt$ = xyz"
>   - We observe that upon the first use of the parameter xyz in the
> function, its value changes from "Missing parameter" to its declared
> value,
>     but without changing its type to its declared type.
> 
> 
> 
> 
> Conclusion : there are in fact potentially 3 bugs to report :
> 1. the parameter xyz has a value "Missing parameter" when it is first
> used :
>     with Option Compatible the parameter should receive the declared
> type as soon as the function begins
> 2. after the first use of this parameter in a statement, it hasthe
> right
> value but a type "Variant/String" instead of the declared type "Long"
> :
>     the declared type should be transferred over
> 3. it is not possible to assign any value to the parameter
> 
> 
> Versions tested : OO Version 4.1.6
>                    OO Version 4.1.13
> notice:        on LO Version 6.0.7.3, same behavior, except : the
> assigmnent "xyz = 23" works (the value is assigned).
> 
> 
> Thank you all !
> 
> Lucien.

-
To unsubscribe, e-mail: qa-unsubscr...@openoffice.apache.org
For additional commands, e-mail: qa-h...@openoffice.apache.org



Bug report : 'Optional' keyword with 'Option Compatible'

2024-03-05 Thread Lucien Mathay

Hello,

I would like to report the following bug : in the declaration of a 
function, when an "Optional" parameter declares its type definition, 
that type is not assigned to the parameter immediately, but only after 
the first use of this parameter by the function.


Example :

   1    Option Compatible:  Option VBASupport 1
   2    Function TestCompatible(*Optional xyz As Long = 5*)
   3      If xyz = 5 Then
   4        xyz = 23
   5      else
   6        print "KO"
   7      end if
   8      print xyz
   9    End Function

This function should obviously print out '23', however it prints out "KO" !

Here is the explanation why :
- setting a break at line 3 shows that xyz has a value "Missing parameter"
- the condition of line 3 thus evaluates to False,
- and execution continues at line 6, printing "KO"
- note that breaking again at line 8 shows that xyz now has a type 
'Variant/String' with value "5"


Discussion :
  - Andrew already reported this bug in 2016 in its 'OOME Pitonyak 2016 
_3_0 UserGuide.pdf', page 58.
  - Note that without the "Option Compatible" the function could be 
written also :


   2    Function TestCompatible(Optional xyz) As Long
   2.5    If IsMissing(xyz) then xyz = 5

    and in this case there is no bug (and it is then normal for xyz to 
have that value "Missing parameter", used by IsMissing).
  -> Thus as a preliminary conclusion, it shows that the parser 
actually processes the "As Long = 5", because the value "5" is displayed 
at line 8,
    but it does not apply this type and value immediately : it sets the 
value to "Missing parameter" (just as if ignoring Option Compatible at 
that moment)




To demonstrate that the type of xyz is assigned only after the first use 
of this parameter, look at the following example now, where a line 2bis 
has been inserted :


   1    Option Compatible:  Option VBASupport 1
   2    Function TestCompatible(Optional xyz As Long = 5)
   *2bis **xray xyz*
   3      If xyz = 5 Then
   4        xyz = 23
   5      else
   6        print "KO"
   7      end if
   8      print xyz
   9    End Function

This function is the same as previous one and should also obviously 
print out '23', however it now prints out '5' !!


Here is the explanation why :
- xray of xyz tells us that xyz is of type "String" with value "5" ; 
this is confirmed by setting a break at line 3 which shows that xyz is 
"Variant/String"

- the condition thus evaluates to True, as it compares xyz to Cstr("5")
- line 4 is thus executed, but ... *the assignment xyz = 23 is not 
performed* !


Discussion :
 - The same behavior will result if the line 2bis is replaced by any 
statement making use of the variable xyz, like e.g. "txt$ = xyz"
 - We observe that upon the first use of the parameter xyz in the 
function, its value changes from "Missing parameter" to its declared value,

   but without changing its type to its declared type.




Conclusion : there are in fact potentially 3 bugs to report :
1. the parameter xyz has a value "Missing parameter" when it is first 
used :
   with Option Compatible the parameter should receive the declared 
type as soon as the function begins
2. after the first use of this parameter in a statement, it hasthe right 
value but a type "Variant/String" instead of the declared type "Long" :

   the declared type should be transferred over
3. it is not possible to assign any value to the parameter


Versions tested : OO Version 4.1.6
                  OO Version 4.1.13
notice:        on LO Version 6.0.7.3, same behavior, except : the 
assigmnent "xyz = 23" works (the value is assigned).



Thank you all !

Lucien.