mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-01 15:40:55 +03:00
72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
//===-- attributes.cpp ----------------------------------------------------===//
|
||
//
|
||
// LDC – the LLVM D compiler
|
||
//
|
||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||
// file for details.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
#include "gen/attributes.h"
|
||
#include "gen/irstate.h"
|
||
|
||
bool AttrBuilder::hasAttributes() const
|
||
{
|
||
return builder.hasAttributes();
|
||
}
|
||
|
||
bool AttrBuilder::contains(LLAttribute attribute) const
|
||
{
|
||
return builder.contains(attribute);
|
||
}
|
||
|
||
AttrBuilder& AttrBuilder::clear()
|
||
{
|
||
builder.clear();
|
||
return *this;
|
||
}
|
||
|
||
AttrBuilder& AttrBuilder::add(LLAttribute attribute)
|
||
{
|
||
// never set 'None' explicitly
|
||
if (attribute)
|
||
builder.addAttribute(attribute);
|
||
return *this;
|
||
}
|
||
|
||
AttrBuilder& AttrBuilder::remove(LLAttribute attribute)
|
||
{
|
||
// never remove 'None' explicitly
|
||
if (attribute)
|
||
builder.removeAttribute(attribute);
|
||
return *this;
|
||
}
|
||
|
||
AttrBuilder& AttrBuilder::merge(const AttrBuilder& other)
|
||
{
|
||
builder.merge(other.builder);
|
||
return *this;
|
||
}
|
||
|
||
|
||
AttrSet AttrSet::extractFunctionAndReturnAttributes(const llvm::Function* function)
|
||
{
|
||
AttrSet r;
|
||
|
||
llvm::AttributeSet old = function->getAttributes();
|
||
llvm::AttributeSet existingAttrs[] = { old.getFnAttributes(), old.getRetAttributes() };
|
||
r.set = llvm::AttributeSet::get(gIR->context(), existingAttrs);
|
||
|
||
return r;
|
||
}
|
||
|
||
AttrSet& AttrSet::add(unsigned index, const AttrBuilder& builder)
|
||
{
|
||
if (builder.hasAttributes())
|
||
{
|
||
llvm::AttributeSet as = llvm::AttributeSet::get(
|
||
gIR->context(), index, builder);
|
||
set = set.addAttributes(gIR->context(), index, as);
|
||
}
|
||
return *this;
|
||
}
|