diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-17 10:52:18 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-17 10:52:18 +0000 |
commit | 355094ef06a3d47f0600e85744f6e995706b12d3 (patch) | |
tree | 7c1dca82960f9eb1a22f3a8505c9f527c5dc94b4 /clang/lib/Parse/RAIIObjectsForParser.h | |
parent | fa533e7652fc3d41f9ccb4499ddee4deeb81a298 (diff) | |
download | bcm5719-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.h | 17 |
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 |