|
|
@@ -27,6 +27,10 @@ BBBParser::Operator BBBParser::readOperator() { |
|
|
|
skip(); // '+' |
|
|
|
skip(); // '=' |
|
|
|
return Operator::PLUS_EQUALS; |
|
|
|
} else if (peek() == '=' && ch2 == '+') { |
|
|
|
skip(); // '=' |
|
|
|
skip(); // '+' |
|
|
|
return Operator::EQUALS_PLUS; |
|
|
|
} |
|
|
|
|
|
|
|
return Operator::NONE; |
|
|
@@ -41,7 +45,7 @@ void BBBParser::skip(char expected) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void BBBParser::error(std::string msg) { |
|
|
|
[[noreturn]] void BBBParser::error(std::string msg) { |
|
|
|
throw BBBParseError(std::to_string(line_) + ":" + std::to_string(ch_) + ": " + msg); |
|
|
|
} |
|
|
|
|
|
|
@@ -277,6 +281,7 @@ void BBBParser::parse(Variables &vars) { |
|
|
|
vars[key] = std::move(values); |
|
|
|
values.clear(); |
|
|
|
break; |
|
|
|
|
|
|
|
case Operator::PLUS_EQUALS: |
|
|
|
{ |
|
|
|
auto &vec = vars[key]; |
|
|
@@ -287,6 +292,19 @@ void BBBParser::parse(Variables &vars) { |
|
|
|
} |
|
|
|
values.clear(); |
|
|
|
break; |
|
|
|
|
|
|
|
case Operator::EQUALS_PLUS: |
|
|
|
{ |
|
|
|
auto &vec = vars[key]; |
|
|
|
vec.reserve(vec.size() + values.size()); |
|
|
|
for (size_t i = 0; i < vec.size(); ++i) { |
|
|
|
values.push_back(std::move(vec[i])); |
|
|
|
} |
|
|
|
vec = std::move(values); |
|
|
|
} |
|
|
|
values.clear(); |
|
|
|
break; |
|
|
|
|
|
|
|
case Operator::NONE: |
|
|
|
break; |
|
|
|
} |