| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_TORQUE_LS_MESSAGE_MACROS_H_ |
| #define V8_TORQUE_LS_MESSAGE_MACROS_H_ |
| |
| namespace v8 { |
| namespace internal { |
| namespace torque { |
| namespace ls { |
| |
| #define JSON_STRING_ACCESSORS(name) \ |
| inline const std::string& name() const { \ |
| return object().at(#name).ToString(); \ |
| } \ |
| inline void set_##name(const std::string& str) { \ |
| object()[#name] = JsonValue::From(str); \ |
| } \ |
| inline bool has_##name() const { \ |
| return object().find(#name) != object().end(); \ |
| } |
| |
| #define JSON_BOOL_ACCESSORS(name) \ |
| inline bool name() const { return object().at(#name).ToBool(); } \ |
| inline void set_##name(bool b) { object()[#name] = JsonValue::From(b); } |
| |
| #define JSON_INT_ACCESSORS(name) \ |
| inline int name() const { return object().at(#name).ToNumber(); } \ |
| inline void set_##name(int n) { \ |
| object()[#name] = JsonValue::From(static_cast<double>(n)); \ |
| } |
| |
| #define JSON_OBJECT_ACCESSORS(type, name) \ |
| inline type name() { return GetObject<type>(#name); } |
| |
| #define JSON_DYNAMIC_OBJECT_ACCESSORS(name) \ |
| template <class T> \ |
| inline T name() { \ |
| return GetObject<T>(#name); \ |
| } |
| |
| #define JSON_ARRAY_OBJECT_ACCESSORS(type, name) \ |
| inline type add_##name() { \ |
| JsonObject& new_element = AddObjectElementToArrayProperty(#name); \ |
| return type(new_element); \ |
| } \ |
| inline std::size_t name##_size() { return GetArrayProperty(#name).size(); } \ |
| inline type name(size_t idx) { \ |
| CHECK(idx < name##_size()); \ |
| return type(GetArrayProperty(#name)[idx].ToObject()); \ |
| } |
| |
| } // namespace ls |
| } // namespace torque |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_TORQUE_LS_MESSAGE_MACROS_H_ |