summaryrefslogtreecommitdiff
path: root/libguile
diff options
context:
space:
mode:
Diffstat (limited to 'libguile')
-rw-r--r--libguile/print.c3
-rw-r--r--libguile/strings.c17
-rw-r--r--libguile/strings.h2
3 files changed, 22 insertions, 0 deletions
diff --git a/libguile/print.c b/libguile/print.c
index dbc6e96ed..a77f1a8b4 100644
--- a/libguile/print.c
+++ b/libguile/print.c
@@ -609,6 +609,9 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
break;
}
break;
+ case scm_tc7_stringbuf:
+ scm_i_print_stringbuf (exp, port, pstate);
+ break;
case scm_tc7_string:
if (SCM_WRITINGP (pstate))
{
diff --git a/libguile/strings.c b/libguile/strings.c
index 8ee909bca..1f492bd0c 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -261,6 +261,23 @@ scm_i_pthread_mutex_t stringbuf_write_mutex = SCM_I_PTHREAD_MUTEX_INITIALIZER;
#define IS_SH_STRING(str) (SCM_CELL_TYPE(str)==SH_STRING_TAG)
+void
+scm_i_print_stringbuf (SCM exp, SCM port, scm_print_state *pstate)
+{
+ SCM str;
+
+ scm_i_pthread_mutex_lock (&stringbuf_write_mutex);
+ SET_STRINGBUF_SHARED (exp);
+ scm_i_pthread_mutex_unlock (&stringbuf_write_mutex);
+
+ str = scm_double_cell (RO_STRING_TAG, SCM_UNPACK(exp),
+ 0, STRINGBUF_LENGTH (exp));
+
+ scm_puts ("#<stringbuf ", port);
+ scm_iprin1 (str, port, pstate);
+ scm_puts (">", port);
+}
+
SCM scm_nullstr;
/* Create a scheme string with space for LEN 8-bit Latin-1-encoded
diff --git a/libguile/strings.h b/libguile/strings.h
index 445d9c878..130c436a6 100644
--- a/libguile/strings.h
+++ b/libguile/strings.h
@@ -179,6 +179,8 @@ SCM_API SCM scm_makfromstrs (int argc, char **argv);
#define SCM_I_STRINGBUF_F_SHARED 0x100
#define SCM_I_STRINGBUF_F_WIDE 0x400
+SCM_INTERNAL void scm_i_print_stringbuf (SCM exp, SCM port,
+ scm_print_state *pstate);
/* internal accessor functions. Arguments must be valid. */