mirror of
https://github.com/intel/llvm.git
synced 2026-01-15 12:25:46 +08:00
Top-level Clang expressions are expressions that act as new translation units, and define their own symbols. They do not have function wrappers like regular expressions do, and declarations are persistent regardless of use of the dollar sign in identifiers. Names defined by these are given priority over all other symbol lookups. This patch adds a new expression option, '-p' or '--top-level,' which controls whether the expression is treated this way. It also adds a flag controlling this to SBExpressionOptions so that this API is usable externally. It also adds a test that validates that this works. (The test requires a fix to the Clang AST importer which I will be committing shortly.) <rdar://problem/22864976> llvm-svn: 264662
235 lines
4.5 KiB
C++
235 lines
4.5 KiB
C++
//===-- SBExpressionOptions.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/API/SBExpressionOptions.h"
|
|
#include "lldb/API/SBStream.h"
|
|
|
|
#include "lldb/Target/Target.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
|
|
SBExpressionOptions::SBExpressionOptions () :
|
|
m_opaque_ap(new EvaluateExpressionOptions())
|
|
{
|
|
}
|
|
|
|
SBExpressionOptions::SBExpressionOptions (const SBExpressionOptions &rhs)
|
|
{
|
|
m_opaque_ap.reset(new EvaluateExpressionOptions());
|
|
*(m_opaque_ap.get()) = rhs.ref();
|
|
}
|
|
|
|
const SBExpressionOptions &
|
|
SBExpressionOptions::operator = (const SBExpressionOptions &rhs)
|
|
{
|
|
if (this != &rhs)
|
|
{
|
|
this->ref() = rhs.ref();
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
SBExpressionOptions::~SBExpressionOptions()
|
|
{
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetCoerceResultToId () const
|
|
{
|
|
return m_opaque_ap->DoesCoerceToId ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetCoerceResultToId (bool coerce)
|
|
{
|
|
m_opaque_ap->SetCoerceToId (coerce);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetUnwindOnError () const
|
|
{
|
|
return m_opaque_ap->DoesUnwindOnError ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetUnwindOnError (bool unwind)
|
|
{
|
|
m_opaque_ap->SetUnwindOnError (unwind);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetIgnoreBreakpoints () const
|
|
{
|
|
return m_opaque_ap->DoesIgnoreBreakpoints ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetIgnoreBreakpoints (bool ignore)
|
|
{
|
|
m_opaque_ap->SetIgnoreBreakpoints (ignore);
|
|
}
|
|
|
|
lldb::DynamicValueType
|
|
SBExpressionOptions::GetFetchDynamicValue () const
|
|
{
|
|
return m_opaque_ap->GetUseDynamic ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetFetchDynamicValue (lldb::DynamicValueType dynamic)
|
|
{
|
|
m_opaque_ap->SetUseDynamic (dynamic);
|
|
}
|
|
|
|
uint32_t
|
|
SBExpressionOptions::GetTimeoutInMicroSeconds () const
|
|
{
|
|
return m_opaque_ap->GetTimeoutUsec ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetTimeoutInMicroSeconds (uint32_t timeout)
|
|
{
|
|
m_opaque_ap->SetTimeoutUsec (timeout);
|
|
}
|
|
|
|
uint32_t
|
|
SBExpressionOptions::GetOneThreadTimeoutInMicroSeconds () const
|
|
{
|
|
return m_opaque_ap->GetOneThreadTimeoutUsec ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetOneThreadTimeoutInMicroSeconds (uint32_t timeout)
|
|
{
|
|
m_opaque_ap->SetOneThreadTimeoutUsec (timeout);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetTryAllThreads () const
|
|
{
|
|
return m_opaque_ap->GetTryAllThreads ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetTryAllThreads (bool run_others)
|
|
{
|
|
m_opaque_ap->SetTryAllThreads (run_others);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetStopOthers () const
|
|
{
|
|
return m_opaque_ap->GetStopOthers ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetStopOthers (bool run_others)
|
|
{
|
|
m_opaque_ap->SetStopOthers (run_others);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetTrapExceptions () const
|
|
{
|
|
return m_opaque_ap->GetTrapExceptions ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetTrapExceptions (bool trap_exceptions)
|
|
{
|
|
m_opaque_ap->SetTrapExceptions (trap_exceptions);
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetLanguage (lldb::LanguageType language)
|
|
{
|
|
m_opaque_ap->SetLanguage(language);
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetCancelCallback (lldb::ExpressionCancelCallback callback, void *baton)
|
|
{
|
|
m_opaque_ap->SetCancelCallback (callback, baton);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetGenerateDebugInfo ()
|
|
{
|
|
return m_opaque_ap->GetGenerateDebugInfo();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetGenerateDebugInfo (bool b)
|
|
{
|
|
return m_opaque_ap->SetGenerateDebugInfo(b);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetSuppressPersistentResult ()
|
|
{
|
|
return m_opaque_ap->GetResultIsInternal ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetSuppressPersistentResult (bool b)
|
|
{
|
|
return m_opaque_ap->SetResultIsInternal (b);
|
|
}
|
|
|
|
const char *
|
|
SBExpressionOptions::GetPrefix () const
|
|
{
|
|
return m_opaque_ap->GetPrefix();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetPrefix (const char *prefix)
|
|
{
|
|
return m_opaque_ap->SetPrefix(prefix);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetAutoApplyFixIts ()
|
|
{
|
|
return m_opaque_ap->GetAutoApplyFixIts ();
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetAutoApplyFixIts (bool b)
|
|
{
|
|
return m_opaque_ap->SetAutoApplyFixIts (b);
|
|
}
|
|
|
|
bool
|
|
SBExpressionOptions::GetTopLevel ()
|
|
{
|
|
return m_opaque_ap->GetExecutionPolicy() == eExecutionPolicyTopLevel;
|
|
}
|
|
|
|
void
|
|
SBExpressionOptions::SetTopLevel (bool b)
|
|
{
|
|
m_opaque_ap->SetExecutionPolicy(b ? eExecutionPolicyTopLevel : m_opaque_ap->default_execution_policy);
|
|
}
|
|
|
|
EvaluateExpressionOptions *
|
|
SBExpressionOptions::get() const
|
|
{
|
|
return m_opaque_ap.get();
|
|
}
|
|
|
|
EvaluateExpressionOptions &
|
|
SBExpressionOptions::ref () const
|
|
{
|
|
return *(m_opaque_ap.get());
|
|
}
|