https://issues.dlang.org/show_bug.cgi?id=24618

          Issue ID: 24618
           Summary: redefined core type errors should show fully qualified
                    name
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: diagnostic
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nob...@puremagic.com
          Reporter: schvei...@gmail.com

Some types in D are considered core to the language, but are defined in the
library. For example:

size_t
ptrdiff_t
string
Object
TypeInfo

One can redefine these symbols in a module, but the resulting confusion in the
error messages is really hard to parse by the person reading the message.

For example, I stared at an error message for about 20 minutes thinking I had a
broken compiler that looked like this:

cannot pass argument `(*aa.impl).keysz` of type `immutable(uint)` to parameter
`size_t len`

Of course, a normal immutable uint can be converted to a normal size_t. But I
had accidentally redefined size_t to an enum.

My suggestion is to prefix any symbols that shadow ones defined in object.d
with the fully qualified name. This could be based on a chart of core symbols
like string or size_t, or it could be all symbols.

So if an error message is referring to a locally-defined size_t, it could say
instead:

cannot pass argument `(*aa.impl).keysz` of type `immutable(uint)` to parameter
`local.mod.size_t len`

This at least gives a hint that the type is not the size_t you are expecting.

--

Reply via email to