1 // Copyright 2019 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_TORQUE_LS_MESSAGE_MACROS_H_ 6 #define V8_TORQUE_LS_MESSAGE_MACROS_H_ 7 8 namespace v8 { 9 namespace internal { 10 namespace torque { 11 namespace ls { 12 13 #define JSON_STRING_ACCESSORS(name) \ 14 inline const std::string& name() const { \ 15 return object().at(#name).ToString(); \ 16 } \ 17 inline void set_##name(const std::string& str) { \ 18 object()[#name] = JsonValue::From(str); \ 19 } \ 20 inline bool has_##name() const { \ 21 return object().find(#name) != object().end(); \ 22 } 23 24 #define JSON_BOOL_ACCESSORS(name) \ 25 inline bool name() const { return object().at(#name).ToBool(); } \ 26 inline void set_##name(bool b) { object()[#name] = JsonValue::From(b); } 27 28 #define JSON_INT_ACCESSORS(name) \ 29 inline int name() const { return object().at(#name).ToNumber(); } \ 30 inline void set_##name(int n) { \ 31 object()[#name] = JsonValue::From(static_cast<double>(n)); \ 32 } 33 34 #define JSON_OBJECT_ACCESSORS(type, name) \ 35 inline type name() { return GetObject<type>(#name); } 36 37 #define JSON_DYNAMIC_OBJECT_ACCESSORS(name) \ 38 template <class T> \ 39 inline T name() { \ 40 return GetObject<T>(#name); \ 41 } 42 43 #define JSON_ARRAY_OBJECT_ACCESSORS(type, name) \ 44 inline type add_##name() { \ 45 JsonObject& new_element = AddObjectElementToArrayProperty(#name); \ 46 return type(new_element); \ 47 } \ 48 inline std::size_t name##_size() { return GetArrayProperty(#name).size(); } \ 49 inline type name(size_t idx) { \ 50 CHECK(idx < name##_size()); \ 51 return type(GetArrayProperty(#name)[idx].ToObject()); \ 52 } 53 54 } // namespace ls 55 } // namespace torque 56 } // namespace internal 57 } // namespace v8 58 59 #endif // V8_TORQUE_LS_MESSAGE_MACROS_H_ 60