// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_

#include <lib/stdcompat/span.h>

#include "src/developer/debug/shared/arch.h"
#include "src/developer/debug/zxdb/expr/expr_language.h"
#include "src/developer/debug/zxdb/expr/expr_value.h"
#include "src/developer/debug/zxdb/expr/parsed_identifier.h"
#include "src/developer/debug/zxdb/expr/vector_register_format.h"

namespace zxdb {

// Converts an identifier to a RegisterID. Returns kUnknown if the identifier is
// not a register for the given architecture.
debug::RegisterID GetRegisterID(debug::Arch arch, const ParsedIdentifier& ident);

// Returns a generic error message for register |id|.
Err GetUnavailableRegisterErr(debug::RegisterID id);

// Converts |data| into an ExprValue with the given |id|. The format for
// non-vector registers will be looked up based on |id|. |lang| will determine
// the builtin Type symbol that will represent the register data.
ErrOrValue RegisterDataToValue(ExprLanguage lang, debug::RegisterID id,
                               VectorRegisterFormat vector_fmt, cpp20::span<const uint8_t> data);
}  // namespace zxdb

#endif  // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_
