summaryrefslogtreecommitdiff
path: root/cli/traversal/elements.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-04-08 14:51:57 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-04-27 11:38:53 +0300
commit720c5a33b6a49cf328fdd7611f49153cf8f60247 (patch)
tree9725f3d1f42ec90fde84520f49647edea013ce5e /cli/traversal/elements.hxx
parent3183f3bb927a90783ae0aeaf190a0919377aabe4 (diff)
Separate tests and examples into individual packages
Also make cli module to be explicitly enabled via the config.cli configuration variable.
Diffstat (limited to 'cli/traversal/elements.hxx')
-rw-r--r--cli/traversal/elements.hxx142
1 files changed, 0 insertions, 142 deletions
diff --git a/cli/traversal/elements.hxx b/cli/traversal/elements.hxx
deleted file mode 100644
index a2ada23..0000000
--- a/cli/traversal/elements.hxx
+++ /dev/null
@@ -1,142 +0,0 @@
-// file : cli/traversal/elements.hxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// license : MIT; see accompanying LICENSE file
-
-#ifndef CLI_TRAVERSAL_ELEMENTS_HXX
-#define CLI_TRAVERSAL_ELEMENTS_HXX
-
-#include <cutl/compiler/traversal.hxx>
-
-#include <cli/semantics/elements.hxx>
-
-namespace traversal
-{
- using namespace cutl;
-
- //
- //
- typedef compiler::dispatcher<semantics::node> node_dispatcher;
- typedef compiler::dispatcher<semantics::edge> edge_dispatcher;
-
- //
- //
- struct node_base: node_dispatcher, edge_dispatcher
- {
- void
- edge_traverser (edge_dispatcher& d)
- {
- edge_dispatcher::traverser (d);
- }
-
- edge_dispatcher&
- edge_traverser ()
- {
- return *this;
- }
-
- using node_dispatcher::dispatch;
- using edge_dispatcher::dispatch;
-
- using edge_dispatcher::iterate_and_dispatch;
- };
-
- struct edge_base: edge_dispatcher, node_dispatcher
- {
- void
- node_traverser (node_dispatcher& d)
- {
- node_dispatcher::traverser (d);
- }
-
- node_dispatcher&
- node_traverser ()
- {
- return *this;
- }
-
- using edge_dispatcher::dispatch;
- using node_dispatcher::dispatch;
-
- using node_dispatcher::iterate_and_dispatch;
- };
-
- inline edge_base&
- operator>> (node_base& n, edge_base& e)
- {
- n.edge_traverser (e);
- return e;
- }
-
- inline node_base&
- operator>> (edge_base& e, node_base& n)
- {
- e.node_traverser (n);
- return n;
- }
-
- //
- //
- template <typename X>
- struct node: compiler::traverser_impl<X, semantics::node>,
- virtual node_base
- {
- };
-
- template <typename X>
- struct edge: compiler::traverser_impl<X, semantics::edge>,
- virtual edge_base
- {
- };
-
- // Edges
- //
-
- struct names: edge<semantics::names>
- {
- names ()
- {
- }
-
- names (node_dispatcher& n)
- {
- node_traverser (n);
- }
-
- virtual void
- traverse (type&);
- };
-
- // Nodes
- //
-
- struct nameable: node<semantics::nameable> {};
-
- template <typename T>
- struct scope_template: node<T>
- {
- public:
- virtual void
- traverse (T& s)
- {
- names (s);
- }
-
- virtual void
- names (T& s)
- {
- names (s, *this);
- }
-
- virtual void
- names (T& s, edge_dispatcher& d)
- {
- this->iterate_and_dispatch (s.names_begin (), s.names_end (), d);
- }
- };
-
- typedef scope_template<semantics::scope> scope;
-
- struct type: node<semantics::type> {};
-}
-
-#endif // CLI_TRAVERSAL_ELEMENTS_HXX