summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/RAIIObjectsForParser.h
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-17 10:52:18 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-17 10:52:18 +0000
commit355094ef06a3d47f0600e85744f6e995706b12d3 (patch)
tree7c1dca82960f9eb1a22f3a8505c9f527c5dc94b4 /clang/lib/Parse/RAIIObjectsForParser.h
parentfa533e7652fc3d41f9ccb4499ddee4deeb81a298 (diff)
downloadbcm5719-llvm-355094ef06a3d47f0600e85744f6e995706b12d3.tar.gz
bcm5719-llvm-355094ef06a3d47f0600e85744f6e995706b12d3.zip
Make sure parens/braces/brackets are correctly balanced.
In a line like: (; the semicolon leaves Parser:ParenCount unbalanced (it's 1 even though we stopped looking for a right paren). This may affect later parsing and result in bad recovery for parsing errors. llvm-svn: 106213
Diffstat (limited to 'clang/lib/Parse/RAIIObjectsForParser.h')
-rw-r--r--clang/lib/Parse/RAIIObjectsForParser.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Parse/RAIIObjectsForParser.h b/clang/lib/Parse/RAIIObjectsForParser.h
index 06bbbc23a01..addc7950839 100644
--- a/clang/lib/Parse/RAIIObjectsForParser.h
+++ b/clang/lib/Parse/RAIIObjectsForParser.h
@@ -80,6 +80,23 @@ namespace clang {
}
};
+ /// \brief RAII object that makes sure paren/bracket/brace count is correct
+ /// after declaration/statement parsing, even when there's a parsing error.
+ class ParenBraceBracketBalancer {
+ Parser &P;
+ unsigned short ParenCount, BracketCount, BraceCount;
+ public:
+ ParenBraceBracketBalancer(Parser &p)
+ : P(p), ParenCount(p.ParenCount), BracketCount(p.BracketCount),
+ BraceCount(p.BraceCount) { }
+
+ ~ParenBraceBracketBalancer() {
+ P.ParenCount = ParenCount;
+ P.BracketCount = BracketCount;
+ P.BraceCount = BraceCount;
+ }
+ };
+
} // end namespace clang
#endif
OpenPOWER on IntegriCloud