From fe935c717e79e2f696ad17839ae59b32a222397f Mon Sep 17 00:00:00 2001 From: cxl Date: Thu, 18 Sep 2008 17:30:10 +0000 Subject: [PATCH] One more improvement of C++ parser... git-svn-id: svn://ultimatepp.org/upp/trunk@455 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CppBase/Parser.cpp | 15 ++++++++------- uppsrc/CppBase/Pre.cpp | 8 ++++++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/uppsrc/CppBase/Parser.cpp b/uppsrc/CppBase/Parser.cpp index b4214f9e4..2a3bb1394 100644 --- a/uppsrc/CppBase/Parser.cpp +++ b/uppsrc/CppBase/Parser.cpp @@ -1382,13 +1382,6 @@ void Parser::Do(Stream& in, const Vector& ignore, CppBase& _base, const file = PreProcess(in); lex.Init(~file.text, ignore); err = _err; - current_nest = "::"; - context.access = PUBLIC; - context.noclass = true; - context.typenames.Clear(); - for(int i = 0; i < typenames.GetCount(); i++) - context.typenames.Add(lex.Id(typenames[i])); - context.namespacel = 0; inbody = false; filei = GetCppFileIndex(fn); lpos = 0; @@ -1399,6 +1392,14 @@ void Parser::Do(Stream& in, const Vector& ignore, CppBase& _base, const while(lex != t_eof) try { try { + current_nest = "::"; + context.access = PUBLIC; + context.noclass = true; + context.typenames.Clear(); + context.tparam.Clear(); + for(int i = 0; i < typenames.GetCount(); i++) + context.typenames.Add(lex.Id(typenames[i])); + context.namespacel = 0; Do(); } catch(Error) { diff --git a/uppsrc/CppBase/Pre.cpp b/uppsrc/CppBase/Pre.cpp index 4829d2953..6d8456133 100644 --- a/uppsrc/CppBase/Pre.cpp +++ b/uppsrc/CppBase/Pre.cpp @@ -73,8 +73,12 @@ SrcFile PreProcess(Stream& in) SLPos(res); } const char *rm = ln; - if(IsAlNum(*rm)) - res.text << '\2'; + if(IsAlNum(*rm)) { + const char *s = ln.Last(); + while(s > rm && *s == ' ') s--; + if(*s != ':') + res.text << '\2'; + } while(*rm == ' ' || *rm == '\t') rm++; if(*rm == '\0') res.blankLinesRemoved++;