mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-12 02:43:14 +01:00
[svn r101] Split up CastExp into several smaller utility functions.
This commit is contained in:
177
gen/toir.cpp
177
gen/toir.cpp
@@ -95,7 +95,7 @@ DValue* DeclarationExp::toElem(IRState* p)
|
||||
// unsupported declaration
|
||||
else
|
||||
{
|
||||
error("Only Var/Struct-Declaration is supported for DeclarationExp");
|
||||
error("Unimplemented DeclarationExp type");
|
||||
assert(0);
|
||||
}
|
||||
return 0;
|
||||
@@ -1341,175 +1341,20 @@ DValue* CastExp::toElem(IRState* p)
|
||||
LOG_SCOPE;
|
||||
|
||||
DValue* u = e1->toElem(p);
|
||||
DValue* v = DtoCast(u, to);
|
||||
|
||||
const llvm::Type* tolltype = DtoType(to);
|
||||
Type* fromtype = DtoDType(e1->type);
|
||||
Type* totype = DtoDType(to);
|
||||
int lsz = fromtype->size();
|
||||
int rsz = totype->size();
|
||||
|
||||
// this makes sure the strange lvalue casts don't screw things up
|
||||
llvm::Value* rval = 0;
|
||||
llvm::Value* rval2 = 0;
|
||||
bool isslice = false;
|
||||
|
||||
if (fromtype->isintegral()) {
|
||||
if (totype->isintegral()) {
|
||||
if (lsz < rsz) {
|
||||
Logger::cout() << "cast to: " << *tolltype << '\n';
|
||||
if (fromtype->isunsigned() || fromtype->ty == Tbool) {
|
||||
rval = new llvm::ZExtInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
} else {
|
||||
rval = new llvm::SExtInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
}
|
||||
else if (lsz > rsz) {
|
||||
rval = new llvm::TruncInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::BitCastInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
}
|
||||
else if (totype->isfloating()) {
|
||||
if (fromtype->isunsigned()) {
|
||||
rval = new llvm::UIToFPInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::SIToFPInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
}
|
||||
else if (totype->ty == Tpointer) {
|
||||
rval = p->ir->CreateIntToPtr(u->getRVal(), tolltype, "tmp");
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
else if (fromtype->isfloating()) {
|
||||
if (totype->isfloating()) {
|
||||
if ((fromtype->ty == Tfloat80 || fromtype->ty == Tfloat64) && (totype->ty == Tfloat80 || totype->ty == Tfloat64)) {
|
||||
rval = u->getRVal();
|
||||
}
|
||||
else if (lsz < rsz) {
|
||||
rval = new llvm::FPExtInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else if (lsz > rsz) {
|
||||
rval = new llvm::FPTruncInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
else if (totype->isintegral()) {
|
||||
if (totype->isunsigned()) {
|
||||
rval = new llvm::FPToUIInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::FPToSIInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
else if (fromtype->ty == Tclass) {
|
||||
//assert(to->ty == Tclass);
|
||||
rval = new llvm::BitCastInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else if (fromtype->ty == Tarray || fromtype->ty == Tsarray) {
|
||||
Logger::cout() << "from array or sarray" << '\n';
|
||||
if (totype->ty == Tpointer) {
|
||||
Logger::cout() << "to pointer" << '\n';
|
||||
assert(fromtype->next == totype->next || totype->next->ty == Tvoid);
|
||||
llvm::Value* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
|
||||
llvm::Value* one = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1, false);
|
||||
llvm::Value* ptr = DtoGEP(u->getRVal(),zero,one,"tmp",p->scopebb());
|
||||
rval = new llvm::LoadInst(ptr, "tmp", p->scopebb());
|
||||
if (fromtype->next != totype->next)
|
||||
rval = p->ir->CreateBitCast(rval, llvm::PointerType::get(llvm::Type::Int8Ty), "tmp");
|
||||
}
|
||||
else if (totype->ty == Tarray) {
|
||||
Logger::cout() << "to array" << '\n';
|
||||
const llvm::Type* ptrty = DtoType(totype->next);
|
||||
if (ptrty == llvm::Type::VoidTy)
|
||||
ptrty = llvm::Type::Int8Ty;
|
||||
ptrty = llvm::PointerType::get(ptrty);
|
||||
|
||||
const llvm::Type* ety = DtoType(fromtype->next);
|
||||
if (ety == llvm::Type::VoidTy)
|
||||
ety = llvm::Type::Int8Ty;
|
||||
|
||||
if (DSliceValue* usl = u->isSlice()) {
|
||||
rval = new llvm::BitCastInst(usl->ptr, ptrty, "tmp", p->scopebb());
|
||||
if (fromtype->next->size() == totype->next->size())
|
||||
rval2 = usl->len;
|
||||
else
|
||||
rval2 = DtoArrayCastLength(usl->len, ety, ptrty->getContainedType(0));
|
||||
}
|
||||
else {
|
||||
llvm::Value* uval = u->getRVal();
|
||||
if (fromtype->ty == Tsarray) {
|
||||
Logger::cout() << "uvalTy = " << *uval->getType() << '\n';
|
||||
assert(isaPointer(uval->getType()));
|
||||
const llvm::ArrayType* arrty = isaArray(uval->getType()->getContainedType(0));
|
||||
rval2 = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false);
|
||||
rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
|
||||
rval = new llvm::BitCastInst(uval, ptrty, "tmp", p->scopebb());
|
||||
}
|
||||
else {
|
||||
llvm::Value* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
|
||||
llvm::Value* one = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1, false);
|
||||
rval2 = DtoGEP(uval,zero,zero,"tmp",p->scopebb());
|
||||
rval2 = new llvm::LoadInst(rval2, "tmp", p->scopebb());
|
||||
rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
|
||||
|
||||
rval = DtoGEP(uval,zero,one,"tmp",p->scopebb());
|
||||
rval = new llvm::LoadInst(rval, "tmp", p->scopebb());
|
||||
//Logger::cout() << *e->mem->getType() << '|' << *ptrty << '\n';
|
||||
rval = new llvm::BitCastInst(rval, ptrty, "tmp", p->scopebb());
|
||||
}
|
||||
}
|
||||
isslice = true;
|
||||
}
|
||||
else if (totype->ty == Tsarray) {
|
||||
Logger::cout() << "to sarray" << '\n';
|
||||
assert(0);
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
else if (fromtype->ty == Tpointer) {
|
||||
if (totype->ty == Tpointer || totype->ty == Tclass) {
|
||||
llvm::Value* src = u->getRVal();
|
||||
Logger::cout() << "src: " << *src << "to type: " << *tolltype << '\n';
|
||||
rval = new llvm::BitCastInst(src, tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else if (totype->isintegral()) {
|
||||
rval = new llvm::PtrToIntInst(u->getRVal(), tolltype, "tmp", p->scopebb());
|
||||
}
|
||||
else
|
||||
assert(0);
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (isslice) {
|
||||
return new DSliceValue(type, rval2, rval);
|
||||
}
|
||||
else if (u->isLValueCast() || (u->isVar() && u->isVar()->lval)) {
|
||||
return new DLValueCast(type, u->getLVal(), rval);
|
||||
}
|
||||
else if (p->topexp() && p->topexp()->e1 == this) {
|
||||
if (v->isSlice())
|
||||
return v;
|
||||
else if (u->isLValueCast() || (u->isVar() && u->isVar()->lval))
|
||||
return new DLValueCast(to, u->getLVal(), v->getRVal());
|
||||
else if (gIR->topexp() && gIR->topexp()->e1 == this) {
|
||||
llvm::Value* lval = u->getLVal();
|
||||
llvm::Value* rval = v->getRVal();
|
||||
Logger::cout() << "lval: " << *lval << "rval: " << *rval << '\n';
|
||||
return new DLValueCast(type, lval, rval);
|
||||
}
|
||||
else {
|
||||
Logger::cout() << "im rval: " << *rval << '\n';
|
||||
return new DImValue(type, rval);
|
||||
return new DLValueCast(to, lval, rval);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
228
gen/tollvm.cpp
228
gen/tollvm.cpp
@@ -1304,6 +1304,234 @@ void DtoAssign(DValue* lhs, DValue* rhs)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
DValue* DtoCastInt(DValue* val, Type* _to)
|
||||
{
|
||||
const llvm::Type* tolltype = DtoType(_to);
|
||||
|
||||
Type* to = DtoDType(_to);
|
||||
Type* from = DtoDType(val->getType());
|
||||
assert(from->isintegral());
|
||||
|
||||
size_t fromsz = from->size();
|
||||
size_t tosz = to->size();
|
||||
|
||||
llvm::Value* rval;
|
||||
|
||||
if (to->isintegral()) {
|
||||
if (fromsz < tosz) {
|
||||
Logger::cout() << "cast to: " << *tolltype << '\n';
|
||||
if (from->isunsigned() || from->ty == Tbool) {
|
||||
rval = new llvm::ZExtInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
} else {
|
||||
rval = new llvm::SExtInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
}
|
||||
else if (fromsz > tosz) {
|
||||
rval = new llvm::TruncInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::BitCastInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
}
|
||||
else if (to->isfloating()) {
|
||||
if (from->isunsigned()) {
|
||||
rval = new llvm::UIToFPInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::SIToFPInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
}
|
||||
else if (to->ty == Tpointer) {
|
||||
rval = gIR->ir->CreateIntToPtr(val->getRVal(), tolltype, "tmp");
|
||||
}
|
||||
else {
|
||||
assert(0 && "bad int cast");
|
||||
}
|
||||
|
||||
return new DImValue(_to, rval);
|
||||
}
|
||||
|
||||
DValue* DtoCastPtr(DValue* val, Type* to)
|
||||
{
|
||||
const llvm::Type* tolltype = DtoType(to);
|
||||
|
||||
Type* totype = DtoDType(to);
|
||||
Type* fromtype = DtoDType(val->getType());
|
||||
assert(fromtype->ty == Tpointer);
|
||||
|
||||
llvm::Value* rval;
|
||||
|
||||
if (totype->ty == Tpointer || totype->ty == Tclass) {
|
||||
llvm::Value* src = val->getRVal();
|
||||
Logger::cout() << "src: " << *src << "to type: " << *tolltype << '\n';
|
||||
rval = new llvm::BitCastInst(src, tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else if (totype->isintegral()) {
|
||||
rval = new llvm::PtrToIntInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
return new DImValue(to, rval);
|
||||
}
|
||||
|
||||
DValue* DtoCastFloat(DValue* val, Type* to)
|
||||
{
|
||||
const llvm::Type* tolltype = DtoType(to);
|
||||
|
||||
Type* totype = DtoDType(to);
|
||||
Type* fromtype = DtoDType(val->getType());
|
||||
assert(fromtype->isfloating());
|
||||
|
||||
size_t fromsz = fromtype->size();
|
||||
size_t tosz = totype->size();
|
||||
|
||||
llvm::Value* rval;
|
||||
|
||||
if (totype->isfloating()) {
|
||||
if ((fromtype->ty == Tfloat80 || fromtype->ty == Tfloat64) && (totype->ty == Tfloat80 || totype->ty == Tfloat64)) {
|
||||
rval = val->getRVal();
|
||||
}
|
||||
else if (fromsz < tosz) {
|
||||
rval = new llvm::FPExtInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else if (fromsz > tosz) {
|
||||
rval = new llvm::FPTruncInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
assert(0 && "bad float cast");
|
||||
}
|
||||
}
|
||||
else if (totype->isintegral()) {
|
||||
if (totype->isunsigned()) {
|
||||
rval = new llvm::FPToUIInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
rval = new llvm::FPToSIInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
}
|
||||
}
|
||||
else {
|
||||
assert(0 && "bad float cast");
|
||||
}
|
||||
|
||||
return new DImValue(to, rval);
|
||||
}
|
||||
|
||||
DValue* DtoCastClass(DValue* val, Type* _to)
|
||||
{
|
||||
const llvm::Type* tolltype = DtoType(_to);
|
||||
Type* to = DtoDType(_to);
|
||||
assert(to->ty == Tclass);
|
||||
llvm::Value* rval = new llvm::BitCastInst(val->getRVal(), tolltype, "tmp", gIR->scopebb());
|
||||
return new DImValue(_to, rval);
|
||||
}
|
||||
|
||||
DValue* DtoCastArray(DValue* u, Type* to)
|
||||
{
|
||||
const llvm::Type* tolltype = DtoType(to);
|
||||
|
||||
Type* totype = DtoDType(to);
|
||||
Type* fromtype = DtoDType(u->getType());
|
||||
assert(fromtype->ty == Tarray || fromtype->ty == Tsarray);
|
||||
|
||||
llvm::Value* rval;
|
||||
llvm::Value* rval2;
|
||||
bool isslice = false;
|
||||
|
||||
Logger::cout() << "from array or sarray" << '\n';
|
||||
if (totype->ty == Tpointer) {
|
||||
Logger::cout() << "to pointer" << '\n';
|
||||
assert(fromtype->next == totype->next || totype->next->ty == Tvoid);
|
||||
llvm::Value* ptr = DtoGEPi(u->getRVal(),0,1,"tmp",gIR->scopebb());
|
||||
rval = new llvm::LoadInst(ptr, "tmp", gIR->scopebb());
|
||||
if (fromtype->next != totype->next)
|
||||
rval = gIR->ir->CreateBitCast(rval, llvm::PointerType::get(llvm::Type::Int8Ty), "tmp");
|
||||
}
|
||||
else if (totype->ty == Tarray) {
|
||||
Logger::cout() << "to array" << '\n';
|
||||
const llvm::Type* ptrty = DtoType(totype->next);
|
||||
if (ptrty == llvm::Type::VoidTy)
|
||||
ptrty = llvm::Type::Int8Ty;
|
||||
ptrty = llvm::PointerType::get(ptrty);
|
||||
|
||||
const llvm::Type* ety = DtoType(fromtype->next);
|
||||
if (ety == llvm::Type::VoidTy)
|
||||
ety = llvm::Type::Int8Ty;
|
||||
|
||||
if (DSliceValue* usl = u->isSlice()) {
|
||||
Logger::println("from slice");
|
||||
rval = new llvm::BitCastInst(usl->ptr, ptrty, "tmp", gIR->scopebb());
|
||||
if (fromtype->next->size() == totype->next->size())
|
||||
rval2 = usl->len;
|
||||
else
|
||||
rval2 = DtoArrayCastLength(usl->len, ety, ptrty->getContainedType(0));
|
||||
}
|
||||
else {
|
||||
llvm::Value* uval = u->getRVal();
|
||||
if (fromtype->ty == Tsarray) {
|
||||
Logger::cout() << "uvalTy = " << *uval->getType() << '\n';
|
||||
assert(isaPointer(uval->getType()));
|
||||
const llvm::ArrayType* arrty = isaArray(uval->getType()->getContainedType(0));
|
||||
rval2 = llvm::ConstantInt::get(DtoSize_t(), arrty->getNumElements(), false);
|
||||
rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
|
||||
rval = new llvm::BitCastInst(uval, ptrty, "tmp", gIR->scopebb());
|
||||
}
|
||||
else {
|
||||
llvm::Value* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
|
||||
llvm::Value* one = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1, false);
|
||||
rval2 = DtoGEP(uval,zero,zero,"tmp",gIR->scopebb());
|
||||
rval2 = new llvm::LoadInst(rval2, "tmp", gIR->scopebb());
|
||||
rval2 = DtoArrayCastLength(rval2, ety, ptrty->getContainedType(0));
|
||||
|
||||
rval = DtoGEP(uval,zero,one,"tmp",gIR->scopebb());
|
||||
rval = new llvm::LoadInst(rval, "tmp", gIR->scopebb());
|
||||
//Logger::cout() << *e->mem->getType() << '|' << *ptrty << '\n';
|
||||
rval = new llvm::BitCastInst(rval, ptrty, "tmp", gIR->scopebb());
|
||||
}
|
||||
}
|
||||
isslice = true;
|
||||
}
|
||||
else if (totype->ty == Tsarray) {
|
||||
Logger::cout() << "to sarray" << '\n';
|
||||
assert(0);
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (isslice) {
|
||||
Logger::println("isslice");
|
||||
return new DSliceValue(to, rval2, rval);
|
||||
}
|
||||
|
||||
return new DImValue(to, rval);
|
||||
}
|
||||
|
||||
DValue* DtoCast(DValue* val, Type* to)
|
||||
{
|
||||
Type* fromtype = DtoDType(val->getType());
|
||||
if (fromtype->isintegral()) {
|
||||
return DtoCastInt(val, to);
|
||||
}
|
||||
else if (fromtype->isfloating()) {
|
||||
return DtoCastFloat(val, to);
|
||||
}
|
||||
else if (fromtype->ty == Tclass) {
|
||||
return DtoCastClass(val, to);
|
||||
}
|
||||
else if (fromtype->ty == Tarray || fromtype->ty == Tsarray) {
|
||||
return DtoCastArray(val, to);
|
||||
}
|
||||
else if (fromtype->ty == Tpointer) {
|
||||
return DtoCastPtr(val, to);
|
||||
}
|
||||
else {
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
llvm::ConstantInt* DtoConstSize_t(size_t i)
|
||||
|
||||
@@ -89,6 +89,14 @@ llvm::Argument* isaArgument(llvm::Value* v);
|
||||
// basic operations
|
||||
void DtoAssign(DValue* lhs, DValue* rhs);
|
||||
|
||||
// casts
|
||||
DValue* DtoCastInt(DValue* val, Type* to);
|
||||
DValue* DtoCastPtr(DValue* val, Type* to);
|
||||
DValue* DtoCastFloat(DValue* val, Type* to);
|
||||
DValue* DtoCastArray(DValue* val, Type* to);
|
||||
DValue* DtoCastClass(DValue* val, Type* to);
|
||||
DValue* DtoCast(DValue* val, Type* to);
|
||||
|
||||
// binary operations
|
||||
DValue* DtoBinAdd(DValue* lhs, DValue* rhs);
|
||||
DValue* DtoBinSub(DValue* lhs, DValue* rhs);
|
||||
|
||||
104
llvmdc.kdevelop
104
llvmdc.kdevelop
@@ -14,8 +14,8 @@
|
||||
<projectname>llvmdc</projectname>
|
||||
<projectdirectory>.</projectdirectory>
|
||||
<absoluteprojectpath>false</absoluteprojectpath>
|
||||
<description></description>
|
||||
<defaultencoding></defaultencoding>
|
||||
<description/>
|
||||
<defaultencoding/>
|
||||
</general>
|
||||
<kdevautoproject>
|
||||
<general/>
|
||||
@@ -156,7 +156,7 @@
|
||||
<includePaths>.;</includePaths>
|
||||
</codecompletion>
|
||||
<creategettersetter>
|
||||
<prefixGet></prefixGet>
|
||||
<prefixGet/>
|
||||
<prefixSet>set</prefixSet>
|
||||
<prefixVariable>m_,_</prefixVariable>
|
||||
<parameterName>theValue</parameterName>
|
||||
@@ -174,8 +174,8 @@
|
||||
<run>
|
||||
<directoryradio>executable</directoryradio>
|
||||
<mainprogram>/home/tomas/kdevprojects/llvmdc</mainprogram>
|
||||
<programargs></programargs>
|
||||
<globaldebugarguments></globaldebugarguments>
|
||||
<programargs/>
|
||||
<globaldebugarguments/>
|
||||
<globalcwd>/home/tomas/kdevprojects/llvmdc</globalcwd>
|
||||
<useglobalprogram>false</useglobalprogram>
|
||||
<terminal>false</terminal>
|
||||
@@ -324,16 +324,86 @@
|
||||
<path>dmdorig/phobos/internal/deh.c</path>
|
||||
<path>dmdorig/phobos/internal/mars.h</path>
|
||||
<path>dmdorig/phobos/internal/monitor.c</path>
|
||||
<path>obj/Debug</path>
|
||||
<path>obj/Debug/access.d</path>
|
||||
<path>obj/Debug/array.d</path>
|
||||
<path>obj/Debug/arrays.d</path>
|
||||
<path>obj/Debug/attrib.d</path>
|
||||
<path>obj/Debug/binops.d</path>
|
||||
<path>obj/Debug/cast.d</path>
|
||||
<path>obj/Debug/class.d</path>
|
||||
<path>obj/Debug/cond.d</path>
|
||||
<path>obj/Debug/constfold.d</path>
|
||||
<path>obj/Debug/dchar.d</path>
|
||||
<path>obj/Debug/declaration.d</path>
|
||||
<path>obj/Debug/delegatize.d</path>
|
||||
<path>obj/Debug/doc.d</path>
|
||||
<path>obj/Debug/dsymbol.d</path>
|
||||
<path>obj/Debug/dump.d</path>
|
||||
<path>obj/Debug/dvalue.d</path>
|
||||
<path>obj/Debug/dwarftypes.d</path>
|
||||
<path>obj/Debug/elem.d</path>
|
||||
<path>obj/Debug/entity.d</path>
|
||||
<path>obj/Debug/enum.d</path>
|
||||
<path>obj/Debug/expression.d</path>
|
||||
<path>obj/Debug/func.d</path>
|
||||
<path>obj/Debug/gnuc.d</path>
|
||||
<path>obj/Debug/hdrgen.d</path>
|
||||
<path>obj/Debug/html.d</path>
|
||||
<path>obj/Debug/id.d</path>
|
||||
<path>obj/Debug/identifier.d</path>
|
||||
<path>obj/Debug/idgen.d</path>
|
||||
<path>obj/Debug/impcnvgen.d</path>
|
||||
<path>obj/Debug/impcnvtab.d</path>
|
||||
<path>obj/Debug/import.d</path>
|
||||
<path>obj/Debug/inifile.d</path>
|
||||
<path>obj/Debug/init.d</path>
|
||||
<path>obj/Debug/inline.d</path>
|
||||
<path>obj/Debug/interpret.d</path>
|
||||
<path>obj/Debug/irstate.d</path>
|
||||
<path>obj/Debug/lexer.d</path>
|
||||
<path>obj/Debug/link.d</path>
|
||||
<path>obj/Debug/logger.d</path>
|
||||
<path>obj/Debug/lstring.d</path>
|
||||
<path>obj/Debug/macro.d</path>
|
||||
<path>obj/Debug/mangle.d</path>
|
||||
<path>obj/Debug/mars.d</path>
|
||||
<path>obj/Debug/mem.d</path>
|
||||
<path>obj/Debug/module.d</path>
|
||||
<path>obj/Debug/mtype.d</path>
|
||||
<path>obj/Debug/opover.d</path>
|
||||
<path>obj/Debug/optimize.d</path>
|
||||
<path>obj/Debug/parse.d</path>
|
||||
<path>obj/Debug/root.d</path>
|
||||
<path>obj/Debug/runtime.d</path>
|
||||
<path>obj/Debug/scope.d</path>
|
||||
<path>obj/Debug/statement.d</path>
|
||||
<path>obj/Debug/statements.d</path>
|
||||
<path>obj/Debug/staticassert.d</path>
|
||||
<path>obj/Debug/stringtable.d</path>
|
||||
<path>obj/Debug/struct.d</path>
|
||||
<path>obj/Debug/structs.d</path>
|
||||
<path>obj/Debug/template.d</path>
|
||||
<path>obj/Debug/tocsym.d</path>
|
||||
<path>obj/Debug/todebug.d</path>
|
||||
<path>obj/Debug/todt.d</path>
|
||||
<path>obj/Debug/toir.d</path>
|
||||
<path>obj/Debug/tollvm.d</path>
|
||||
<path>obj/Debug/toobj.d</path>
|
||||
<path>obj/Debug/typinf.d</path>
|
||||
<path>obj/Debug/unialpha.d</path>
|
||||
<path>obj/Debug/utf.d</path>
|
||||
<path>obj/Debug/version.d</path>
|
||||
</blacklist>
|
||||
<build>
|
||||
<buildtool>make</buildtool>
|
||||
<builddir></builddir>
|
||||
<builddir/>
|
||||
</build>
|
||||
<other>
|
||||
<prio>0</prio>
|
||||
<otherbin></otherbin>
|
||||
<defaulttarget></defaulttarget>
|
||||
<otheroptions></otheroptions>
|
||||
<otherbin/>
|
||||
<defaulttarget/>
|
||||
<otheroptions/>
|
||||
<selectedenvironment>default</selectedenvironment>
|
||||
<environments>
|
||||
<default/>
|
||||
@@ -344,9 +414,9 @@
|
||||
<numberofjobs>0</numberofjobs>
|
||||
<prio>0</prio>
|
||||
<dontact>false</dontact>
|
||||
<makebin></makebin>
|
||||
<defaulttarget></defaulttarget>
|
||||
<makeoptions></makeoptions>
|
||||
<makebin/>
|
||||
<defaulttarget/>
|
||||
<makeoptions/>
|
||||
<selectedenvironment>default</selectedenvironment>
|
||||
<environments>
|
||||
<default/>
|
||||
@@ -361,11 +431,11 @@
|
||||
</cppsupportpart>
|
||||
<kdevdebugger>
|
||||
<general>
|
||||
<gdbpath></gdbpath>
|
||||
<dbgshell></dbgshell>
|
||||
<configGdbScript></configGdbScript>
|
||||
<runShellScript></runShellScript>
|
||||
<runGdbScript></runGdbScript>
|
||||
<gdbpath/>
|
||||
<dbgshell/>
|
||||
<configGdbScript/>
|
||||
<runShellScript/>
|
||||
<runGdbScript/>
|
||||
<breakonloadinglibs>true</breakonloadinglibs>
|
||||
<separatetty>false</separatetty>
|
||||
<floatingtoolbar>false</floatingtoolbar>
|
||||
|
||||
@@ -106,8 +106,6 @@ gen/binops.cpp
|
||||
gen/dvalue.cpp
|
||||
gen/dvalue.h
|
||||
gen/dwarftypes.cpp
|
||||
gen/elem.cpp
|
||||
gen/elem.h
|
||||
gen/enums.h
|
||||
gen/irstate.cpp
|
||||
gen/irstate.h
|
||||
@@ -119,7 +117,6 @@ gen/runtime.h
|
||||
gen/statements.cpp
|
||||
gen/structs.cpp
|
||||
gen/structs.h
|
||||
gen/symbol.h
|
||||
gen/tocsym.cpp
|
||||
gen/todebug.cpp
|
||||
gen/todebug.h
|
||||
@@ -292,9 +289,7 @@ test/bug6.d
|
||||
test/bug60.d
|
||||
test/bug61.d
|
||||
test/bug62.d
|
||||
test/bug63.d
|
||||
test/bug64.d
|
||||
test/bug65.d
|
||||
test/bug7.d
|
||||
test/bug8.d
|
||||
test/bug9.d
|
||||
@@ -361,7 +356,6 @@ test/nested4.d
|
||||
test/pointers.d
|
||||
test/pt.d
|
||||
test/ptrarith.d
|
||||
test/ray.d
|
||||
test/scope1.d
|
||||
test/scope2.d
|
||||
test/scope3.d
|
||||
|
||||
@@ -506,7 +506,7 @@ unittest
|
||||
}
|
||||
|
||||
/***************************************
|
||||
* Support for array equality test for bit arrays.
|
||||
* Support for bit array equality test for bit arrays.
|
||||
*/
|
||||
|
||||
version (none)
|
||||
@@ -602,7 +602,7 @@ unittest
|
||||
}
|
||||
|
||||
/***************************************
|
||||
* Support for array compare test.
|
||||
* Support for char array compare test.
|
||||
*/
|
||||
|
||||
extern (C) int _adCmpChar(Array a1, Array a2)
|
||||
@@ -748,7 +748,7 @@ unittest
|
||||
}
|
||||
|
||||
/***************************************
|
||||
* Support for array compare test.
|
||||
* Support for bit array compare test.
|
||||
*/
|
||||
|
||||
version (none)
|
||||
|
||||
Reference in New Issue
Block a user