24#include "label-text.h"
125template <
typename Traits>
129 :
m_key (label_text::borrow (key))
132 explicit property (
const char *key_prefix,
const char *key)
133 :
m_key (label_text::take (concat (key_prefix, key, nullptr)))
145template <
typename EnumType>
155template <
typename EnumType>
166 virtual std::unique_ptr<value>
clone ()
const = 0;
168 void dump (FILE *,
bool formatted)
const;
200 std::unique_ptr<value>
clone () const
final override;
206 void set (
const char *key,
value *v);
216 template <
typename JsonType>
217 void set (
const char *key, std::unique_ptr<JsonType> v)
219 set (key, v.release ());
225 void set_string (
const char *key,
const char *utf8_value);
227 void set_float (
const char *key,
double v);
230 void set_bool (
const char *key,
bool v);
237 std::unique_ptr<json::array>
value);
238 template <
typename EnumType>
240 EnumType &out)
const;
241 template <
typename EnumType>
268 std::unique_ptr<value>
clone () const
final override;
283 template <
typename JsonType>
284 void append (std::unique_ptr<JsonType> v)
312 std::unique_ptr<value>
clone () const
final override;
329 std::unique_ptr<value>
clone () const
final override;
345 explicit string (
const char *utf8);
346 string (
const char *utf8,
size_t len);
351 std::unique_ptr<value>
clone () const
final override;
375 std::unique_ptr<value>
clone () const
final override;
382template <typename EnumType>
388 if (
string *jstr = jv->dyn_cast_string ())
390 if (enum_traits<EnumType>::maybe_get_value_from_string
391 (jstr->get_string (), out))
397template <
typename EnumType>
531extern void assert_print_eq (
const location &loc,
534 const char *expected_json);
value ** end()
Definition json.h:293
enum kind get_kind() const final override
Definition json.h:266
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:527
auto_vec< value * > m_elements
Definition json.h:300
void append_string(const char *utf8_value)
Definition json.cc:576
array * dyn_cast_array() final override
Definition json.h:270
const value *const * end() const
Definition json.h:295
~array()
Definition json.cc:516
size_t size() const
Definition json.h:289
value ** begin()
Definition json.h:292
value * operator[](size_t i) const
Definition json.h:290
size_t length() const
Definition json.h:296
std::unique_ptr< value > clone() const final override
Definition json.cc:555
value * get(size_t idx) const
Definition json.h:297
const value *const * begin() const
Definition json.h:294
void append(value *v)
Definition json.cc:568
void append(std::unique_ptr< JsonType > v)
Definition json.h:284
enum kind get_kind() const final override
Definition json.h:310
float_number(double value)
Definition json.h:308
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:587
std::unique_ptr< value > clone() const final override
Definition json.cc:596
double get() const
Definition json.h:314
double m_value
Definition json.h:317
long m_value
Definition json.h:336
enum kind get_kind() const final override
Definition json.h:327
integer_number(long value)
Definition json.h:325
long get() const
Definition json.h:333
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:606
std::unique_ptr< value > clone() const final override
Definition json.cc:615
integer_number * dyn_cast_integer_number() final override
Definition json.h:331
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:660
literal(bool value)
Definition json.h:371
enum kind m_kind
Definition json.h:378
literal(enum kind kind)
Definition json.h:368
std::unique_ptr< value > clone() const final override
Definition json.cc:680
enum kind get_kind() const final override
Definition json.h:373
hash_map< char *, value *, simple_hashmap_traits< nofree_string_hash, value * > > map_t
Definition json.h:196
bool maybe_get_enum(const enum_property< EnumType > &property, EnumType &out) const
Definition json.h:384
void set(const char *key, value *v)
Definition json.cc:379
const map_t & get_map() const
Definition json.h:223
void set_array_of_string(const array_of_string_property &property, std::unique_ptr< json::array > value)
Definition json.cc:475
void set_string(const char *key, const char *utf8_value)
Definition json.cc:424
size_t get_num_keys() const
Definition json.h:247
void set_float(const char *key, double v)
Definition json.cc:442
enum kind get_kind() const final override
Definition json.h:198
auto_vec< const char * > m_keys
Definition json.h:256
void set_bool(const char *key, bool v)
Definition json.cc:451
map_t m_map
Definition json.h:253
object * dyn_cast_object() final override
Definition json.h:202
void set_integer(const char *key, long v)
Definition json.cc:433
value * get(const char *key) const
Definition json.cc:409
const char * get_key(size_t i) const
Definition json.h:248
void set_enum(const enum_property< EnumType > &property, EnumType value)
Definition json.h:399
void set(const char *key, std::unique_ptr< JsonType > v)
Definition json.h:217
static int compare(const json::object &obj_a, const json::object &obj_b)
Definition json.cc:484
bool is_empty() const
Definition json.h:204
std::unique_ptr< value > clone() const final override
Definition json.cc:352
~object()
Definition json.cc:301
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:313
std::unique_ptr< object > clone_as_object() const
Definition json.cc:358
string(const char *utf8)
Definition json.cc:624
enum kind get_kind() const final override
Definition json.h:349
~string()
Definition json.h:347
const char * get_string() const
Definition json.h:354
size_t m_len
Definition json.h:359
void print(pretty_printer *pp, bool formatted) const final override
Definition json.cc:643
char * m_utf8
Definition json.h:358
std::unique_ptr< value > clone() const final override
Definition json.cc:650
size_t get_length() const
Definition json.h:355
string * dyn_cast_string() final override
Definition json.h:352
virtual string * dyn_cast_string()
Definition json.h:174
virtual enum kind get_kind() const =0
virtual std::unique_ptr< value > clone() const =0
virtual object * dyn_cast_object()
Definition json.h:171
void print_pointer(pretty_printer *pp) const
Definition json.cc:276
static int compare(const json::value &val_a, const json::value &val_b)
Definition json.cc:199
virtual void print(pretty_printer *pp, bool formatted) const =0
virtual integer_number * dyn_cast_integer_number()
Definition json.h:173
void DEBUG_FUNCTION dump() const
Definition json.cc:179
const pointer::token & get_pointer_token() const
Definition json.h:178
pointer::token m_pointer_token
Definition json.h:181
virtual array * dyn_cast_array()
Definition json.h:172
virtual ~value()
Definition json.h:163
Definition pretty-print.h:241
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2009
property< literal > bool_property
Definition json.h:141
property< value > json_property
Definition json.h:142
property< integer_number > integer_property
Definition json.h:140
@ JSON_ARRAY
Definition json.h:60
@ JSON_FALSE
Definition json.h:74
@ JSON_INTEGER
Definition json.h:63
@ JSON_NULL
Definition json.h:75
@ JSON_OBJECT
Definition json.h:57
@ JSON_TRUE
Definition json.h:73
@ JSON_FLOAT
Definition json.h:66
@ JSON_STRING
Definition json.h:69
property< array > array_of_string_property
Definition json.h:143
property< string > string_property
Definition json.h:139
property< enum_traits< EnumType > > enum_property
Definition json.h:156
Definition dump-context.h:31
if(N >=2) for(unsigned int i
i
Definition poly-int.h:776
EnumType enum_t
Definition json.h:148
static enum_t get_unknown_value()
static bool maybe_get_value_from_string(const char *, enum_t &out)
static const char * get_string_for_value(enum_t value)
void print(pretty_printer *pp) const
Definition json.cc:126
union json::pointer::token::u m_data
json::value * m_parent
Definition json.h:112
token()
Definition json.cc:79
~token()
Definition json.cc:100
enum kind m_kind
Definition json.h:118
@ object_member
Definition json.h:92
@ array_index
Definition json.h:93
@ root_value
Definition json.h:91
token(token &&other)=delete
token & operator=(const token &other)=delete
token(const token &other)=delete
property(const char *key_prefix, const char *key)
Definition json.h:132
label_text m_key
Definition json.h:136
property(const char *key)
Definition json.h:128
Definition hash-map-traits.h:33
#define DEBUG_FUNCTION
Definition system.h:1191
char * u_member
Definition json.h:115
size_t u_index
Definition json.h:116