Use isMissing to find out if the parameter is present

----- Mail original -----
> De: "Lucien Mathay" <mat...@live.fr>
> À: 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

Reply via email to