https://bugs.documentfoundation.org/show_bug.cgi?id=162681

--- Comment #3 from Jeremy Clark <[email protected]> ---
(In reply to Vladimir Sokolinskiy from comment #1)
> Repro.
> 
> This error occurs when calling the conversion functions to the Integral type
> CByte, CInt, CLng in the case when the argument of the String type cannot be
> converted to a number.
> 
> [1], 5.5.1.2.4 Let-coercion to and from String.
> Destination Declared Type: Any numeric type.
> "If the <regional-number-string> could not be interpreted as a number or
> currency value, runtime error 13 (Type mismatch) is raised. If the value
> could be interpreted as a number, but was out of the range of the
> destination type, runtime error 6 (Overflow) is raised"
> 
> This applies to both explicit and implicit conversions.
> 
> In my opinion, the fix should also apply to the "Option Compatible" mode.
> 
> [1]. [MS-VBAL] - v20240521. VBA Language Specification.
> Copyright © 2024 Microsoft Corporation. Release: May 21, 2024.
> https://learn.microsoft.com/en-us/openspecs/
> microsoft_general_purpose_programming_languages/ms-vbal/d5418146-0bd2-45eb-
> 9c7a-fd9502722c74 https://timecalculators.io/

The information you provided is really helpful. I have a few more comments. We
can implement a type checking function (e.g. IsNumeric) to determine if the
string can be converted to a number. If not, we will get a Type Mismatch error
like in VBA.

This can be done by extending the error handler class in
basic/source/sbx/sbxint.cxx and basic/source/sbx/sbxlng.cxx to check the value
before assigning.

When a conversion error is detected, we need to make sure that the code returns
the corresponding error code (Runtime Error 13 - Type Mismatch). This will make
it easier for programmers to identify the source of the problem in their code.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to