retdec
ms_ast_ctypes_parser.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_MS_AST_CTYPES_PARSER_H
8 #define RETDEC_MS_AST_CTYPES_PARSER_H
9 
10 #include <llvm/Demangle/MicrosoftDemangleNodes.h>
11 
13 
14 namespace retdec {
15 namespace demangler {
16 
17 /*
18  * @brief Parser for AST created in Microsoft demangler to ctypes parsers.
19  */
21 {
22 public:
23  MsToCtypesParser() = default;
24 
25  std::shared_ptr<ctypes::Function> parseAsFunction(
26  const std::string &mangledName,
27  llvm::ms_demangle::SymbolNode *ast,
28  std::unique_ptr<ctypes::Module> &module,
29  const TypeWidths &typeWidths = {},
30  const TypeSignedness &typeSignedness = {},
31  unsigned defaultBitWidth = 0);
32 
33 private:
34  std::shared_ptr<ctypes::Function> parseFunction(
35  const std::string &mangledName,
36  llvm::ms_demangle::FunctionSymbolNode *functionSymbolNode);
37 
39  llvm::ms_demangle::CallingConv callConv);
40 
41  std::shared_ptr<ctypes::Type> parseType(
42  llvm::ms_demangle::Node *typeNode);
43 
44  std::shared_ptr<ctypes::Type> parseArrayType(
45  llvm::ms_demangle::ArrayTypeNode *typeNode);
46 
47  std::shared_ptr<ctypes::Type> parsePrimitiveType(
48  llvm::ms_demangle::PrimitiveTypeNode *primitiveTypeNode);
49 
50  std::shared_ptr<ctypes::IntegralType> parseIntegralType(
51  llvm::ms_demangle::PrimitiveTypeNode *integralTypeNode);
52 
53  std::shared_ptr<ctypes::FloatingPointType> parseFloatingPointType(
54  llvm::ms_demangle::PrimitiveTypeNode *floatingPointTypeNode);
55 
57  llvm::ms_demangle::NodeArrayNode *parameters);
58 
59  std::shared_ptr<ctypes::Type> parsePointerType(
60  llvm::ms_demangle::PointerTypeNode *typeNode);
61 
62  std::shared_ptr<ctypes::Type> parseNamedType(
63  llvm::ms_demangle::Node *node);
64 
65  std::shared_ptr<ctypes::FunctionType> parseFuncType(
66  llvm::ms_demangle::FunctionSignatureNode *funcSignature);
67 
69  llvm::ms_demangle::NodeArrayNode *parameters);
70 
71  std::string getTypeName(llvm::ms_demangle::PrimitiveKind type) const;
72 };
73 
74 } // namespace demangler
75 } // namespace retdec
76 
77 #endif //RETDEC_MS_AST_CTYPES_PARSER_H
Base class for all AST to ctypes parsers.
A representation of a C call convention.
Definition: call_convention.h:19
std::vector< std::shared_ptr< Type > > Parameters
Definition: function_type.h:28
std::vector< Parameter > Parameters
Definition: function.h:32
std::map< std::string, ctypes::IntegralType::Signess > TypeSignedness
Set container for C-types' signedness.
Definition: ctypes_parser.h:30
unsigned defaultBitWidth
Bitwidth used for types not in typeWidths.
Definition: ctypes_parser.h:47
std::map< std::string, unsigned > TypeWidths
Set container for C-types' bit width.
Definition: ctypes_parser.h:28
TypeSignedness typeSignedness
C-types' signedness.
Definition: ctypes_parser.h:45
TypeWidths typeWidths
C-types' bit widths.
Definition: ctypes_parser.h:43
Definition: ast_ctypes_parser.h:18
Definition: ms_ast_ctypes_parser.h:21
std::shared_ptr< ctypes::Type > parsePointerType(llvm::ms_demangle::PointerTypeNode *typeNode)
Definition: ms_ast_ctypes_parser.cpp:265
ctypes::FunctionType::Parameters parseFuncTypeParameters(llvm::ms_demangle::NodeArrayNode *parameters)
Definition: ms_ast_ctypes_parser.cpp:344
std::string getTypeName(llvm::ms_demangle::PrimitiveKind type) const
Definition: ms_ast_ctypes_parser.cpp:305
std::shared_ptr< ctypes::FloatingPointType > parseFloatingPointType(llvm::ms_demangle::PrimitiveTypeNode *floatingPointTypeNode)
Definition: ms_ast_ctypes_parser.cpp:231
ctypes::CallConvention parseCallConvention(llvm::ms_demangle::CallingConv callConv)
Definition: ms_ast_ctypes_parser.cpp:105
std::shared_ptr< ctypes::FunctionType > parseFuncType(llvm::ms_demangle::FunctionSignatureNode *funcSignature)
Definition: ms_ast_ctypes_parser.cpp:333
std::shared_ptr< ctypes::Type > parseType(llvm::ms_demangle::Node *typeNode)
Definition: ms_ast_ctypes_parser.cpp:134
ctypes::Function::Parameters parseFunctionParameters(llvm::ms_demangle::NodeArrayNode *parameters)
Definition: ms_ast_ctypes_parser.cpp:242
std::shared_ptr< ctypes::Function > parseFunction(const std::string &mangledName, llvm::ms_demangle::FunctionSymbolNode *functionSymbolNode)
Definition: ms_ast_ctypes_parser.cpp:81
std::shared_ptr< ctypes::Type > parseNamedType(llvm::ms_demangle::Node *node)
Definition: ms_ast_ctypes_parser.cpp:294
std::shared_ptr< ctypes::Type > parseArrayType(llvm::ms_demangle::ArrayTypeNode *typeNode)
Definition: ms_ast_ctypes_parser.cpp:161
std::shared_ptr< ctypes::Function > parseAsFunction(const std::string &mangledName, llvm::ms_demangle::SymbolNode *ast, std::unique_ptr< ctypes::Module > &module, const TypeWidths &typeWidths={}, const TypeSignedness &typeSignedness={}, unsigned defaultBitWidth=0)
Definition: ms_ast_ctypes_parser.cpp:54
std::shared_ptr< ctypes::Type > parsePrimitiveType(llvm::ms_demangle::PrimitiveTypeNode *primitiveTypeNode)
Definition: ms_ast_ctypes_parser.cpp:183
std::shared_ptr< ctypes::IntegralType > parseIntegralType(llvm::ms_demangle::PrimitiveTypeNode *integralTypeNode)
Definition: ms_ast_ctypes_parser.cpp:219
ShPtr< Module > module
The current module.
Definition: hll_writer.cpp:100
Definition: archive_wrapper.h:19