Sizov Nikita b597e5429f Fix JSON ide helper
Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/I8I1SX?from=project-issue

Testing: gtest

Signed-off-by: Sizov Nikita <sizov.nikita@huawei.com>
2023-11-23 15:01:40 +03:00

87 lines
2.2 KiB
C++

/**
* Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ASSEMBLER_IDE_HELPERS_H
#define ASSEMBLER_IDE_HELPERS_H
#include <sstream>
namespace panda::pandasm {
struct SourcePosition {
size_t line = 0;
size_t column = 0;
std::string JsonSerialize() const
{
std::stringstream ss;
ss << "{ "
<< "\"line\": " << line << ", "
<< "\"column\": " << column << " }";
return ss.str();
}
};
struct SourceLocation {
SourcePosition begin;
SourcePosition end;
std::string JsonSerialize() const
{
std::stringstream ss;
ss << "{ "
<< "\"begin\": " << begin.JsonSerialize() << ", "
<< "\"end\": " << end.JsonSerialize() << " }";
return ss.str();
}
};
template <typename T>
std::string JsonSerializeItemBody(const T &item)
{
std::stringstream ss;
std::string quoted_name = "\"" + item.name + "\"";
ss << "{ "
<< "\"name\": " << quoted_name;
if (item.file_location && item.file_location->is_defined) {
ss << ", "
<< "\"bodyLocation\": " << item.body_location.JsonSerialize() << " }";
} else {
ss << " }";
}
return ss.str();
}
template <typename T>
std::string JsonSerializeProgramItems(const T &item_table)
{
std::stringstream ss;
ss << "[ ";
auto it = item_table.begin();
if (it != item_table.end()) {
ss << JsonSerializeItemBody(it->second);
++it;
}
while (it != item_table.end()) {
ss << ", " << JsonSerializeItemBody(it->second);
++it;
}
ss << " ]";
return ss.str();
}
} // namespace panda::pandasm
#endif // ASSEMBLER_IDE_HELPERS_H