Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | "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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Murphy | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Murphy | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | "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. |
Copyright © 1999-2021 by the D Language Foundation