blob: 613b85b4be9b20ab55e618738e7577d6c8557df3 [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(
40 Args& command,
41 CommandContext *context,
42 CommandInterpreter *interpreter,
43 CommandReturnObject &result
44)
45{
46 CommandInterpreter::VariableMap::iterator pos;
47
48 const int argc = command.GetArgumentCount();
49 if (argc < 2)
50 {
51 result.AppendError ("'append' requires at least two arguments");
52 result.SetStatus (eReturnStatusFailed);
53 return false;
54 }
55
56 const char *var_name = command.GetArgumentAtIndex(0);
57 command.Shift();
58
59
60 if (var_name == NULL || var_name[0] == '\0')
61 {
62 result.AppendError ("'set' command requires a valid variable name. No value supplied");
63 result.SetStatus (eReturnStatusFailed);
64 }
65 else
66 {
67 StateVariable *var = interpreter->GetStateVariable(var_name);
68 if (var == NULL)
69 {
70 result.AppendErrorWithFormat ("'%s' is not a settable internal variable.\n", var_name);
71 result.SetStatus (eReturnStatusFailed);
72 }
73 else
74 {
75 if (var->GetType() == StateVariable::eTypeString)
76 {
77 for (int i = 0; i < command.GetArgumentCount(); ++i)
78 var->AppendStringValue (command.GetArgumentAtIndex(i));
79 result.SetStatus (eReturnStatusSuccessFinishNoResult);
80 }
81 else if (var->GetType() == StateVariable::eTypeStringArray)
82 {
83 var->GetArgs().AppendArguments (command);
84 result.SetStatus (eReturnStatusSuccessFinishNoResult);
85 }
86 else
87 {
88 result.AppendErrorWithFormat ("Values cannot be appended to variable '%s'. Try 'set' instead.\n", var_name);
89 result.SetStatus (eReturnStatusFailed);
90 }
91 }
92 }
93 return result.Succeeded();
94}
95