Make ConfigCompiler#m_LexBuffer a String

... to reduce malloc()s.
This commit is contained in:
Alexander A. Klimov 2020-01-21 13:38:59 +01:00
parent 18eb06e334
commit 530d84ae3b
2 changed files with 18 additions and 18 deletions

View File

@ -4,6 +4,7 @@
#include "config/configcompiler.hpp" #include "config/configcompiler.hpp"
#include "config/expression.hpp" #include "config/expression.hpp"
#include "base/exception.hpp" #include "base/exception.hpp"
#include <utility>
using namespace icinga; using namespace icinga;
@ -40,8 +41,7 @@ do { \
%% %%
\" { \" {
yyextra->m_LexBuffer.str(""); yyextra->m_LexBuffer.Clear();
yyextra->m_LexBuffer.clear();
yyextra->m_LocationBegin = *yylloc; yyextra->m_LocationBegin = *yylloc;
@ -54,7 +54,7 @@ do { \
yylloc->FirstLine = yyextra->m_LocationBegin.FirstLine; yylloc->FirstLine = yyextra->m_LocationBegin.FirstLine;
yylloc->FirstColumn = yyextra->m_LocationBegin.FirstColumn; yylloc->FirstColumn = yyextra->m_LocationBegin.FirstColumn;
yylval->text = new String(yyextra->m_LexBuffer.str()); yylval->text = new String(std::move(yyextra->m_LexBuffer));
return T_STRING; return T_STRING;
} }
@ -74,7 +74,7 @@ do { \
BOOST_THROW_EXCEPTION(ScriptError("Constant is out of bounds: " + String(yytext), *yylloc)); BOOST_THROW_EXCEPTION(ScriptError("Constant is out of bounds: " + String(yytext), *yylloc));
} }
yyextra->m_LexBuffer << static_cast<char>(result); yyextra->m_LexBuffer += static_cast<char>(result);
} }
<STRING>\\[0-9]+ { <STRING>\\[0-9]+ {
@ -83,14 +83,14 @@ do { \
*/ */
BOOST_THROW_EXCEPTION(ScriptError("Bad escape sequence found: " + String(yytext), *yylloc)); BOOST_THROW_EXCEPTION(ScriptError("Bad escape sequence found: " + String(yytext), *yylloc));
} }
<STRING>\\n { yyextra->m_LexBuffer << "\n"; } <STRING>\\n { yyextra->m_LexBuffer += '\n'; }
<STRING>\\\\ { yyextra->m_LexBuffer << "\\"; } <STRING>\\\\ { yyextra->m_LexBuffer += '\\'; }
<STRING>\\\" { yyextra->m_LexBuffer << "\""; } <STRING>\\\" { yyextra->m_LexBuffer += '"'; }
<STRING>\\t { yyextra->m_LexBuffer << "\t"; } <STRING>\\t { yyextra->m_LexBuffer += '\t'; }
<STRING>\\r { yyextra->m_LexBuffer << "\r"; } <STRING>\\r { yyextra->m_LexBuffer += '\r'; }
<STRING>\\b { yyextra->m_LexBuffer << "\b"; } <STRING>\\b { yyextra->m_LexBuffer += '\b'; }
<STRING>\\f { yyextra->m_LexBuffer << "\f"; } <STRING>\\f { yyextra->m_LexBuffer += '\f'; }
<STRING>\\\n { yyextra->m_LexBuffer << yytext[1]; } <STRING>\\\n { yyextra->m_LexBuffer += yytext[1]; }
<STRING>\\. { <STRING>\\. {
BOOST_THROW_EXCEPTION(ScriptError("Bad escape sequence found: " + String(yytext), *yylloc)); BOOST_THROW_EXCEPTION(ScriptError("Bad escape sequence found: " + String(yytext), *yylloc));
} }
@ -99,7 +99,7 @@ do { \
char *yptr = yytext; char *yptr = yytext;
while (*yptr) while (*yptr)
yyextra->m_LexBuffer << *yptr++; yyextra->m_LexBuffer += *yptr++;
} }
<STRING><<EOF>> { <STRING><<EOF>> {
@ -107,8 +107,7 @@ do { \
} }
\{\{\{ { \{\{\{ {
yyextra->m_LexBuffer.str(""); yyextra->m_LexBuffer.Clear();
yyextra->m_LexBuffer.clear();
yyextra->m_LocationBegin = *yylloc; yyextra->m_LocationBegin = *yylloc;
@ -125,12 +124,12 @@ do { \
yylloc->FirstLine = yyextra->m_LocationBegin.FirstLine; yylloc->FirstLine = yyextra->m_LocationBegin.FirstLine;
yylloc->FirstColumn = yyextra->m_LocationBegin.FirstColumn; yylloc->FirstColumn = yyextra->m_LocationBegin.FirstColumn;
yylval->text = new String(yyextra->m_LexBuffer.str()); yylval->text = new String(std::move(yyextra->m_LexBuffer));
return T_STRING; return T_STRING;
} }
<HEREDOC>(.|\n) { yyextra->m_LexBuffer << yytext[0]; } <HEREDOC>(.|\n) { yyextra->m_LexBuffer += yytext[0]; }
<INITIAL>{ <INITIAL>{
"/*" BEGIN(C_COMMENT); "/*" BEGIN(C_COMMENT);

View File

@ -9,6 +9,7 @@
#include "base/registry.hpp" #include "base/registry.hpp"
#include "base/initialize.hpp" #include "base/initialize.hpp"
#include "base/singleton.hpp" #include "base/singleton.hpp"
#include "base/string.hpp"
#include <future> #include <future>
#include <iostream> #include <iostream>
#include <stack> #include <stack>
@ -139,7 +140,7 @@ public:
bool m_Eof; bool m_Eof;
int m_OpenBraces; int m_OpenBraces;
std::ostringstream m_LexBuffer; String m_LexBuffer;
CompilerDebugInfo m_LocationBegin; CompilerDebugInfo m_LocationBegin;
std::stack<bool> m_IgnoreNewlines; std::stack<bool> m_IgnoreNewlines;