1;; Additional pretty-printer support.
2;;
3;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
4;;
5;; This file is part of GDB.
6;;
7;; This program is free software; you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation; either version 3 of the License, or
10;; (at your option) any later version.
11;;
12;; This program is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15;; GNU General Public License for more details.
16;;
17;; You should have received a copy of the GNU General Public License
18;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20(define-module (gdb printing)
21  #:use-module ((gdb) #:select
22		(pretty-printer? objfile? progspace?
23		 pretty-printers set-pretty-printers!
24		 objfile-pretty-printers set-objfile-pretty-printers!
25		 progspace-pretty-printers set-progspace-pretty-printers!))
26  #:use-module (gdb support))
27
28(define-public (prepend-pretty-printer! obj matcher)
29  "Add MATCHER to the beginning of the pretty-printer list for OBJ.
30If OBJ is #f, add MATCHER to the global list."
31  (assert-type (pretty-printer? matcher) matcher SCM_ARG1
32	       'prepend-pretty-printer! "pretty-printer")
33  (cond ((eq? obj #f)
34	 (set-pretty-printers! (cons matcher (pretty-printers))))
35	((objfile? obj)
36	 (set-objfile-pretty-printers!
37	  obj (cons matcher (objfile-pretty-printers obj))))
38	((progspace? obj)
39	 (set-progspace-pretty-printers!
40	  obj (cons matcher (progspace-pretty-printers obj))))
41	(else
42	 (assert-type #f obj SCM_ARG1 'prepend-pretty-printer!
43		      "#f, objfile, or progspace"))))
44
45(define-public (append-pretty-printer! obj matcher)
46  "Add MATCHER to the end of the pretty-printer list for OBJ.
47If OBJ is #f, add MATCHER to the global list."
48  (assert-type (pretty-printer? matcher) matcher SCM_ARG1
49	       'append-pretty-printer! "pretty-printer")
50  (cond ((eq? obj #f)
51	 (set-pretty-printers! (append! (pretty-printers) (list matcher))))
52	((objfile? obj)
53	 (set-objfile-pretty-printers!
54	  obj (append! (objfile-pretty-printers obj) (list matcher))))
55	((progspace? obj)
56	 (set-progspace-pretty-printers!
57	  obj (append! (progspace-pretty-printers obj) (list matcher))))
58	(else
59	 (assert-type #f obj SCM_ARG1 'append-pretty-printer!
60		      "#f, objfile, or progspace"))))
61