blob: 784fbe5edfab7f4608f14deee1438d4826286bc9 [file] [log] [blame]
//===--- TypeWalker.h - Class for walking a Type ----------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_AST_TYPEWALKER_H
#define SWIFT_AST_TYPEWALKER_H
#include "swift/AST/Type.h"
namespace swift {
/// An abstract class used to traverse a Type.
class TypeWalker {
public:
enum class Action {
Continue,
SkipChildren,
Stop
};
/// This method is called when first visiting a type before walking into its
/// children.
virtual Action walkToTypePre(Type ty) { return Action::Continue; }
/// This method is called after visiting a type's children.
virtual Action walkToTypePost(Type ty) { return Action::Continue; }
protected:
TypeWalker() = default;
TypeWalker(const TypeWalker &) = default;
virtual ~TypeWalker() = default;
virtual void anchor();
};
} // end namespace swift
#endif