non-constant error for module AA"s

spir denis.spir at gmail.com
Tue Jan 25 04:32:43 PST 2011


On 01/25/2011 08:54 AM, bearophile wrote:
> Andrej Mitrovic:
>
>> It's interesting that enum works but immutable doesn't. enum will do, Thanks.
>
> But there are some problems with enum AAs. Take a look at this little program:
>
> enum int[int] aa = [1:2, 3:4];
> int foo(int x) {
>      return aa[x];
> }
> void main() {}
>
>
> And the asm of foo():
>
> _D4test3fooFiZi comdat
>          push    EAX
>          mov ECX,offset FLAT:_D10TypeInfo_i6__initZ
>          mov EDX,offset FLAT:_D12TypeInfo_Hii6__initZ
>          push    EAX
>          push    4
>          push    ECX
>          push    4
>          push    3
>          push    2
>          push    1
>          push    2
>          push    EDX
>          call    near ptr __d_assocarrayliteralT
>          add ESP,018h
>          push    EAX
>          call    near ptr __aaGetRvalue
>          mov EAX,[EAX]
>          add ESP,010h
>          pop ECX
>          ret
>
> Bye,
> bearophile

IIUC, the compiler re-defines the constant (enum) AA at use point. Why?

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d-learn mailing list