Add the ability to set timeout & "run all threads" options both from the "expr" command and from
the SB API's that evaluate expressions.
<rdar://problem/12457211>
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@166062 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/scripts/Python/interface/SBExpressionOptions.i b/scripts/Python/interface/SBExpressionOptions.i
new file mode 100644
index 0000000..fa58fe3
--- /dev/null
+++ b/scripts/Python/interface/SBExpressionOptions.i
@@ -0,0 +1,104 @@
+//===-- SWIG interface for SBExpressionOptions -----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+namespace lldb {
+
+%feature("docstring",
+"A container for options to use when evaluating expressions."
+) SBExpressionOptions;
+
+class SBExpressionOptions
+{
+friend class SBFrame;
+friend class SBValue;
+
+public:
+ SBExpressionOptions();
+
+ SBExpressionOptions (const lldb::SBExpressionOptions &rhs);
+
+ SBExpressionOptions (bool coerce_to_id,
+ bool unwind_on_error,
+ bool keep_in_memory,
+ bool run_others,
+ DynamicValueType use_dynamic,
+ uint32_t timeout_usec);
+
+ ~SBExpressionOptions();
+
+ bool
+ DoesCoerceToId () const;
+
+ %feature("docstring",
+ "Sets whether to coerce the expression result to ObjC id type after evaluation."
+ ) SetCoerceToId;
+ void
+ SetCoerceToId (bool coerce = true);
+
+ bool
+ DoesUnwindOnError () const;
+
+ %feature("docstring",
+ "Sets whether to unwind the expression stack on error."
+ ) SetUnwindOnError;
+ void
+ SetUnwindOnError (bool unwind = false);
+
+ bool
+ DoesKeepInMemory () const;
+
+ %feature("docstring",
+ "Sets whether to keep the expression result in the target program's memory - forced to true when creating SBValues."
+ ) SetKeepInMemory;
+ void
+ SetKeepInMemory (bool keep = true);
+
+ lldb::DynamicValueType
+ GetUseDynamic () const;
+
+ %feature("docstring",
+ "Sets whether to cast the expression result to its dynamic type."
+ ) SetUseDynamic;
+ void
+ SetUseDynamic (lldb::DynamicValueType dynamic = lldb::eDynamicCanRunTarget);
+
+ uint32_t
+ GetTimeoutUsec () const;
+
+ %feature("docstring",
+ "Sets the duration we will wait before cancelling expression evaluation. 0 means wait forever."
+ ) SetTimeoutUsec;
+ void
+ SetTimeoutUsec (uint32_t timeout = 0);
+
+ bool
+ GetRunOthers () const;
+
+ %feature("docstring",
+ "Sets whether to run all threads if the expression does not complete on one thread."
+ ) SetRunOthers;
+ void
+ SetRunOthers (bool run_others = true);
+
+protected:
+
+ SBExpressionOptions (lldb_private::EvaluateExpressionOptions &expression_options);
+
+ lldb_private::EvaluateExpressionOptions *
+ get () const;
+
+ lldb_private::EvaluateExpressionOptions &
+ ref () const;
+
+private:
+ // This auto_pointer is made in the constructor and is always valid.
+ mutable std::auto_ptr<lldb_private::EvaluateExpressionOptions> m_opaque_ap;
+};
+
+} // namespace lldb
diff --git a/scripts/Python/interface/SBFrame.i b/scripts/Python/interface/SBFrame.i
index 7d02564..1735dd9 100644
--- a/scripts/Python/interface/SBFrame.i
+++ b/scripts/Python/interface/SBFrame.i
@@ -139,6 +139,9 @@
lldb::SBValue
EvaluateExpression (const char *expr, lldb::DynamicValueType use_dynamic, bool unwind_on_error);
+
+ lldb::SBValue
+ EvaluateExpression (const char *expr, SBExpressionOptions &options);
%feature("docstring", "
/// Gets the lexical block that defines the stack frame. Another way to think
diff --git a/scripts/Python/interface/SBValue.i b/scripts/Python/interface/SBValue.i
index e316637..70c3d80 100644
--- a/scripts/Python/interface/SBValue.i
+++ b/scripts/Python/interface/SBValue.i
@@ -222,6 +222,9 @@
lldb::SBValue
CreateValueFromExpression (const char *name, const char* expression);
+
+ lldb::SBValue
+ CreateValueFromExpression (const char *name, const char* expression, SBExpressionOptions &options);
lldb::SBValue
CreateValueFromAddress(const char* name, lldb::addr_t address, lldb::SBType type);