diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-04-11 09:54:08 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-04-11 09:54:08 +0000 |
commit | 6abd3daae16aeae4fa7e3dbec2018820887f3cff (patch) | |
tree | 1f8bbce12e650a4576bfee653908ff5bfb4f625d /tools/llvm2cpp/CppWriter.cpp | |
parent | 12f591342f69103ef86657b353b2784d56c4e0a0 (diff) |
Add support for parameter attributes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35893 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm2cpp/CppWriter.cpp')
-rw-r--r-- | tools/llvm2cpp/CppWriter.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tools/llvm2cpp/CppWriter.cpp b/tools/llvm2cpp/CppWriter.cpp index fb87b902c8..a2f02c3f20 100644 --- a/tools/llvm2cpp/CppWriter.cpp +++ b/tools/llvm2cpp/CppWriter.cpp @@ -18,6 +18,7 @@ #include "llvm/InlineAsm.h" #include "llvm/Instruction.h" #include "llvm/Instructions.h" +#include "llvm/ParameterAttributes.h" #include "llvm/Module.h" #include "llvm/TypeSymbolTable.h" #include "llvm/ADT/StringExtras.h" @@ -457,6 +458,29 @@ CppWriter::printTypeInternal(const Type* Ty) { Out << ");"; nl(Out); } + const ParamAttrsList *PAL = FT->getParamAttrs(); + Out << "ParamAttrsList *" << typeName << "_PAL = 0;"; + if (PAL && !PAL->empty()) { + Out << typeName << "_PAL = new ParamAttrsList();"; + for (unsigned i = 0; i < PAL->size(); ++i) { + uint16_t index = PAL->getParamIndex(i); + uint16_t attrs = PAL->getParamAttrs(index); + Out << typeName << "_PAL->addAttribute(" << index << ", 0"; + if (attrs & ParamAttr::SExt) + Out << " | ParamAttr::SExt"; + if (attrs & ParamAttr::ZExt) + Out << " | ParamAttr::ZExt"; + if (attrs & ParamAttr::StructRet) + Out << " | ParamAttr::StructRet"; + if (attrs & ParamAttr::InReg) + Out << " | ParamAttr::InReg"; + if (attrs & ParamAttr::NoReturn) + Out << " | ParamAttr::NoReturn"; + if (attrs & ParamAttr::NoUnwind) + Out << " | ParamAttr::NoUnwind"; + Out << ");"; + } + } bool isForward = printTypeInternal(FT->getReturnType()); std::string retTypeName(getCppName(FT->getReturnType())); Out << "FunctionType* " << typeName << " = FunctionType::get("; @@ -465,7 +489,8 @@ CppWriter::printTypeInternal(const Type* Ty) { Out << "_fwd"; Out << ","; nl(Out) << "/*Params=*/" << typeName << "_args,"; - nl(Out) << "/*isVarArg=*/" << (FT->isVarArg() ? "true" : "false") << ");"; + nl(Out) << "/*isVarArg=*/" << (FT->isVarArg() ? "true" : "false") ; + nl(Out) << "/*ParamAttrs=/" << typeName << "_PAL" << ");"; out(); nl(Out); break; |