mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
64 lines
2.1 KiB
C++
64 lines
2.1 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#pragma once
|
|
|
|
#include "zeek/Scope.h"
|
|
#include "zeek/TraverseTypes.h"
|
|
|
|
namespace zeek {
|
|
|
|
class Func;
|
|
class Type;
|
|
|
|
namespace detail {
|
|
|
|
class Stmt;
|
|
class Expr;
|
|
class ID;
|
|
class Attributes;
|
|
class Attr;
|
|
|
|
class TraversalCallback {
|
|
public:
|
|
TraversalCallback() { current_scope = nullptr; }
|
|
virtual ~TraversalCallback() {}
|
|
|
|
virtual TraversalCode PreFunction(const Func*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostFunction(const Func*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreStmt(const Stmt*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostStmt(const Stmt*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreExpr(const Expr*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostExpr(const Expr*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreID(const ID*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostID(const ID*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreTypedef(const ID*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostTypedef(const ID*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreDecl(const ID*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostDecl(const ID*) { return TC_CONTINUE; }
|
|
|
|
// A caution regarding using the next two: when traversing types,
|
|
// there's a possibility of encountering a (directly or indirectly)
|
|
// recursive record. So you'll need some way of avoiding that,
|
|
// such as remembering which types have already been traversed
|
|
// and skipping via TC_ABORTSTMT when seen again.
|
|
virtual TraversalCode PreType(const Type*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostType(const Type*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreAttrs(const Attributes*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostAttrs(const Attributes*) { return TC_CONTINUE; }
|
|
|
|
virtual TraversalCode PreAttr(const Attr*) { return TC_CONTINUE; }
|
|
virtual TraversalCode PostAttr(const Attr*) { return TC_CONTINUE; }
|
|
|
|
ScopePtr current_scope;
|
|
};
|
|
|
|
TraversalCode traverse_all(TraversalCallback* cb);
|
|
|
|
} // namespace detail
|
|
} // namespace zeek
|