diff options
Diffstat (limited to 'source/compiler-core/slang-json-parser.cpp')
| -rw-r--r-- | source/compiler-core/slang-json-parser.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/source/compiler-core/slang-json-parser.cpp b/source/compiler-core/slang-json-parser.cpp index a38afc418..fe9a0f580 100644 --- a/source/compiler-core/slang-json-parser.cpp +++ b/source/compiler-core/slang-json-parser.cpp @@ -32,7 +32,7 @@ SlangResult JSONParser::_parseObject() { JSONToken keyToken; SLANG_RETURN_ON_FAIL(m_lexer->expect(JSONTokenType::StringLiteral, keyToken)); - m_listener->addKey(m_lexer->getLexeme(keyToken), keyToken.loc); + m_listener->addQuotedKey(m_lexer->getLexeme(keyToken), keyToken.loc); SLANG_RETURN_ON_FAIL(m_lexer->expect(JSONTokenType::Colon)); @@ -345,18 +345,39 @@ void JSONWriter::endArray(SourceLoc loc) m_stack.removeLast(); } -void JSONWriter::addKey(const UnownedStringSlice& key, SourceLoc loc) +void JSONWriter::addUnquotedKey(const UnownedStringSlice& key, SourceLoc loc) { SLANG_UNUSED(loc); SLANG_ASSERT(m_state.m_kind == State::Kind::Object && (m_state.m_flags & State::Flag::HasKey) == 0); _maybeEmitFieldComma(); + _maybeEmitIndent(); + + // Output the key quoted + StringEscapeHandler* handler = StringEscapeUtil::getHandler(StringEscapeUtil::Style::JSON); + StringEscapeUtil::appendQuoted(handler, key, m_builder); + + m_builder << " : "; + + m_state.m_flags |= State::Flag::HasKey; + // We don't want it to emit a , after the : + m_state.m_flags &= ~State::Flag::HasPrevious; +} + +void JSONWriter::addQuotedKey(const UnownedStringSlice& key, SourceLoc loc) +{ + SLANG_UNUSED(loc); + SLANG_ASSERT(m_state.m_kind == State::Kind::Object && (m_state.m_flags & State::Flag::HasKey) == 0); // It should be quoted SLANG_ASSERT(key.getLength() >= 2 && key[0] == '"' && key[key.getLength() - 1] == '"'); + _maybeEmitFieldComma(); _maybeEmitIndent(); - m_builder << key << " : "; + + m_builder << key; + + m_builder << " : "; m_state.m_flags |= State::Flag::HasKey; // We don't want it to emit a , after the : |
