1//===-- ValueObjectUpdater.h ------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_CORE_VALUEOBJECTUPDATER_H
10#define LLDB_CORE_VALUEOBJECTUPDATER_H
11
12#include "lldb/Core/ValueObject.h"
13
14namespace lldb_private {
15
16/// A value object class that is seeded with the static variable value
17/// and it vends the user facing value object. If the type is dynamic it can
18/// vend the dynamic type. If this user type also has a synthetic type
19/// associated with it, it will vend the synthetic type. The class watches the
20/// process' stop ID and will update the user type when needed.
21class ValueObjectUpdater {
22  /// The root value object is the static typed variable object.
23  lldb::ValueObjectSP m_root_valobj_sp;
24  /// The user value object is the value object the user wants to see.
25  lldb::ValueObjectSP m_user_valobj_sp;
26  /// The stop ID that m_user_valobj_sp is valid for.
27  uint32_t m_stop_id = UINT32_MAX;
28
29public:
30  ValueObjectUpdater(lldb::ValueObjectSP in_valobj_sp);
31
32  /// Gets the correct value object from the root object for a given process
33  /// stop ID. If dynamic values are enabled, or if synthetic children are
34  /// enabled, the value object that the user wants to see might change while
35  /// debugging.
36  lldb::ValueObjectSP GetSP();
37
38  lldb::ProcessSP GetProcessSP() const;
39};
40
41} // namespace lldb_private
42
43#endif // LLDB_CORE_VALUEOBJECTUPDATER_H
44