// Copyright (C) 2020-2025 Free Software Foundation, Inc.

// This file is part of GCC.

// GCC is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 3, or (at your option) any later
// version.

// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.

// You should have received a copy of the GNU General Public License
// along with GCC; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.

#ifndef RUST_IMMUTABLE_NRCTX_H
#define RUST_IMMUTABLE_NRCTX_H

#include "rust-name-resolution-context.h"

namespace Rust {
namespace Resolver2_0 {

/**
 * Once the name resolution pass is complete, the typechecker can access it
 *
 * FIXME: More documentation
 */
class ImmutableNameResolutionContext
{
public:
  /** FIXME: Documentation */
  static const ImmutableNameResolutionContext &
  init (const NameResolutionContext &ctx);

  /** FIXME: Documentation */
  static const ImmutableNameResolutionContext &get ();

  const NameResolutionContext &resolver () const;

private:
  ImmutableNameResolutionContext (const NameResolutionContext &ctx);
  ImmutableNameResolutionContext (const ImmutableNameResolutionContext &other)
    = default;

  const NameResolutionContext &ctx;
};

} // namespace Resolver2_0
} // namespace Rust

#endif //! RUST_IMMUTABLE_NRCTX_H
