If you try to use the overloaded subscript operator of a class
in python, it fails like this:
(gdb) py print(gdb.parse_and_eval('b')[5])
Traceback (most recent call last):
File "<string>", line 1, in <module>
gdb.error: Cannot subscript requested type.
Error while executing Python code.
This simply checks if such an operator exists, and calls it
instead, making this possible:
(gdb) py print(gdb.parse_and_eval('b')[5])
102 'f'
Approved-By: Tom Tromey <tom@tromey.com>
type. */
struct value *idx = convert_value_from_python (key);
- if (idx != NULL)
+ if (idx != NULL
+ && binop_user_defined_p (BINOP_SUBSCRIPT, tmp, idx))
+ res_val = value_x_binop (tmp, idx, BINOP_SUBSCRIPT,
+ OP_NULL, EVAL_NORMAL);
+ else if (idx != NULL)
{
/* Check the value's type is something that can be accessed via
a subscript. */
int arg0_func ();
int arg1_func (int arg1);
int arg2_func (int arg1, int arg2);
+ char operator[] (int num);
};
int B::static_func ()
return a * arg1 + arg2;
}
+char B::operator[] (int num)
+{
+ return a + num;
+}
+
struct X
{
union { int x; char y; };
# Test overloaded operators.
gdb_test_no_output "python a = gdb.parse_and_eval('a')" "init a"
gdb_test "python print(a + 5)" "10" "a + 5"
+gdb_test "python print(gdb.parse_and_eval('b')\[5\])" "102 'f'"
# Test inferior function calls of methods.
gdb_test "py print(b_obj\['static_func'\]())" "1111"