Mercurial > projects > ldc
comparison gen/aa.cpp @ 585:fbb1a366cfbc
Complex number should now follow the D ABI on x86. They're also treated as first class values now. Big change.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 09 Sep 2008 16:49:47 -0700 |
parents | 672eb4893b55 |
children | 26fce59fe80a |
comparison
equal
deleted
inserted
replaced
584:c7d7e2282ba3 | 585:fbb1a366cfbc |
---|---|
21 LLValue* pkey; | 21 LLValue* pkey; |
22 if (key->isIm()) { | 22 if (key->isIm()) { |
23 pkey = key->getRVal(); | 23 pkey = key->getRVal(); |
24 } | 24 } |
25 else if (DVarValue* var = key->isVar()) { | 25 else if (DVarValue* var = key->isVar()) { |
26 if (var->lval) { | 26 pkey = key->getLVal(); |
27 pkey = key->getLVal(); | 27 needmem = false; |
28 needmem = false; | |
29 } | |
30 else { | |
31 pkey = key->getRVal(); | |
32 } | |
33 } | 28 } |
34 else if (key->isConst()) { | 29 else if (key->isConst()) { |
35 needmem = true; | 30 needmem = true; |
36 pkey = key->getRVal(); | 31 pkey = key->getRVal(); |
37 } | 32 } |
38 else { | 33 else { |
39 LLValue* tmp = DtoAlloca(DtoType(keytype), "aatmpkeystorage"); | 34 LLValue* tmp = DtoAlloca(DtoType(keytype), "aatmpkeystorage"); |
40 DVarValue* var = new DVarValue(keytype, tmp, true); | 35 DVarValue var(keytype, tmp); |
41 DtoAssign(loc, var, key); | 36 DtoAssign(loc, &var, key); |
42 return tmp; | 37 return tmp; |
43 } | 38 } |
44 | 39 |
45 // give memory | 40 // give memory |
46 if (needmem) { | 41 if (needmem) { |
94 // cast return value | 89 // cast return value |
95 const LLType* targettype = getPtrToType(DtoType(type)); | 90 const LLType* targettype = getPtrToType(DtoType(type)); |
96 if (ret->getType() != targettype) | 91 if (ret->getType() != targettype) |
97 ret = DtoBitCast(ret, targettype); | 92 ret = DtoBitCast(ret, targettype); |
98 | 93 |
99 return new DVarValue(type, ret, true); | 94 return new DVarValue(type, ret); |
100 } | 95 } |
101 | 96 |
102 ///////////////////////////////////////////////////////////////////////////////////// | 97 ///////////////////////////////////////////////////////////////////////////////////// |
103 | 98 |
104 DValue* DtoAAIn(Loc& loc, Type* type, DValue* aa, DValue* key) | 99 DValue* DtoAAIn(Loc& loc, Type* type, DValue* aa, DValue* key) |