Home | History | Annotate | Download | only in Interpreter
      1 //===-- OptionValueFileSpec.cpp ---------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "lldb/lldb-python.h"
     11 
     12 #include "lldb/Interpreter/OptionValueFileSpec.h"
     13 
     14 // C Includes
     15 // C++ Includes
     16 // Other libraries and framework includes
     17 // Project includes
     18 #include "lldb/Core/State.h"
     19 #include "lldb/DataFormatters/FormatManager.h"
     20 #include "lldb/Interpreter/Args.h"
     21 #include "lldb/Interpreter/CommandCompletions.h"
     22 
     23 using namespace lldb;
     24 using namespace lldb_private;
     25 
     26 
     27 OptionValueFileSpec::OptionValueFileSpec () :
     28     OptionValue(),
     29     m_current_value (),
     30     m_default_value (),
     31     m_data_sp(),
     32     m_completion_mask (CommandCompletions::eDiskFileCompletion)
     33 {
     34 }
     35 
     36 OptionValueFileSpec::OptionValueFileSpec (const FileSpec &value) :
     37     OptionValue(),
     38     m_current_value (value),
     39     m_default_value (value),
     40     m_data_sp(),
     41     m_completion_mask (CommandCompletions::eDiskFileCompletion)
     42 {
     43 }
     44 
     45 OptionValueFileSpec::OptionValueFileSpec (const FileSpec &current_value,
     46                                           const FileSpec &default_value) :
     47     OptionValue(),
     48     m_current_value (current_value),
     49     m_default_value (default_value),
     50     m_data_sp(),
     51     m_completion_mask (CommandCompletions::eDiskFileCompletion)
     52 {
     53 }
     54 
     55 void
     56 OptionValueFileSpec::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
     57 {
     58     if (dump_mask & eDumpOptionType)
     59         strm.Printf ("(%s)", GetTypeAsCString ());
     60     if (dump_mask & eDumpOptionValue)
     61     {
     62         if (dump_mask & eDumpOptionType)
     63             strm.PutCString (" = ");
     64 
     65         if (m_current_value)
     66         {
     67             strm << '"' << m_current_value.GetPath().c_str() << '"';
     68         }
     69     }
     70 }
     71 
     72 Error
     73 OptionValueFileSpec::SetValueFromCString (const char *value_cstr,
     74                                           VarSetOperationType op)
     75 {
     76     Error error;
     77     switch (op)
     78     {
     79     case eVarSetOperationClear:
     80         Clear ();
     81         break;
     82 
     83     case eVarSetOperationReplace:
     84     case eVarSetOperationAssign:
     85         if (value_cstr && value_cstr[0])
     86         {
     87             Args args(value_cstr);
     88             if (args.GetArgumentCount() == 1)
     89             {
     90                 const char *path = args.GetArgumentAtIndex(0);
     91                 m_value_was_set = true;
     92                 m_current_value.SetFile(path, true);
     93             }
     94             else
     95             {
     96                 error.SetErrorString("please supply a single path argument for this file or quote the path if it contains spaces");
     97             }
     98         }
     99         else
    100         {
    101             error.SetErrorString("invalid value string");
    102         }
    103         break;
    104 
    105     case eVarSetOperationInsertBefore:
    106     case eVarSetOperationInsertAfter:
    107     case eVarSetOperationRemove:
    108     case eVarSetOperationAppend:
    109     case eVarSetOperationInvalid:
    110         error = OptionValue::SetValueFromCString (value_cstr, op);
    111         break;
    112     }
    113     return error;
    114 }
    115 
    116 lldb::OptionValueSP
    117 OptionValueFileSpec::DeepCopy () const
    118 {
    119     return OptionValueSP(new OptionValueFileSpec(*this));
    120 }
    121 
    122 
    123 size_t
    124 OptionValueFileSpec::AutoComplete (CommandInterpreter &interpreter,
    125                                    const char *s,
    126                                    int match_start_point,
    127                                    int max_return_elements,
    128                                    bool &word_complete,
    129                                    StringList &matches)
    130 {
    131     word_complete = false;
    132     matches.Clear();
    133     CommandCompletions::InvokeCommonCompletionCallbacks (interpreter,
    134                                                          m_completion_mask,
    135                                                          s,
    136                                                          match_start_point,
    137                                                          max_return_elements,
    138                                                          NULL,
    139                                                          word_complete,
    140                                                          matches);
    141     return matches.GetSize();
    142 }
    143 
    144 
    145 
    146 const lldb::DataBufferSP &
    147 OptionValueFileSpec::GetFileContents(bool null_terminate)
    148 {
    149     if (!m_data_sp && m_current_value)
    150     {
    151         if (null_terminate)
    152             m_data_sp = m_current_value.ReadFileContentsAsCString();
    153         else
    154             m_data_sp = m_current_value.ReadFileContents();
    155     }
    156     return m_data_sp;
    157 }
    158 
    159 
    160