| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 
 | //===-- OptionValueFileSpec.cpp -------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Interpreter/OptionValueFileSpec.h"
#include "lldb/DataFormatters/FormatManager.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Interpreter/CommandCompletions.h"
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Utility/Args.h"
#include "lldb/Utility/State.h"
using namespace lldb;
using namespace lldb_private;
OptionValueFileSpec::OptionValueFileSpec(bool resolve) : m_resolve(resolve) {}
OptionValueFileSpec::OptionValueFileSpec(const FileSpec &value, bool resolve)
    : m_current_value(value), m_default_value(value),
      m_completion_mask(CommandCompletions::eDiskFileCompletion),
      m_resolve(resolve) {}
OptionValueFileSpec::OptionValueFileSpec(const FileSpec ¤t_value,
                                         const FileSpec &default_value,
                                         bool resolve)
    : m_current_value(current_value), m_default_value(default_value),
      m_completion_mask(CommandCompletions::eDiskFileCompletion),
      m_resolve(resolve) {}
void OptionValueFileSpec::DumpValue(const ExecutionContext *exe_ctx,
                                    Stream &strm, uint32_t dump_mask) {
  if (dump_mask & eDumpOptionType)
    strm.Printf("(%s)", GetTypeAsCString());
  if (dump_mask & eDumpOptionValue) {
    if (dump_mask & eDumpOptionType)
      strm.PutCString(" = ");
    if (m_current_value) {
      strm << '"' << m_current_value.GetPath().c_str() << '"';
    }
  }
}
Status OptionValueFileSpec::SetValueFromString(llvm::StringRef value,
                                               VarSetOperationType op) {
  Status error;
  switch (op) {
  case eVarSetOperationClear:
    Clear();
    NotifyValueChanged();
    break;
  case eVarSetOperationReplace:
  case eVarSetOperationAssign:
    if (value.size() > 0) {
      value = value.trim("\"' \t");
      m_value_was_set = true;
      m_current_value.SetFile(value.str(), FileSpec::Style::native);
      if (m_resolve)
        FileSystem::Instance().Resolve(m_current_value);
      m_data_sp.reset();
      m_data_mod_time = llvm::sys::TimePoint<>();
      NotifyValueChanged();
    } else {
      error.SetErrorString("invalid value string");
    }
    break;
  case eVarSetOperationInsertBefore:
  case eVarSetOperationInsertAfter:
  case eVarSetOperationRemove:
  case eVarSetOperationAppend:
  case eVarSetOperationInvalid:
    error = OptionValue::SetValueFromString(value, op);
    break;
  }
  return error;
}
void OptionValueFileSpec::AutoComplete(CommandInterpreter &interpreter,
                                       CompletionRequest &request) {
  CommandCompletions::InvokeCommonCompletionCallbacks(
      interpreter, m_completion_mask, request, nullptr);
}
const lldb::DataBufferSP &OptionValueFileSpec::GetFileContents() {
  if (m_current_value) {
    const auto file_mod_time = FileSystem::Instance().GetModificationTime(m_current_value);
    if (m_data_sp && m_data_mod_time == file_mod_time)
      return m_data_sp;
    m_data_sp =
        FileSystem::Instance().CreateDataBuffer(m_current_value.GetPath());
    m_data_mod_time = file_mod_time;
  }
  return m_data_sp;
}
 |