#pragma once #include "rust-system.h" #include "rust-ast-full.h" #include "rust-ast-visitor.h" #include "rust-scan.h" #include "scope.h" namespace Rust { namespace Analysis { class Resolution : public AST::ASTVisitor { public: virtual ~Resolution () { scope.Pop (); valueScope.Pop (); macroScope.Pop (); typeScope.Pop (); }; private: virtual bool go () = 0; protected: Resolution (AST::Crate &crate, TopLevelScan &toplevel) : crate (crate), toplevel (toplevel) { scope.Push (); valueScope.Push (); macroScope.Push (); typeScope.Push (); }; Scope scope; Scope valueScope; Scope macroScope; Scope typeScope; AST::Crate &crate; TopLevelScan &toplevel; std::vector letPatternBuffer; std::vector typeBuffer; std::vector typeComparisonBuffer; std::vector functionLookup; }; } // namespace Analysis } // namespace Rust