Target and breakpoints options were added:
breakpoint set --language lang --name func
settings set target.language pascal
These specify the Language to use when interpreting the breakpoint's
expression (note: currently only implemented for breakpoints on
identifiers). If the breakpoint language is not set, the target.language
setting is used.
This support is required by Pascal, for example, to set breakpoint at 'ns.foo'
for function 'foo' in namespace 'ns'.
Tests on the language were also added to Module::PrepareForFunctionNameLookup
for efficiency.
Reviewed by: clayborg
Subscribers: jingham, lldb-commits
Differential Revision: http://reviews.llvm.org/D11119
llvm-svn: 242844
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
//===-- OptionValueFormat.cpp -----------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Interpreter/OptionValueLanguage.h"
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
#include "lldb/Core/Stream.h"
|
|
#include "lldb/DataFormatters/FormatManager.h"
|
|
#include "lldb/Interpreter/Args.h"
|
|
#include "lldb/Target/LanguageRuntime.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
void
|
|
OptionValueLanguage::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 (" = ");
|
|
strm.PutCString (LanguageRuntime::GetNameForLanguageType(m_current_value));
|
|
}
|
|
}
|
|
|
|
Error
|
|
OptionValueLanguage::SetValueFromString (llvm::StringRef value, VarSetOperationType op)
|
|
{
|
|
Error error;
|
|
switch (op)
|
|
{
|
|
case eVarSetOperationClear:
|
|
Clear();
|
|
break;
|
|
|
|
case eVarSetOperationReplace:
|
|
case eVarSetOperationAssign:
|
|
{
|
|
ConstString lang_name(value.trim());
|
|
LanguageType new_type = LanguageRuntime::GetLanguageTypeFromString(lang_name.GetCString());
|
|
if (new_type)
|
|
{
|
|
m_value_was_set = true;
|
|
m_current_value = new_type;
|
|
}
|
|
else
|
|
{
|
|
StreamString error_strm;
|
|
error_strm.Printf("invalid language type '%s', ", value.str().c_str());
|
|
error_strm.Printf("valid values are:\n");
|
|
LanguageRuntime::PrintAllLanguages(error_strm, " ", "\n");
|
|
error.SetErrorString(error_strm.GetData());
|
|
}
|
|
}
|
|
break;
|
|
|
|
case eVarSetOperationInsertBefore:
|
|
case eVarSetOperationInsertAfter:
|
|
case eVarSetOperationRemove:
|
|
case eVarSetOperationAppend:
|
|
case eVarSetOperationInvalid:
|
|
error = OptionValue::SetValueFromString(value, op);
|
|
break;
|
|
}
|
|
return error;
|
|
}
|
|
|
|
|
|
lldb::OptionValueSP
|
|
OptionValueLanguage::DeepCopy () const
|
|
{
|
|
return OptionValueSP(new OptionValueLanguage(*this));
|
|
}
|
|
|