text: //===-- OptionValueSInt64.cpp -----------------------------------*- C++ -*-===//
  //
  // 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/OptionValueSInt64.h"
  
  #include "lldb/Host/StringConvert.h"
  #include "lldb/Utility/Stream.h"
  
  using namespace lldb;
  using namespace lldb_private;
  
  void OptionValueSInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
                                    uint32_t dump_mask) {
    // printf ("%p: DumpValue (exe_ctx=%p, strm, mask) m_current_value = %"
    // PRIi64
    // "\n", this, exe_ctx, m_current_value);
    if (dump_mask & eDumpOptionType)
      strm.Printf("(%s)", GetTypeAsCString());
    //    if (dump_mask & eDumpOptionName)
    //        DumpQualifiedName (strm);
    if (dump_mask & eDumpOptionValue) {
      if (dump_mask & eDumpOptionType)
        strm.PutCString(" = ");
      strm.Printf("%" PRIi64, m_current_value);
    }
  }
  
  Status OptionValueSInt64::SetValueFromString(llvm::StringRef value_ref,
                                               VarSetOperationType op) {
    Status error;
    switch (op) {
    case eVarSetOperationClear:
      Clear();
      NotifyValueChanged();
      break;
  
    case eVarSetOperationReplace:
    case eVarSetOperationAssign: {
      bool success = false;
      std::string value_str = value_ref.trim().str();
      int64_t value = StringConvert::ToSInt64(value_str.c_str(), 0, 0, &success);
      if (success) {
        if (value >= m_min_value && value <= m_max_value) {
          m_value_was_set = true;
          m_current_value = value;
          NotifyValueChanged();
        } else
          error.SetErrorStringWithFormat(
              "%" PRIi64 " is out of range, valid values must be between %" PRIi64
              " and %" PRIi64 ".",
              value, m_min_value, m_max_value);
      } else {
        error.SetErrorStringWithFormat("invalid int64_t string value: '%s'",
                                       value_ref.str().c_str());
      }
    } break;
  
    case eVarSetOperationInsertBefore:
    case eVarSetOperationInsertAfter:
    case eVarSetOperationRemove:
    case eVarSetOperationAppend:
    case eVarSetOperationInvalid:
      error = OptionValue::SetValueFromString(value_ref, op);
      break;
    }
    return error;
  }
  
  lldb::OptionValueSP OptionValueSInt64::DeepCopy() const {
    return OptionValueSP(new OptionValueSInt64(*this));
  }
  