"vscode:/vscode.git/clone" did not exist on "71eaf8969b82faebb6f74beab0e652627f0e1068"
Commit 3405a6fe authored by Jesse Beder's avatar Jesse Beder
Browse files

Refactored the compact map notation, which made it easy to implement explicit keys for compact maps

parent d372729b
......@@ -65,7 +65,7 @@ namespace YAML
switch(pScanner->peek().type) {
case Token::BLOCK_MAP_START: ParseBlock(pScanner, state); break;
case Token::FLOW_MAP_START: ParseFlow(pScanner, state); break;
case Token::FLOW_MAP_COMPACT: ParseCompact(pScanner, state); break;
case Token::KEY: ParseCompact(pScanner, state); break;
case Token::VALUE: ParseCompactWithNoKey(pScanner, state); break;
default: break;
}
......@@ -151,23 +151,14 @@ namespace YAML
}
// ParseCompact
// . Single key: value pair in a flow sequence
// . Single "key: value" pair in a flow sequence
void Map::ParseCompact(Scanner *pScanner, const ParserState& state)
{
// eat start token
pScanner->pop();
if(pScanner->empty())
throw ParserException(Mark::null(), ErrorMsg::END_OF_MAP_FLOW);
Token& token = pScanner->peek();
std::auto_ptr <Node> pKey(new Node), pValue(new Node);
// grab key (if non-null)
if(token.type == Token::KEY) {
pScanner->pop();
pKey->Parse(pScanner, state);
}
// grab key
pScanner->pop();
pKey->Parse(pScanner, state);
// now grab value (optional)
if(!pScanner->empty() && pScanner->peek().type == Token::VALUE) {
......@@ -180,7 +171,7 @@ namespace YAML
}
// ParseCompactWithNoKey
// . Single key: value pair in a flow sequence
// . Single ": value" pair in a flow sequence
void Map::ParseCompactWithNoKey(Scanner *pScanner, const ParserState& state)
{
std::auto_ptr <Node> pKey(new Node), pValue(new Node);
......
......@@ -104,7 +104,7 @@ namespace YAML
break;
case Token::FLOW_MAP_START:
case Token::BLOCK_MAP_START:
case Token::FLOW_MAP_COMPACT:
case Token::KEY:
m_pContent = new Map;
break;
default:
......
......@@ -72,9 +72,6 @@ namespace YAML
key.pMapStart = key.pIndent->pStartToken;
key.pMapStart->status = Token::UNVERIFIED;
}
} else if(m_flows.top() == FLOW_SEQ) {
key.pMapStart = PushToken(Token::FLOW_MAP_COMPACT);
key.pMapStart->status = Token::UNVERIFIED;
}
// then add the (now unverified) key
......
......@@ -1781,7 +1781,7 @@ namespace Test {
PARSE(doc, input);
YAML_ASSERT(doc.size() == 1);
YAML_ASSERT(doc[0].size() == 1);
YAML_ASSERT(doc[0]["foo"] == "bar");
YAML_ASSERT(doc[0]["foo bar"] == "baz");
return true;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment