aboutsummaryrefslogtreecommitdiff
path: root/src/rt/vm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/vm.cc')
-rw-r--r--src/rt/vm.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/rt/vm.cc b/src/rt/vm.cc
index 4cedc030..e85cb558 100644
--- a/src/rt/vm.cc
+++ b/src/rt/vm.cc
@@ -39,6 +39,20 @@
namespace OpenAxiom {
namespace VM {
+ void Dynamic::Visitor::visit(const NullaryOperator& x) {
+ visit(as<FunctionBase>(x));
+ }
+
+ void Dynamic::Visitor::visit(const UnaryOperator& x) {
+ visit(as<FunctionBase>(x));
+ }
+
+ void Dynamic::Visitor::visit(const BinaryOperator& x) {
+ visit(as<FunctionBase>(x));
+ }
+
+ void FunctionBase::accept(Visitor& v) const { v.visit(*this); }
+
// -- Environement
Environment::Environment() = default;
@@ -59,7 +73,7 @@ namespace OpenAxiom {
}
// -- Dynamic
- Dynamic::~Dynamic() { }
+ Dynamic::~Dynamic() = default;
// -- Symbol
Symbol::Symbol(InternedString s)
@@ -71,11 +85,10 @@ namespace OpenAxiom {
attributes()
{ }
- void Symbol::format_on(std::ostream& os) const {
- // FIXME: handle escapes.
- std::copy(name->begin(), name->end(),
- std::ostream_iterator<char>(os));
- }
+ void Symbol::accept(Visitor& v) const { v.visit(*this); }
+
+ // -- Binding
+ void Binding::accept(Visitor& v) const { v.visit(*this); }
// -- Package
Package::Package(InternedString s)
@@ -102,12 +115,7 @@ namespace OpenAxiom {
return p == symbols.end() ? nullptr : const_cast<Symbol*>(&*p);
}
- // -- FunctionBase
- void FunctionBase::format_on(std::ostream& os) const {
- os << "#<FUNCTION ";
- name->format_on(os);
- os << '>';
- }
+ void Package::accept(Visitor& v) const { v.visit(*this); }
Fixnum
count_nodes(Pair p) {
@@ -117,6 +125,7 @@ namespace OpenAxiom {
return Fixnum(n);
}
+
// -- BasicContext --
Package*
BasicContext::make_package(InternedString n) {