--- /dev/null
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+struct test {
+ int x;
+};
+
+struct test tval = {23};
+
+int main () {
+ return 0;
+}
--- /dev/null
+# Copyright (C) 2023 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Some varobj tests involving pretty-printers
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+require allow_python_tests
+
+standard_testfile
+
+if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != ""} {
+ return -1
+}
+
+mi_clean_restart $binfile
+
+set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
+mi_gdb_test "source ${pyfile}" \
+ ".*\\^done" \
+ "load python file"
+
+mi_gdb_test "-enable-pretty-printing" \
+ "\\^done" \
+ "-enable-pretty-printing"
+
+mi_gdb_test "set python print-stack full" \
+ ".*\\^done" \
+ "set python print-stack full"
+
+mi_runto_main
+
+mi_gdb_test "-var-create tval * tval" \
+ "\\^done.*"
+
+mi_gdb_test "-var-list-children --all-values tval" \
+ ".*value=.*flicker.*"
--- /dev/null
+# Copyright (C) 2023 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import gdb.printing
+
+
+class TestPrinter:
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return "map"
+
+ def children(self):
+ yield "1", "flicker"
+
+
+def str_lookup_function(val):
+ lookup_tag = val.type.tag
+ if lookup_tag == "test":
+ return TestPrinter(val)
+
+
+gdb.printing.register_pretty_printer(None, str_lookup_function)
if (var->dynamic->pretty_printer != NULL)
return varobj_value_get_print_value (var->value.get (), var->format,
var);
+ else if (var->parent != nullptr && varobj_is_dynamic_p (var->parent))
+ return var->print_value;
+
return (*var->root->lang_ops->value_of_variable) (var, format);
}
else