Mercurial > projects > ldc
diff gen/runtime.cpp @ 1512:09734fb929c0
Make == for associative arrays test for equality, not identity.
_aaEq was added to runtime/internal/aaA.d which forwards to
TypeInfo_AssociativeArray.equals in genobj.d. On the codegen side, DtoAAEquals
was added to gen/aa.cpp and is called from EqualExp::toElem in gen/toir.cpp.
I assume that the frontend will produce an error if == is used on associative
arrays of different type.
This fixes DMD bug 1429.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 21 Jun 2009 19:05:24 +0200 |
parents | 76936858d1c6 |
children | 982eb70e83b2 833337c65fd3 |
line wrap: on
line diff
--- a/gen/runtime.cpp Sun Jun 21 00:12:29 2009 +0200 +++ b/gen/runtime.cpp Sun Jun 21 19:05:24 2009 +0200 @@ -220,6 +220,8 @@ = Attr_1_NoCapture.addAttr(0, NoAlias), Attr_NoAlias_3_NoCapture = Attr_NoAlias.addAttr(3, NoCapture), + Attr_1_2_NoCapture + = Attr_1_NoCapture.addAttr(2, NoCapture), Attr_1_3_NoCapture = Attr_1_NoCapture.addAttr(3, NoCapture), Attr_1_4_NoCapture @@ -738,6 +740,18 @@ ->setAttributes(Attr_1_NoCapture); } + // int _aaEq(AA aa, AA ab, TypeInfo_AssociativeArray ti) + { + std::string fname("_aaEq"); + std::vector<const LLType*> types; + types.push_back(aaTy); + types.push_back(aaTy); + types.push_back(typeInfoTy); + const llvm::FunctionType* fty = llvm::FunctionType::get(intTy, types, false); + llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M) + ->setAttributes(Attr_1_2_NoCapture); + } + ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////