Merge pull request #2142 from joakim-hove/cache-parser-keyword

Cache parser keyword
This commit is contained in:
Joakim Hove 2020-12-01 08:11:18 +01:00 committed by GitHub
commit a242b3abfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -753,6 +753,7 @@ std::unique_ptr<RawKeyword> tryParseKeyword( ParserState& parserState, const Par
bool is_title = false; bool is_title = false;
std::unique_ptr<RawKeyword> rawKeyword; std::unique_ptr<RawKeyword> rawKeyword;
std::string_view record_buffer(str::emptystr); std::string_view record_buffer(str::emptystr);
std::optional<ParserKeyword> parserKeyword;
while( !parserState.done() ) { while( !parserState.done() ) {
auto line = parserState.getline(); auto line = parserState.getline();
@ -782,12 +783,12 @@ std::unique_ptr<RawKeyword> tryParseKeyword( ParserState& parserState, const Par
auto ptr = newRawKeyword( deck_name, parserState, parser, line ); auto ptr = newRawKeyword( deck_name, parserState, parser, line );
if (ptr) { if (ptr) {
rawKeyword.reset( ptr ); rawKeyword.reset( ptr );
const auto& parserKeyword = parser.getParserKeywordFromDeckName(rawKeyword->getKeywordName()); parserKeyword = parser.getParserKeywordFromDeckName(rawKeyword->getKeywordName());
if (deck_name == "UDT") { if (deck_name == "UDT") {
skipUDT(parserState, parser); skipUDT(parserState, parser);
return NULL; return NULL;
} }
parserState.lastSizeType = parserKeyword.getSizeType(); parserState.lastSizeType = parserKeyword->getSizeType();
parserState.lastKeyWord = deck_name; parserState.lastKeyWord = deck_name;
if (rawKeyword->isFinished()) if (rawKeyword->isFinished())
return rawKeyword; return rawKeyword;
@ -801,10 +802,8 @@ std::unique_ptr<RawKeyword> tryParseKeyword( ParserState& parserState, const Par
parserState.handleRandomText( line ); parserState.handleRandomText( line );
} }
} else { } else {
const auto& parserKeyword = parser.getParserKeywordFromDeckName(rawKeyword->getKeywordName());
if (rawKeyword->getSizeType() == Raw::CODE) { if (rawKeyword->getSizeType() == Raw::CODE) {
auto end_pos = line.find(parserKeyword.codeEnd()); auto end_pos = line.find(parserKeyword->codeEnd());
if (end_pos != std::string::npos) { if (end_pos != std::string::npos) {
std::string_view line_content = { line.begin(), end_pos}; std::string_view line_content = { line.begin(), end_pos};
record_buffer = str::update_record_buffer( record_buffer, line_content ); record_buffer = str::update_record_buffer( record_buffer, line_content );
@ -924,13 +923,9 @@ bool parseState( ParserState& parserState, const Parser& parser ) {
const auto& kwname = rawKeyword->getKeywordName(); const auto& kwname = rawKeyword->getKeywordName();
const auto& parserKeyword = parser.getParserKeywordFromDeckName( kwname ); const auto& parserKeyword = parser.getParserKeywordFromDeckName( kwname );
{ {
std::stringstream ss;
const auto& location = rawKeyword->location(); const auto& location = rawKeyword->location();
ss << std::setw(5) << parserState.deck.size() auto msg = fmt::format("{:5} Reading {:<8} in {} line {}", parserState.deck.size(), rawKeyword->getKeywordName(), location.filename, location.lineno);
<< " Reading " << std::setw(8) << std::left << rawKeyword->getKeywordName() OpmLog::info(msg);
<< " in " << location.filename << " line " << std::to_string(location.lineno);
OpmLog::info(ss.str());
} }
try { try {
if (rawKeyword->getKeywordName() == Opm::RawConsts::pyinput) { if (rawKeyword->getKeywordName() == Opm::RawConsts::pyinput) {