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)