// 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_