annotate gen/aa.cpp @ 314:8d98e42ece93 trunk

[svn r335] The basics of exception handling are in place. Still need to make sure calls are turned into invokes everywhere. (NewExpression for instance) Still some rough edges and corner cases to figure out. Needs testing!
author ChristianK
date Wed, 02 Jul 2008 22:20:18 +0200
parents 665b81613475
children a9697749e898
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
1 #include "gen/llvm.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
2
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
3 #include "mtype.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
4 #include "declaration.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
5 #include "aggregate.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
6
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
7 #include "gen/aa.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
8 #include "gen/runtime.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
9 #include "gen/tollvm.h"
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
10 #include "gen/llvmhelpers.h"
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
11 #include "gen/logger.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
12 #include "gen/irstate.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
13 #include "gen/dvalue.h"
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
14
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
15 // makes sure the key value lives in memory so it can be passed to the runtime functions without problems
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
16 // returns the pointer
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
17 static LLValue* to_pkey(DValue* key)
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
18 {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
19 Type* keytype = key->getType();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
20 bool needmem = !DtoIsPassedByRef(keytype);
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
21 LLValue* pkey;
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
22 if (key->isIm()) {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
23 pkey = key->getRVal();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
24 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
25 else if (DVarValue* var = key->isVar()) {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
26 if (var->lval) {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
27 pkey = key->getLVal();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
28 needmem = false;
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
29 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
30 else {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
31 pkey = key->getRVal();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
32 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
33 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
34 else if (key->isConst()) {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
35 needmem = true;
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
36 pkey = key->getRVal();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
37 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
38 else {
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
39 LLValue* tmp = new llvm::AllocaInst(DtoType(keytype), "aatmpkeystorage", gIR->topallocapoint());
168
08cfde5f70d3 [svn r184] fixed an AA helper for giving keys storage, which the runtime needs. tango.text.UnicodeData now compiles.
lindquist
parents: 163
diff changeset
40 DVarValue* var = new DVarValue(keytype, tmp, true);
08cfde5f70d3 [svn r184] fixed an AA helper for giving keys storage, which the runtime needs. tango.text.UnicodeData now compiles.
lindquist
parents: 163
diff changeset
41 DtoAssign(var, key);
08cfde5f70d3 [svn r184] fixed an AA helper for giving keys storage, which the runtime needs. tango.text.UnicodeData now compiles.
lindquist
parents: 163
diff changeset
42 return tmp;
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
43 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
44
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
45 // give memory
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
46 if (needmem) {
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
47 LLValue* tmp = new llvm::AllocaInst(DtoType(keytype), "aatmpkeystorage", gIR->topallocapoint());
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
48 DtoStore(pkey, tmp);
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
49 pkey = tmp;
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
50 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
51
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
52 return pkey;
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
53 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
54
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
55 // returns the keytype typeinfo
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
56 static LLValue* to_keyti(DValue* key)
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
57 {
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
58 // keyti param
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
59 Type* keytype = key->getType();
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
60 return DtoTypeInfoOf(keytype, false);
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
61 }
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
62
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
63 /////////////////////////////////////////////////////////////////////////////////////
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
64
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
65 DValue* DtoAAIndex(Type* type, DValue* aa, DValue* key)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
66 {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
67 // call:
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
68 // extern(C) void* _aaGet(AA* aa, TypeInfo keyti, void* pkey, size_t valuesize)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
69
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
70 // first get the runtime function
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
71 llvm::Function* func = LLVM_D_GetRuntimeFunction(gIR->module, "_aaGet");
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
72 const llvm::FunctionType* funcTy = func->getFunctionType();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
73
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
74 // aa param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
75 LLValue* aaval = aa->getLVal();
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
76 aaval = DtoBitCast(aaval, funcTy->getParamType(0));
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
77
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
78 // keyti param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
79 LLValue* keyti = to_keyti(key);
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
80 keyti = DtoBitCast(keyti, funcTy->getParamType(1));
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
81
163
a8cd9bc1021a [svn r179] lots and lots of fixes, much more of tango now compiles/works.
lindquist
parents: 156
diff changeset
82 // valuesize param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
83 LLValue* valsize = DtoConstSize_t(getABITypeSize(DtoType(type)));
163
a8cd9bc1021a [svn r179] lots and lots of fixes, much more of tango now compiles/works.
lindquist
parents: 156
diff changeset
84
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
85 // pkey param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
86 LLValue* pkey = to_pkey(key);
163
a8cd9bc1021a [svn r179] lots and lots of fixes, much more of tango now compiles/works.
lindquist
parents: 156
diff changeset
87 pkey = DtoBitCast(pkey, funcTy->getParamType(3));
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
88
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
89 // call runtime
217
0806379a5eca [svn r233] Added: -oq command line option for writing fully qualified object names.
lindquist
parents: 213
diff changeset
90 LLValue* ret = gIR->ir->CreateCall4(func, aaval, keyti, valsize, pkey, "aa.index");
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
91
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
92 // cast return value
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
93 const LLType* targettype = getPtrToType(DtoType(type));
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
94 if (ret->getType() != targettype)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
95 ret = DtoBitCast(ret, targettype);
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
96
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
97 return new DVarValue(type, ret, true);
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
98 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
99
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
100 /////////////////////////////////////////////////////////////////////////////////////
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
101
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
102 DValue* DtoAAIn(Type* type, DValue* aa, DValue* key)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
103 {
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
104 // call:
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
105 // extern(C) void* _aaIn(AA aa*, TypeInfo keyti, void* pkey)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
106
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
107 // first get the runtime function
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
108 llvm::Function* func = LLVM_D_GetRuntimeFunction(gIR->module, "_aaIn");
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
109 const llvm::FunctionType* funcTy = func->getFunctionType();
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
110
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
111 Logger::cout() << "_aaIn = " << *func << '\n';
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
112
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
113 // aa param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
114 LLValue* aaval = aa->getRVal();
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
115 Logger::cout() << "aaval: " << *aaval << '\n';
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
116 Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
117 aaval = DtoBitCast(aaval, funcTy->getParamType(0));
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
118
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
119 // keyti param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
120 LLValue* keyti = to_keyti(key);
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
121 keyti = DtoBitCast(keyti, funcTy->getParamType(1));
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
122
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
123 // pkey param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
124 LLValue* pkey = to_pkey(key);
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
125 pkey = DtoBitCast(pkey, funcTy->getParamType(2));
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
126
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
127 // call runtime
217
0806379a5eca [svn r233] Added: -oq command line option for writing fully qualified object names.
lindquist
parents: 213
diff changeset
128 LLValue* ret = gIR->ir->CreateCall3(func, aaval, keyti, pkey, "aa.in");
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
129
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
130 // cast return value
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
131 const LLType* targettype = DtoType(type);
109
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
132 if (ret->getType() != targettype)
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
133 ret = DtoBitCast(ret, targettype);
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
134
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
135 return new DImValue(type, ret);
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
136 }
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
137
5ab8e92611f9 [svn r113] Added initial support for associative arrays (AAs).
lindquist
parents:
diff changeset
138 /////////////////////////////////////////////////////////////////////////////////////
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
139
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
140 void DtoAARemove(DValue* aa, DValue* key)
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
141 {
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
142 // call:
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
143 // extern(C) void _aaDel(AA aa, TypeInfo keyti, void* pkey)
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
144
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
145 // first get the runtime function
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
146 llvm::Function* func = LLVM_D_GetRuntimeFunction(gIR->module, "_aaDel");
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
147 const llvm::FunctionType* funcTy = func->getFunctionType();
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
148
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
149 Logger::cout() << "_aaDel = " << *func << '\n';
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
150
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
151 // aa param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
152 LLValue* aaval = aa->getRVal();
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
153 Logger::cout() << "aaval: " << *aaval << '\n';
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
154 Logger::cout() << "totype: " << *funcTy->getParamType(0) << '\n';
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
155 aaval = DtoBitCast(aaval, funcTy->getParamType(0));
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
156
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
157 // keyti param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
158 LLValue* keyti = to_keyti(key);
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
159 keyti = DtoBitCast(keyti, funcTy->getParamType(1));
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
160
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
161 // pkey param
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
162 LLValue* pkey = to_pkey(key);
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
163 pkey = DtoBitCast(pkey, funcTy->getParamType(2));
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
164
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
165 // build arg vector
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 173
diff changeset
166 LLSmallVector<LLValue*, 3> args;
127
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
167 args.push_back(aaval);
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
168 args.push_back(keyti);
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
169 args.push_back(pkey);
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
170
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
171 // call runtime
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
172 gIR->ir->CreateCall(func, args.begin(), args.end(),"");
facc562f5674 [svn r131] Fixed #11
lindquist
parents: 109
diff changeset
173 }