[Gambas-user] Wrong error message

Benoît Minisini gambas at ...1...
Mon May 3 20:14:35 CEST 2010


> Benoît Minisini ha scritto:
> >> Hi!
> >> There's minor bug.
> >> Overflow with concatenate operator causes wrong error message.
> >> You can reproduce the bug with this code:
> >> 
> >> Dim ii As Integer
> >> Dim jj As Integer
> >> 
> >> For ii = 9 To 0 Step -1
> >> jj&= ii<--- Wanted Integer got String instead.
> >> Next
> >> 
> >> Gambas 3 rev 2879 @ Ubuntu 9.10 64bit
> >> 
> >> Jussi
> > 
> > I'd like to know what you expected exactly from that code, and what you
> > think the error message should be!
> > 
> > For information, the previous code is equivalent to:
> > 
> > Dim ii As Integer
> > Dim jj As Integer
> > 
> > For ii = 9 To 0 Step -1
> > 
> >    jj = CInt(CStr(jj)&  CStr(ii))
> > 
> > Next
> > 
> > The error message comes from CInt(). When its argument cannot be
> > converted to an integer, it just says that there is a type mismatch (you
> > forgot to tell that) and that its argument is not an integer.
> 
> I think that Jussi is right. Even the form you are using shows that the
> "&" operator is used with an integer to the left, and so, the "&" is
> meaningless. This is even more true with the C-style operator "&="
> which, by definition, must not cast the operand to the left.
> 
> In other words, I would say that automatic type conversion must be
> performed only when reading values, and never when writing.
> 
> Regards,
> Doriano
> 

I admit that the error message is misleading. It is a generic error message 
raised by the internal interpreter conversion that converts anything to 
anything.

I could have made more detailed error messages, but:

- They are many many possible fail cases, so many many possible error 
messages, and I'm not sure I can guess them all.

- When you convert something, you usually just want the conversion to succeed. 
In the few cases you want to know exactly why the conversion has failed, you 
can do the analyze by yourself.

And for your remark about casting: why not converting when writing? Do you 
want the interpreter to raise an error instead? As in both cases you have to 
check the datatype you are processing, and that usually what you want is 
automatic conversion (otherwise, why using a string operator like '&' with 
integer arguments?), I decided to automatically convert datatypes as much as 
possible.

Regards,

-- 
Benoît Minisini




More information about the User mailing list