cprover
Loading...
Searching...
No Matches
json_symbol_table.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: JSON symbol table deserialization
4
5Author: Chris Smowton, chris.smowton@diffblue.com
6
7\*******************************************************************/
8
9#include "json_symbol_table.h"
10#include "json_symbol.h"
11
13#include <util/json.h>
14#include <util/symbol_table.h>
15
16void symbol_table_from_json(const jsont &in, symbol_tablet &symbol_table)
17{
18 if(!in.is_object())
19 {
21 "symbol_table_from_json: JSON input must be an object");
22 }
23
24 const json_objectt &json_object = to_json_object(in);
25 const auto it = json_object.find("symbolTable");
26
27 if(it == json_object.end())
28 {
30 "symbol_table_from_json: JSON object must have key `symbolTable`");
31 }
32
33 if(!it->second.is_object())
34 {
36 "symbol_table_from_json: JSON symbol table must be an object");
37 }
38
39 const json_objectt &json_symbol_table = to_json_object(it->second);
40
41 for(const auto &pair : json_symbol_table)
42 {
43 const jsont &json_symbol = pair.second;
44
45 symbolt symbol = symbol_from_json(json_symbol);
46
47 if(symbol_table.add(symbol))
49 "symbol_table_from_json: duplicate symbol name `" +
50 id2string(symbol.name) + "`");
51 }
52
54}
Thrown when failing to deserialize a value from some low level format, like JSON or raw bytes.
iterator find(const std::string &key)
Definition json.h:356
iterator end()
Definition json.h:386
Definition json.h:27
bool is_object() const
Definition json.h:56
bool add(const symbolt &symbol)
Add a new symbol to the symbol table.
The symbol table.
void validate(const validation_modet vm=validation_modet::INVARIANT) const
Check that the symbol table is well-formed.
Symbol table entry.
Definition symbol.h:28
irep_idt name
The unique identifier.
Definition symbol.h:40
const std::string & id2string(const irep_idt &d)
Definition irep.h:47
json_objectt & to_json_object(jsont &json)
Definition json.h:444
symbolt symbol_from_json(const jsont &in)
Deserialise a json object to a symbolt.
void symbol_table_from_json(const jsont &in, symbol_tablet &symbol_table)
Author: Diffblue Ltd.