View mode: basic / threaded / horizontal-split · Log in · Help
March 03, 2012
AssociativeArray.opIndex
In attempting to fix issue 5030, I'm finding that defining
AssociativeArray.opIndex gives an odd error when druntime is compiled:

dmd: mtype.c:4411: StructDeclaration* TypeAArray::getImpl(): Assertion `impl' failed.

This error only happens when opIndex is declared like this:

	Value opIndex(Key key, int file=__FILE__, int line=__LINE__)

It seems to be OK when declared without the extra parameters, but then
if there's any error in the function body, such as a missing return
value, another strange error happens:

	src/core/thread.d(2835): Error: undefined identifier module thread.keys

Even though the error has nothing to do with thread.d at all.
Apparently there are some unstated assumptions about what's in struct
AssociativeArray?


T

-- 
Chance favours the prepared mind. -- Louis Pasteur
March 03, 2012
Re: AssociativeArray.opIndex
On Saturday, 3 March 2012 at 05:42:19 UTC, H. S. Teoh wrote:
> dmd: mtype.c:4411: StructDeclaration* TypeAArray::getImpl(): 
> Assertion `impl' failed.
> […]
> 	src/core/thread.d(2835): Error: undefined identifier module 
> thread.keys

These two error messages indicate that the AssociativeArray 
template couldn't be instantiated (could be more explicit, I 
know, but DMD currently assumes it always works.

To see what's wrong, you can explicitly instantiate it as 
AssociativeArray!(Key, Value), so that you'll get to see the 
actual error messages.

David
March 03, 2012
Re: AssociativeArray.opIndex
"H. S. Teoh" <hsteoh@quickfur.ath.cx> wrote in message 
news:mailman.341.1330753339.24984.digitalmars-d@puremagic.com...
> Value opIndex(Key key, int file=__FILE__, int line=__LINE__)

The AssociateArray stuct has semantic run on it with errors gagged.  Spot 
the error in the line above!

If you're messing with dmd, try editing 'verror' to print error messages 
while gagged and it should show up.
March 03, 2012
Re: AssociativeArray.opIndex
On 03/03/2012 11:50, Daniel Murphy wrote:
> "H. S. Teoh"<hsteoh@quickfur.ath.cx>  wrote in message
> news:mailman.341.1330753339.24984.digitalmars-d@puremagic.com...
>> Value opIndex(Key key, int file=__FILE__, int line=__LINE__)
>
> The AssociateArray stuct has semantic run on it with errors gagged.  Spot
> the error in the line above!
>
> If you're messing with dmd, try editing 'verror' to print error messages
> while gagged and it should show up.
>
>

I checked the language reference, __FILE__ seems to be a little under 
documented ^^

A...
March 03, 2012
Re: AssociativeArray.opIndex
On Saturday, March 03, 2012 22:50:10 Daniel Murphy wrote:
> "H. S. Teoh" <hsteoh@quickfur.ath.cx> wrote in message
> news:mailman.341.1330753339.24984.digitalmars-d@puremagic.com...
> 
> > Value opIndex(Key key, int file=__FILE__, int line=__LINE__)
> 
> The AssociateArray stuct has semantic run on it with errors gagged.  Spot
> the error in the line above!

There are two of them, not one. file is supposed to be a string, and line 
should be a size_t - though in this particular case, using int for line 
probably won't result in a compilation error. It's still not correct though - 
especially when you end up in situations where someone actually gives an 
argument to line rather than letting it be the default.

- Jonathan M Davis
March 04, 2012
Re: AssociativeArray.opIndex
"Jonathan M Davis" <jmdavisProg@gmx.com> wrote in message 
news:mailman.354.1330804749.24984.digitalmars-d@puremagic.com...
> On Saturday, March 03, 2012 22:50:10 Daniel Murphy wrote:
>> "H. S. Teoh" <hsteoh@quickfur.ath.cx> wrote in message
>> news:mailman.341.1330753339.24984.digitalmars-d@puremagic.com...
>>
>> > Value opIndex(Key key, int file=__FILE__, int line=__LINE__)
>>
>> The AssociateArray stuct has semantic run on it with errors gagged.  Spot
>> the error in the line above!
>
> There are two of them, not one. file is supposed to be a string, and line
> should be a size_t - though in this particular case, using int for line
> probably won't result in a compilation error. It's still not correct 
> though -
> especially when you end up in situations where someone actually gives an
> argument to line rather than letting it be the default.
>
> - Jonathan M Davis

Yeah well, there are several levels between something being wrong and 
something being correct.  Using int instead of string is definately wrong, 
while using int instead of size_t is only wrong on 64bit, or 32bit when 
you're using really really really long files.
Top | Discussion index | About this forum | D home