spot/src/ltlvisit/clone.cc
Alexandre Duret-Lutz 2a0f88373e * src/ltlenv/environment.hh (require): Return a formula, not
an atomic_prop.
* src/ltlast/atomic_prop.hh (atomic_prop): New argument env.
(environment_): New member.
(env): New method.
* src/ltlast/atomic_prop.cc (atomic_prop, env): Likewise.
* src/ltlenv/defaultenv.cc (require): Pass *this as the
environment argument to atomic_prop.
* src/ltlvisit/clone.cc (visit(const atomic_prop*)): Also copy
the environment.
* src/ltlvisit/nenoform.cc (visit(const atomic_prop*)): Likewise.
2003-04-17 15:47:56 +00:00

74 lines
1.2 KiB
C++

#include "ltlast/allnodes.hh"
#include "clone.hh"
namespace spot
{
namespace ltl
{
clone_visitor::clone_visitor()
{
}
clone_visitor::~clone_visitor()
{
}
formula*
clone_visitor::result() const
{
return result_;
}
void
clone_visitor::visit(const atomic_prop* ap)
{
result_ = new atomic_prop(ap->name(), ap->env());
}
void
clone_visitor::visit(const constant* c)
{
result_ = new constant(c->val());
}
void
clone_visitor::visit(const unop* uo)
{
result_ = new unop(uo->op(), recurse(uo->child()));
}
void
clone_visitor::visit(const binop* bo)
{
result_ = new binop(bo->op(),
recurse(bo->first()), recurse(bo->second()));
}
void
clone_visitor::visit(const multop* mo)
{
multop* res = new multop(mo->op());
unsigned mos = mo->size();
for (unsigned i = 0; i < mos; ++i)
{
res->add(recurse(mo->nth(i)));
}
result_ = res;
}
formula*
clone_visitor::recurse(const formula* f)
{
return clone(f);
}
formula*
clone(const formula* f)
{
clone_visitor v;
f->accept(v);
return v.result();
}
}
}