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