cprover
lispirep.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #include "lispirep.h"
11 
12 #include "irep.h"
13 #include "lispexpr.h"
14 
15 void lisp2irep(const lispexprt &src, irept &dest)
16 {
17  dest.make_nil();
18 
19  if(src.type!=lispexprt::List || src.empty())
20  return;
21 
22  dest.id(src[0].value);
23 
24  for(std::size_t i=1; i<src.size(); i++)
25  if(!src[i].is_nil())
26  {
27  const std::string &name=src[i].value;
28  i++;
29 
30  if(i<src.size())
31  {
32  irept sub;
33  lisp2irep(src[i], sub);
34 
35  if(name=="")
36  dest.move_to_sub(sub);
37  else
38  dest.move_to_named_sub(name, sub);
39  }
40  }
41 }
42 
43 void irep2lisp(const irept &src, lispexprt &dest)
44 {
45  dest.clear();
46  dest.value="";
47  dest.type=lispexprt::List;
48 
49  dest.reserve(2+2*src.get_sub().size()
50  +2*src.get_named_sub().size()
51  +2*src.get_comments().size());
52 
53  lispexprt id;
55  id.value=src.id_string();
56  dest.push_back(id);
57 
58  // reserve objects for extra performance
59 
60  forall_irep(it, src.get_sub())
61  {
62  lispexprt name;
64  name.value="";
65  dest.push_back(name);
66 
67  lispexprt sub;
68 
69  irep2lisp(*it, sub);
70  dest.push_back(sub);
71  }
72 
74  {
75  lispexprt name;
77  name.value=name2string(it->first);
78  dest.push_back(name);
79 
80  lispexprt sub;
81 
82  irep2lisp(it->second, sub);
83  dest.push_back(sub);
84  }
85 
87  {
88  lispexprt name;
90  name.value=name2string(it->first);
91  dest.push_back(name);
92 
93  lispexprt sub;
94 
95  irep2lisp(it->second, sub);
96  dest.push_back(sub);
97  }
98 
99  lispexprt nil;
101  nil.value="nil";
102 
103  dest.push_back(nil);
104 }
void lisp2irep(const lispexprt &src, irept &dest)
Definition: lispirep.cpp:15
void move_to_sub(irept &irep)
Definition: irep.cpp:204
#define forall_named_irep(it, irep)
Definition: irep.h:70
subt & get_sub()
Definition: irep.h:317
const irep_idt & id() const
Definition: irep.h:259
const std::string & name2string(const irep_namet &n)
Definition: irep.h:53
named_subt & get_comments()
Definition: irep.h:321
Base class for tree-like data structures with sharing.
Definition: irep.h:156
void irep2lisp(const irept &src, lispexprt &dest)
Definition: lispirep.cpp:43
lispsymbolt value
Definition: lispexpr.h:78
named_subt & get_named_sub()
Definition: irep.h:319
void make_nil()
Definition: irep.h:315
const std::string & id_string() const
Definition: irep.h:262
enum lispexprt::@5 type
void move_to_named_sub(const irep_namet &name, irept &irep)
Definition: irep.cpp:195
#define forall_irep(it, irep)
Definition: irep.h:62