diff options
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/nodes/parmdeclnode.h | 14 | ||||
-rw-r--r-- | src/parsers/generic.cpp | 4 | ||||
-rw-r--r-- | src/parsers/parm_decl.cpp | 54 |
4 files changed, 73 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 547a4aa..d57f088 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,6 +22,7 @@ SRC = nodes/base/cstnode.h \ parsers/identifier_node.cpp \ parsers/integer_cst.cpp \ parsers/integer_type.cpp \ + parsers/parm_decl.cpp \ parsers/parserincludes.h \ parsers/pointer_type.cpp \ parsers/result_decl.cpp \ diff --git a/src/nodes/parmdeclnode.h b/src/nodes/parmdeclnode.h index 37107dc..98b986c 100644 --- a/src/nodes/parmdeclnode.h +++ b/src/nodes/parmdeclnode.h @@ -20,10 +20,24 @@ #ifndef NODES_PARMDECLNODE_H #define NODES_PARMDECLNODE_H +#include "nodes/integercstnode.h" + #include "nodes/base/declnode.h" +#include "nodes/base/typenode.h" struct ParmDeclNode : public DeclNode { + ParmDeclNode() : + DeclNode(), + declType(nullptr), + parmSize(nullptr), + isRegister(false) + { + } + + TypeNode *declType; + IntegerCstNode *parmSize; + bool isRegister; }; #endif // NODES_PARMDECLNODE_H diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp index 9b8f1f7..bc4eb17 100644 --- a/src/parsers/generic.cpp +++ b/src/parsers/generic.cpp @@ -22,6 +22,7 @@ #include "nodes/functiondeclnode.h" #include "nodes/functiontypenode.h" #include "nodes/integertypenode.h" +#include "nodes/parmdeclnode.h" #include "nodes/pointertypenode.h" #include "nodes/voidtypenode.h" #include "nodes/typedeclnode.h" @@ -31,6 +32,7 @@ #include "parsers/parserincludes.h" parserDefine(FunctionDecl); +parserDefine(ParmDecl); parserDefine(ResultDecl); parserDefine(TypeDecl); @@ -83,6 +85,7 @@ Node *createParseNode(Node *parent, switch (TREE_CODE(gccNode)) { createNodeType(FUNCTION_DECL, FunctionDeclNode); + createNodeType(PARM_DECL, ParmDeclNode); createNodeType(RESULT_DECL, ResultDeclNode); createNodeType(TYPE_DECL, TypeDeclNode); createNodeType(FUNCTION_TYPE, FunctionTypeNode); @@ -120,6 +123,7 @@ Node *createParseNode(Node *parent, switch (TREE_CODE(node->gccNode)) { parseNodeType(FUNCTION_DECL, FunctionDecl); + parseNodeType(PARM_DECL, ParmDecl); parseNodeType(RESULT_DECL, ResultDecl); parseNodeType(TYPE_DECL, TypeDecl); parseNodeType(FUNCTION_TYPE, FunctionType); diff --git a/src/parsers/parm_decl.cpp b/src/parsers/parm_decl.cpp new file mode 100644 index 0000000..4fcbba5 --- /dev/null +++ b/src/parsers/parm_decl.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2015 Andrei Karas + * + * This file is part of AstDumper. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "parsers/parserincludes.h" + +parserDefine(ParmDecl); + +#include "parsers/base/decl.h" + +#include "nodes/parmdeclnode.h" + +namespace Generic +{ + +void parseParmDeclNode(ParmDeclNode *node) +{ + fillType(node); + fillLocation(node); + fillDeclLabel(node); + setPrintField(node, DECL_REGISTER, isRegister); + + Log::log(node); + + fillDeclAutoGenerated(node); + fillDeclAttributes(node); + + node->declType = static_cast<TypeNode*>(createParseNode( + node, + DECL_ARG_TYPE(node->gccNode), + "decl type")); + node->parmSize = static_cast<IntegerCstNode*>(createParseNode( + node, + DECL_SIZE(node->gccNode), + INTEGER_CST, + "parm size")); +} + +} |