From 6c625d640db9f992ef5fdba125659160f98ef3f7 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 17 Jun 2015 15:37:37 +0300 Subject: Improve parsing node INDIRECT_REF. --- src/analysis/expression.cpp | 4 ++-- src/nodes/ref/indirect_ref.h | 7 ++++++- 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(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 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(getRefOperand(node, 0, "ref")); } } -- cgit v1.2.3-70-g09d2