diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-17 15:37:37 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-17 16:01:48 +0300 |
commit | 6c625d640db9f992ef5fdba125659160f98ef3f7 (patch) | |
tree | 202528345d2470df21f816da10773449836afdb5 | |
parent | 1f1474467559eb934d60839f13dd90c4a1fff829 (diff) | |
download | paranucker-6c625d640db9f992ef5fdba125659160f98ef3f7.tar.gz paranucker-6c625d640db9f992ef5fdba125659160f98ef3f7.tar.bz2 paranucker-6c625d640db9f992ef5fdba125659160f98ef3f7.tar.xz paranucker-6c625d640db9f992ef5fdba125659160f98ef3f7.zip |
Improve parsing node INDIRECT_REF.
-rw-r--r-- | src/analysis/expression.cpp | 4 | ||||
-rw-r--r-- | src/nodes/ref/indirect_ref.h | 7 | ||||
-rw-r--r-- | src/parsers/ref/indirect_ref.cpp | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 8185419..d3fbf73 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -49,9 +49,9 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo) { IndirectRefNode *refNode = static_cast<IndirectRefNode*>(arg); // need atleast one arg for check - if (refNode->args.empty()) + if (refNode->ref == nullptr) return; - arg = refNode->args[0]; + arg = refNode->ref; if (arg->nodeType == PARM_DECL) { if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) diff --git a/src/nodes/ref/indirect_ref.h b/src/nodes/ref/indirect_ref.h index 18f8321..2173ca7 100644 --- a/src/nodes/ref/indirect_ref.h +++ b/src/nodes/ref/indirect_ref.h @@ -22,14 +22,19 @@ #include "nodes/base/ref.h" +#include "nodes/base/decl.h" + #include <string> struct IndirectRefNode : public RefNode { IndirectRefNode() : - RefNode() + RefNode(), + ref(nullptr) { } + + DeclNode *ref; }; #endif // NODES_REF_INDIRECTREFNODE_H diff --git a/src/parsers/ref/indirect_ref.cpp b/src/parsers/ref/indirect_ref.cpp index d4ef67b..cc93217 100644 --- a/src/parsers/ref/indirect_ref.cpp +++ b/src/parsers/ref/indirect_ref.cpp @@ -37,7 +37,7 @@ void parseIndirectRefNode(IndirectRefNode *node) // if (!node->parseChilds) // return; - fillRefOperands(node); + node->ref = static_cast<DeclNode*>(getRefOperand(node, 0, "ref")); } } |