return PyUnicode_FromString (fid.to_string ().c_str ());
}
+/* Implement repr() for gdb.Frame. */
+
+static PyObject *
+frapy_repr (PyObject *self)
+{
+ frame_object *frame_obj = (frame_object *) self;
+ frame_info_ptr f_info = frame_find_by_id (frame_obj->frame_id);
+ if (f_info == nullptr)
+ return gdb_py_invalid_object_repr (self);
+
+ const frame_id &fid = frame_obj->frame_id;
+ return PyUnicode_FromFormat ("<%s level=%d frame-id=%s>",
+ Py_TYPE (self)->tp_name,
+ frame_relative_level (f_info),
+ fid.to_string ().c_str ());
+}
+
/* Implementation of gdb.Frame.is_valid (self) -> Boolean.
Returns True if the frame corresponding to the frame_id of this
object still exists in the inferior. */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
- 0, /* tp_repr */
+ frapy_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
gdb_continue_to_breakpoint "Block break here."
gdb_py_test_silent_cmd "python bf1 = gdb.selected_frame ()" "get frame" 0
+# Test Frame.__repr__() method for a valid Frame object.
+gdb_test "python print (repr(bf1))" "<gdb\\.Frame level=0 frame-id=\\{\[^\r\n\]+\\}>" \
+ "test __repr__ for gdb.Frame on a valid frame"
+
# Test Frame.architecture() method.
gdb_py_test_silent_cmd "python show_arch_str = gdb.execute(\"show architecture\", to_string=True)" "show arch" 0
gdb_test "python print (bf1.architecture().name() in show_arch_str)" "True" "test Frame.architecture()"
"get bottommost frame" 0
gdb_test "up" ".*" ""
+# Test Frame.__repr__() method for an invalid Frame object.
+gdb_test "python print (repr(bf1))" "<gdb\\.Frame \\(invalid\\)>" \
+ "test __repr__ for gdb.Frame on an invalid frame"
+
gdb_py_test_silent_cmd "python f1 = gdb.selected_frame ()" "get second frame" 0
gdb_py_test_silent_cmd "python f0 = f1.newer ()" "get first frame" 0
gdb_py_test_silent_cmd "python f2 = f1.older ()" "get last frame" 0