mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-13 15:10:34 +02:00
* print.h (scm_print_state): Added highlight_objects.
* print.c (make_print_state, scm_free_print_state): Initialize it to SCM_EOL. (scm_iprin1): Wrap output in '{...}' when object is contained in highlight_objects.
This commit is contained in:
parent
d5ac9b2a8c
commit
d232520a23
2 changed files with 21 additions and 2 deletions
|
@ -160,6 +160,7 @@ make_print_state (void)
|
||||||
pstate->ref_vect = scm_c_make_vector (PSTATE_SIZE, SCM_UNDEFINED);
|
pstate->ref_vect = scm_c_make_vector (PSTATE_SIZE, SCM_UNDEFINED);
|
||||||
pstate->ref_stack = SCM_WRITABLE_VELTS (pstate->ref_vect);
|
pstate->ref_stack = SCM_WRITABLE_VELTS (pstate->ref_vect);
|
||||||
pstate->ceiling = SCM_VECTOR_LENGTH (pstate->ref_vect);
|
pstate->ceiling = SCM_VECTOR_LENGTH (pstate->ref_vect);
|
||||||
|
pstate->highlight_objects = SCM_EOL;
|
||||||
return print_state;
|
return print_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,6 +193,7 @@ scm_free_print_state (SCM print_state)
|
||||||
*/
|
*/
|
||||||
pstate->fancyp = 0;
|
pstate->fancyp = 0;
|
||||||
pstate->revealed = 0;
|
pstate->revealed = 0;
|
||||||
|
pstate->highlight_objects = SCM_EOL;
|
||||||
scm_i_plugin_mutex_lock (&print_state_mutex);
|
scm_i_plugin_mutex_lock (&print_state_mutex);
|
||||||
handle = scm_cons (print_state, print_state_pool);
|
handle = scm_cons (print_state, print_state_pool);
|
||||||
print_state_pool = handle;
|
print_state_pool = handle;
|
||||||
|
@ -350,8 +352,24 @@ scm_print_symbol_name (const char *str, size_t len, SCM port)
|
||||||
SCM_GPROC(s_write, "write", 1, 1, 0, scm_write, g_write);
|
SCM_GPROC(s_write, "write", 1, 1, 0, scm_write, g_write);
|
||||||
SCM_GPROC(s_display, "display", 1, 1, 0, scm_display, g_display);
|
SCM_GPROC(s_display, "display", 1, 1, 0, scm_display, g_display);
|
||||||
|
|
||||||
|
static void iprin1 (SCM exp, SCM port, scm_print_state *pstate);
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_iprin1 (SCM exp, SCM port, scm_print_state *pstate)
|
scm_iprin1 (SCM exp, SCM port, scm_print_state *pstate)
|
||||||
|
{
|
||||||
|
if (pstate->fancyp
|
||||||
|
&& scm_is_true (scm_memq (exp, pstate->highlight_objects)))
|
||||||
|
{
|
||||||
|
scm_lfwrite ("{", 1, port);
|
||||||
|
iprin1 (exp, port, pstate);
|
||||||
|
scm_lfwrite ("}", 1, port);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
iprin1 (exp, port, pstate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
iprin1 (SCM exp, SCM port, scm_print_state *pstate)
|
||||||
{
|
{
|
||||||
switch (SCM_ITAG3 (exp))
|
switch (SCM_ITAG3 (exp))
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef SCM_PRINT_H
|
#ifndef SCM_PRINT_H
|
||||||
#define SCM_PRINT_H
|
#define SCM_PRINT_H
|
||||||
|
|
||||||
/* Copyright (C) 1995,1996,1998,2000,2001, 2003 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1998,2000,2001, 2003, 2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -55,7 +55,7 @@ do { \
|
||||||
#define SCM_COERCE_OUTPORT(p) \
|
#define SCM_COERCE_OUTPORT(p) \
|
||||||
(SCM_PORT_WITH_PS_P (p) ? SCM_PORT_WITH_PS_PORT (p) : p)
|
(SCM_PORT_WITH_PS_P (p) ? SCM_PORT_WITH_PS_PORT (p) : p)
|
||||||
|
|
||||||
#define SCM_PRINT_STATE_LAYOUT "sruwuwuwuwuwpwuwuwuruopr"
|
#define SCM_PRINT_STATE_LAYOUT "sruwuwuwuwuwpwuwuwuruoprpw"
|
||||||
typedef struct scm_print_state {
|
typedef struct scm_print_state {
|
||||||
SCM handle; /* Struct handle */
|
SCM handle; /* Struct handle */
|
||||||
int revealed; /* Has the state escaped to Scheme? */
|
int revealed; /* Has the state escaped to Scheme? */
|
||||||
|
@ -70,6 +70,7 @@ typedef struct scm_print_state {
|
||||||
SCM *ref_stack; /* Stack of references used during
|
SCM *ref_stack; /* Stack of references used during
|
||||||
circular reference detection */
|
circular reference detection */
|
||||||
SCM ref_vect;
|
SCM ref_vect;
|
||||||
|
SCM highlight_objects; /* List of objects to be highlighted */
|
||||||
} scm_print_state;
|
} scm_print_state;
|
||||||
|
|
||||||
SCM_API SCM scm_print_state_vtable;
|
SCM_API SCM scm_print_state_vtable;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue