October 17, 2015 [Issue 15215] New: Erroneous error messages in to!IntegralType conversions | ||||
|---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=15215 Issue ID: 15215 Summary: Erroneous error messages in to!IntegralType conversions Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: enhancement Priority: P1 Component: phobos Assignee: nobody@puremagic.com Reporter: samjnaa@gmail.com Using DMD 2.068.2. Code illustrating problem: $ cat to_int_error_msg.d import std.meta, std.conv, std.stdio; void test(string num) { writeln("Testing string: ", num); foreach(Type; AliasSeq!(ubyte, ushort, uint, ulong, byte, short, int, long)) { try to!Type(num); catch (ConvException e) writefln("to!%-6s : %s", Type.stringof, e.msg); } writeln(); } void main() { foreach (num; ["2A", "-2A", "#2A"]) test(num); } Output: $ dmd -run to_int_error_msg.d Testing string: 2A to!ubyte : Unexpected 'A' when converting from type string to type ubyte to!ushort : Unexpected 'A' when converting from type string to type ushort to!uint : Unexpected 'A' when converting from type string to type uint to!ulong : Unexpected 'A' when converting from type string to type ulong to!byte : Unexpected 'A' when converting from type string to type byte to!short : Unexpected 'A' when converting from type string to type short to!int : Unexpected 'A' when converting from type string to type int to!long : Unexpected 'A' when converting from type string to type long Testing string: -2A to!ubyte : Unexpected '2' when converting from type string to type uint to!ushort : Unexpected '2' when converting from type string to type uint to!uint : Unexpected '2' when converting from type string to type uint to!ulong : Unexpected '2' when converting from type string to type ulong to!byte : Unexpected 'A' when converting from type string to type byte to!short : Unexpected 'A' when converting from type string to type short to!int : Unexpected 'A' when converting from type string to type int to!long : Unexpected 'A' when converting from type string to type long Testing string: #2A to!ubyte : Unexpected '2' when converting from type string to type uint to!ushort : Unexpected '2' when converting from type string to type uint to!uint : Unexpected '2' when converting from type string to type uint to!ulong : Unexpected '2' when converting from type string to type ulong to!byte : Unexpected '2' when converting from type string to type int to!short : Unexpected '2' when converting from type string to type int to!int : Unexpected '2' when converting from type string to type int to!long : Unexpected '2' when converting from type string to type long Observations: When input is 2A, error messages are fine. When input is -2A, error messages are fine in case of signed types. In case of unsigned types, there are two problems: 1) The message should flag the presence of "-" which is illegal in unsigned types. It instead says "2" is unexpected. 2) The target type is wrongly mentioned as uint when it is actually ubyte or ushort. When input is #2A, error messages are not fine at all. The problems are: 1) Again, "2" is flagged as unexpected instead of "#". 2) The target type is wrongly mentioned as before, but now int is displayed for byte and short too. -- | ||||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply