PR guile/17177
* guile/lib/gdb.scm (pretty-printers): Export. (set-pretty-printers!): Export. * guile/lib/gdb/printing.scm (gdb module): Update. (prepend-pretty-printer!, append-pretty-printer!): Update. * guile/scm-pretty-print.c (pretty_printer_list_name): Delete. (pretty_printer_list_var): Delete. (pretty_printer_list): New static global. (gdbscm_pretty_printers): New function. (gdbscm_set_pretty_printers_x): New function. (ppscm_find_pretty_printer_from_gdb): Update. (pretty_printer_functions): Add pretty-printers, set-pretty-printers!. (gdbscm_initialize_pretty_printers): Update. doc/ * guile.texi (Guile Pretty Printing API): Fix typo. Document set-pretty-printers!, pretty-printers. (Selecting Guile Pretty-Printers): Update. Mention program-space based pretty-printers.
This commit is contained in:
parent
74edf51613
commit
ee7333ae06
|
@ -1,3 +1,19 @@
|
||||||
|
2014-07-26 Doug Evans <xdje42@gmail.com>
|
||||||
|
|
||||||
|
PR guile/17177
|
||||||
|
* guile/lib/gdb.scm (pretty-printers): Export.
|
||||||
|
(set-pretty-printers!): Export.
|
||||||
|
* guile/lib/gdb/printing.scm (gdb module): Update.
|
||||||
|
(prepend-pretty-printer!, append-pretty-printer!): Update.
|
||||||
|
* guile/scm-pretty-print.c (pretty_printer_list_name): Delete.
|
||||||
|
(pretty_printer_list_var): Delete.
|
||||||
|
(pretty_printer_list): New static global.
|
||||||
|
(gdbscm_pretty_printers): New function.
|
||||||
|
(gdbscm_set_pretty_printers_x): New function.
|
||||||
|
(ppscm_find_pretty_printer_from_gdb): Update.
|
||||||
|
(pretty_printer_functions): Add pretty-printers, set-pretty-printers!.
|
||||||
|
(gdbscm_initialize_pretty_printers): Update.
|
||||||
|
|
||||||
2014-07-26 Doug Evans <xdje42@gmail.com>
|
2014-07-26 Doug Evans <xdje42@gmail.com>
|
||||||
|
|
||||||
PR 17185
|
PR 17185
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2014-07-26 Doug Evans <xdje42@gmail.com>
|
||||||
|
|
||||||
|
PR guile/17177
|
||||||
|
* guile.texi (Guile Pretty Printing API): Fix typo.
|
||||||
|
Document set-pretty-printers!, pretty-printers.
|
||||||
|
(Selecting Guile Pretty-Printers): Update.
|
||||||
|
Mention program-space based pretty-printers.
|
||||||
|
|
||||||
2014-07-25 Pedro Alves <palves@redhat.com>
|
2014-07-25 Pedro Alves <palves@redhat.com>
|
||||||
Eli Zaretskii <eliz@gnu.org>
|
Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -1377,7 +1377,16 @@ Otherwise return @code{#f}.
|
||||||
|
|
||||||
@deffn {Scheme Procedure} set-pretty-printer-enabled! pretty-printer flag
|
@deffn {Scheme Procedure} set-pretty-printer-enabled! pretty-printer flag
|
||||||
Set the enabled flag of @var{pretty-printer} to @var{flag}.
|
Set the enabled flag of @var{pretty-printer} to @var{flag}.
|
||||||
The value returned in unspecified.
|
The value returned is unspecified.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} pretty-printers
|
||||||
|
Return the list of global pretty-printers.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} set-pretty-printers! pretty-printers
|
||||||
|
Set the list of global pretty-printers to @var{pretty-printers}.
|
||||||
|
The value returned is unspecified.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn {Scheme Procedure} make-pretty-printer-worker display-hint to-string children
|
@deffn {Scheme Procedure} make-pretty-printer-worker display-hint to-string children
|
||||||
|
@ -1476,27 +1485,36 @@ printer exists, then this returns @code{#f}.
|
||||||
@subsubsection Selecting Guile Pretty-Printers
|
@subsubsection Selecting Guile Pretty-Printers
|
||||||
@cindex selecting guile pretty-printers
|
@cindex selecting guile pretty-printers
|
||||||
|
|
||||||
The Guile list @code{*pretty-printers*} contains a set of
|
There are three sets of pretty-printers that @value{GDBN} searches:
|
||||||
@code{<gdb:pretty-printer>} registered objects.
|
|
||||||
Printers in this list are called @code{global}
|
@itemize @bullet
|
||||||
printers, they're available when debugging any inferior.
|
@item
|
||||||
In addition to this, each @code{<gdb:objfile>} object contains its
|
Per-objfile list of pretty-printers (@pxref{Objfiles In Guile}).
|
||||||
own set of pretty-printers (@pxref{Objfiles In Guile}).
|
@item
|
||||||
|
Per-progspace list of pretty-printers (@pxref{Progspaces In Guile}).
|
||||||
|
@item
|
||||||
|
The global list of pretty-printers (@pxref{Guile Pretty Printing API}).
|
||||||
|
These printers are available when debugging any inferior.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
Pretty-printer lookup is done by passing the value to be printed to the
|
Pretty-printer lookup is done by passing the value to be printed to the
|
||||||
lookup function of each enabled object in turn.
|
lookup function of each enabled object in turn.
|
||||||
Lookup stops when a lookup function returns a non-@code{#f} value
|
Lookup stops when a lookup function returns a non-@code{#f} value
|
||||||
or when the list is exhausted.
|
or when the list is exhausted.
|
||||||
|
Lookup functions must return either a @code{<gdb:pretty-printer-worker>}
|
||||||
|
object or @code{#f}. Otherwise an exception is thrown.
|
||||||
|
|
||||||
@value{GDBN} first checks the result of @code{objfile-pretty-printers}
|
@value{GDBN} first checks the result of @code{objfile-pretty-printers}
|
||||||
of each @code{<gdb:objfile>} in the current program space and iteratively
|
of each @code{<gdb:objfile>} in the current program space and iteratively
|
||||||
calls each enabled lookup function in the list for that @code{<gdb:objfile>}
|
calls each enabled lookup function in the list for that @code{<gdb:objfile>}
|
||||||
until a non-@code{#f} object is returned.
|
until a non-@code{#f} object is returned.
|
||||||
Lookup functions must return either a @code{<gdb:pretty-printer-worker>}
|
|
||||||
object or @code{#f}. Otherwise an exception is thrown.
|
|
||||||
If no pretty-printer is found in the objfile lists, @value{GDBN} then
|
If no pretty-printer is found in the objfile lists, @value{GDBN} then
|
||||||
searches the global pretty-printer list, calling each enabled function
|
searches the result of @code{progspace-pretty-printers} of the current
|
||||||
until a non-@code{#f} object is returned.
|
program space, calling each enabled function until a non-@code{#f} object
|
||||||
|
is returned.
|
||||||
|
After these lists have been exhausted, it tries the global pretty-printers
|
||||||
|
list, obtained with @code{pretty-printers}, again calling each enabled
|
||||||
|
function until a non-@code{#f} object is returned.
|
||||||
|
|
||||||
The order in which the objfiles are searched is not specified. For a
|
The order in which the objfiles are searched is not specified. For a
|
||||||
given list, functions are always invoked from the head of the list,
|
given list, functions are always invoked from the head of the list,
|
||||||
|
|
|
@ -319,6 +319,8 @@
|
||||||
set-pretty-printer-enabled!
|
set-pretty-printer-enabled!
|
||||||
make-pretty-printer-worker
|
make-pretty-printer-worker
|
||||||
pretty-printer-worker?
|
pretty-printer-worker?
|
||||||
|
pretty-printers
|
||||||
|
set-pretty-printers!
|
||||||
|
|
||||||
;; scm-progspace.c
|
;; scm-progspace.c
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
|
|
||||||
(define-module (gdb printing)
|
(define-module (gdb printing)
|
||||||
#:use-module ((gdb) #:select
|
#:use-module ((gdb) #:select
|
||||||
(*pretty-printers* pretty-printer? objfile? progspace?
|
(pretty-printer? objfile? progspace?
|
||||||
|
pretty-printers set-pretty-printers!
|
||||||
objfile-pretty-printers set-objfile-pretty-printers!
|
objfile-pretty-printers set-objfile-pretty-printers!
|
||||||
progspace-pretty-printers set-progspace-pretty-printers!))
|
progspace-pretty-printers set-progspace-pretty-printers!))
|
||||||
#:use-module (gdb init))
|
#:use-module (gdb init))
|
||||||
|
@ -30,7 +31,7 @@ If OBJ is #f, add MATCHER to the global list."
|
||||||
(%assert-type (pretty-printer? matcher) matcher SCM_ARG1
|
(%assert-type (pretty-printer? matcher) matcher SCM_ARG1
|
||||||
'prepend-pretty-printer!)
|
'prepend-pretty-printer!)
|
||||||
(cond ((eq? obj #f)
|
(cond ((eq? obj #f)
|
||||||
(set! *pretty-printers* (cons matcher *pretty-printers*)))
|
(set-pretty-printers! (cons matcher (pretty-printers))))
|
||||||
((objfile? obj)
|
((objfile? obj)
|
||||||
(set-objfile-pretty-printers!
|
(set-objfile-pretty-printers!
|
||||||
obj (cons matcher (objfile-pretty-printers obj))))
|
obj (cons matcher (objfile-pretty-printers obj))))
|
||||||
|
@ -46,7 +47,7 @@ If OBJ is #f, add MATCHER to the global list."
|
||||||
(%assert-type (pretty-printer? matcher) matcher SCM_ARG1
|
(%assert-type (pretty-printer? matcher) matcher SCM_ARG1
|
||||||
'append-pretty-printer!)
|
'append-pretty-printer!)
|
||||||
(cond ((eq? obj #f)
|
(cond ((eq? obj #f)
|
||||||
(set! *pretty-printers* (append! *pretty-printers* (list matcher))))
|
(set-pretty-printers! (append! (pretty-printers) (list matcher))))
|
||||||
((objfile? obj)
|
((objfile? obj)
|
||||||
(set-objfile-pretty-printers!
|
(set-objfile-pretty-printers!
|
||||||
obj (append! (objfile-pretty-printers obj) (list matcher))))
|
obj (append! (objfile-pretty-printers obj) (list matcher))))
|
||||||
|
|
|
@ -111,11 +111,8 @@ static const char pretty_printer_worker_smob_name[] =
|
||||||
static scm_t_bits pretty_printer_smob_tag;
|
static scm_t_bits pretty_printer_smob_tag;
|
||||||
static scm_t_bits pretty_printer_worker_smob_tag;
|
static scm_t_bits pretty_printer_worker_smob_tag;
|
||||||
|
|
||||||
/* Global list of pretty-printers. */
|
/* The global pretty-printer list. */
|
||||||
static const char pretty_printer_list_name[] = "*pretty-printers*";
|
static SCM pretty_printer_list;
|
||||||
|
|
||||||
/* The *pretty-printer* variable. */
|
|
||||||
static SCM pretty_printer_list_var;
|
|
||||||
|
|
||||||
/* gdb:pp-type-error. */
|
/* gdb:pp-type-error. */
|
||||||
static SCM pp_type_error_symbol;
|
static SCM pp_type_error_symbol;
|
||||||
|
@ -239,6 +236,29 @@ gdbscm_set_pretty_printer_enabled_x (SCM self, SCM enabled)
|
||||||
|
|
||||||
return SCM_UNSPECIFIED;
|
return SCM_UNSPECIFIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (pretty-printers) -> list
|
||||||
|
Returns the list of global pretty-printers. */
|
||||||
|
|
||||||
|
static SCM
|
||||||
|
gdbscm_pretty_printers (void)
|
||||||
|
{
|
||||||
|
return pretty_printer_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (set-pretty-printers! list) -> unspecified
|
||||||
|
Set the global pretty-printers list. */
|
||||||
|
|
||||||
|
static SCM
|
||||||
|
gdbscm_set_pretty_printers_x (SCM printers)
|
||||||
|
{
|
||||||
|
SCM_ASSERT_TYPE (gdbscm_is_true (scm_list_p (printers)), printers,
|
||||||
|
SCM_ARG1, FUNC_NAME, _("list"));
|
||||||
|
|
||||||
|
pretty_printer_list = printers;
|
||||||
|
|
||||||
|
return SCM_UNSPECIFIED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Administrivia for pretty-printer-worker smobs.
|
/* Administrivia for pretty-printer-worker smobs.
|
||||||
These are created when a matcher recognizes a value. */
|
These are created when a matcher recognizes a value. */
|
||||||
|
@ -457,11 +477,8 @@ ppscm_find_pretty_printer_from_progspace (SCM value)
|
||||||
static SCM
|
static SCM
|
||||||
ppscm_find_pretty_printer_from_gdb (SCM value)
|
ppscm_find_pretty_printer_from_gdb (SCM value)
|
||||||
{
|
{
|
||||||
SCM pp_list, pp;
|
SCM pp = ppscm_search_pp_list (pretty_printer_list, value);
|
||||||
|
|
||||||
/* Fetch the global pretty printer list. */
|
|
||||||
pp_list = scm_variable_ref (pretty_printer_list_var);
|
|
||||||
pp = ppscm_search_pp_list (pp_list, value);
|
|
||||||
return pp;
|
return pp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1074,6 +1091,15 @@ Create a <gdb:pretty-printer-worker> object.\n\
|
||||||
"\
|
"\
|
||||||
Return #t if the object is a <gdb:pretty-printer-worker> object." },
|
Return #t if the object is a <gdb:pretty-printer-worker> object." },
|
||||||
|
|
||||||
|
{ "pretty-printers", 0, 0, 0, gdbscm_pretty_printers,
|
||||||
|
"\
|
||||||
|
Return the list of global pretty-printers." },
|
||||||
|
|
||||||
|
{ "set-pretty-printers!", 1, 0, 0,
|
||||||
|
gdbscm_set_pretty_printers_x,
|
||||||
|
"\
|
||||||
|
Set the list of global pretty-printers." },
|
||||||
|
|
||||||
END_FUNCTIONS
|
END_FUNCTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1094,12 +1120,7 @@ gdbscm_initialize_pretty_printers (void)
|
||||||
|
|
||||||
gdbscm_define_functions (pretty_printer_functions, 1);
|
gdbscm_define_functions (pretty_printer_functions, 1);
|
||||||
|
|
||||||
scm_c_define (pretty_printer_list_name, SCM_EOL);
|
pretty_printer_list = SCM_EOL;
|
||||||
|
|
||||||
pretty_printer_list_var
|
|
||||||
= scm_c_private_variable (gdbscm_module_name,
|
|
||||||
pretty_printer_list_name);
|
|
||||||
gdb_assert (!gdbscm_is_false (pretty_printer_list_var));
|
|
||||||
|
|
||||||
pp_type_error_symbol = scm_from_latin1_symbol ("gdb:pp-type-error");
|
pp_type_error_symbol = scm_from_latin1_symbol ("gdb:pp-type-error");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue