blob: 89d5cee71e4de78a8fbbacdd5b20d2acce39b7e5 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- CommandObjectAppend.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 "CommandObjectAppend.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "lldb/Interpreter/CommandInterpreter.h"
17#include "lldb/Interpreter/CommandReturnObject.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22//-----------------------------------------------------------------------------
23// CommandObjectAppend
24//-----------------------------------------------------------------------------
25
26CommandObjectAppend::CommandObjectAppend () :
27 CommandObject ("append",
28 "Allows the user to append a value to a single debugger setting variable, for settings that are of list types. Type 'settings' to see a list of debugger setting variables",
29 "append <var-name> <value-string>")
30{
31}
32
33CommandObjectAppend::~CommandObjectAppend ()
34{
35}
36
37bool
38CommandObjectAppend::Execute
39(
Greg Clayton63094e02010-06-23 01:19:29 +000040 CommandInterpreter &interpreter,
Chris Lattner24943d22010-06-08 16:52:24 +000041 Args& command,
Chris Lattner24943d22010-06-08 16:52:24 +000042 CommandReturnObject &result
43)
44{
45 CommandInterpreter::VariableMap::iterator pos;
46
47 const int argc = command.GetArgumentCount();
48 if (argc < 2)
49 {
50 result.AppendError ("'append' requires at least two arguments");
51 result.SetStatus (eReturnStatusFailed);
52 return false;
53 }
54
55 const char *var_name = command.GetArgumentAtIndex(0);
56 command.Shift();
57
58
59 if (var_name == NULL || var_name[0] == '\0')
60 {
61 result.AppendError ("'set' command requires a valid variable name. No value supplied");
62 result.SetStatus (eReturnStatusFailed);
63 }
64 else
65 {
Greg Clayton63094e02010-06-23 01:19:29 +000066 StateVariable *var = interpreter.GetStateVariable(var_name);
Chris Lattner24943d22010-06-08 16:52:24 +000067 if (var == NULL)
68 {
69 result.AppendErrorWithFormat ("'%s' is not a settable internal variable.\n", var_name);
70 result.SetStatus (eReturnStatusFailed);
71 }
72 else
73 {
74 if (var->GetType() == StateVariable::eTypeString)
75 {
Greg Clayton54e7afa2010-07-09 20:39:50 +000076 for (size_t i = 0; i < command.GetArgumentCount(); ++i)
Chris Lattner24943d22010-06-08 16:52:24 +000077 var->AppendStringValue (command.GetArgumentAtIndex(i));
78 result.SetStatus (eReturnStatusSuccessFinishNoResult);
79 }
80 else if (var->GetType() == StateVariable::eTypeStringArray)
81 {
82 var->GetArgs().AppendArguments (command);
83 result.SetStatus (eReturnStatusSuccessFinishNoResult);
84 }
85 else
86 {
87 result.AppendErrorWithFormat ("Values cannot be appended to variable '%s'. Try 'set' instead.\n", var_name);
88 result.SetStatus (eReturnStatusFailed);
89 }
90 }
91 }
92 return result.Succeeded();
93}
94