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