diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-07 17:34:43 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-07 17:34:43 +0300 |
commit | 9e2788dc573872d3096913f041a068ba3428b882 (patch) | |
tree | c1736d17c3498891bac2314cbe86518d1478e3cf /src/parsers/generic.cpp | |
parent | bee3f1689aec015e3d1403f094bc4a6b109e1856 (diff) | |
download | paranucker-9e2788dc573872d3096913f041a068ba3428b882.tar.gz paranucker-9e2788dc573872d3096913f041a068ba3428b882.tar.bz2 paranucker-9e2788dc573872d3096913f041a068ba3428b882.tar.xz paranucker-9e2788dc573872d3096913f041a068ba3428b882.zip |
Not allow return wrong node type after node creation.
Diffstat (limited to 'src/parsers/generic.cpp')
-rw-r--r-- | src/parsers/generic.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp index a296e58..c2b02ca 100644 --- a/src/parsers/generic.cpp +++ b/src/parsers/generic.cpp @@ -82,19 +82,8 @@ Node *createParseNode(Node *parent, node->tag = tag; } - switch (TREE_CODE(node->gccNode)) - { -#undef handleNodeType -#define handleNodeType(code, type) \ - case code: \ - parse##type##Node(static_cast<type##Node*>(node)); \ - break; -#include "includes/nodeshandling.inc" - default: - break; - } if (wantType != ERROR_MARK && - node->nodeType != get_tree_code_name(wantType)) + TREE_CODE(node->gccNode) != wantType) { if (tag.empty()) { @@ -111,6 +100,19 @@ Node *createParseNode(Node *parent, node->nodeType.c_str(), tag.c_str()); } + return nullptr; + } + + switch (TREE_CODE(node->gccNode)) + { +#undef handleNodeType +#define handleNodeType(code, type) \ + case code: \ + parse##type##Node(static_cast<type##Node*>(node)); \ + break; +#include "includes/nodeshandling.inc" + default: + break; } } return node; |