printer: use si_do_write_sequence in recently optimized printing routines

We don't need cl_write_string, since the CLOS stuff inside there
    is just for optimization. Improves performance for ANSI streams.
This commit is contained in:
Marius Gerbershagen 2018-06-05 21:30:29 +02:00
parent 25e1417dac
commit 706847293d
4 changed files with 12 additions and 12 deletions

View file

@ -4740,12 +4740,12 @@ writestr_stream(const char *s, cl_object strm)
ecl_char_set(buffer, i++, (ecl_character) *s++);
if (i >= size) {
si_fill_pointer_set(buffer, ecl_make_fixnum(size));
cl_write_string(2, buffer, strm);
si_do_write_sequence(buffer, strm, ecl_make_fixnum(0), ECL_NIL);
i = 0;
}
}
si_fill_pointer_set(buffer, ecl_make_fixnum(i));
cl_write_string(2, buffer, strm);
si_do_write_sequence(buffer, strm, ecl_make_fixnum(0), ECL_NIL);
si_put_buffer_string(buffer);
}

View file

@ -43,13 +43,13 @@ _ecl_write_addr(void *x, cl_object stream)
}
if (buffer_ndx >= buffer_size) {
si_fill_pointer_set(buffer, ecl_make_fixnum(buffer_size));
cl_write_string(2, buffer, stream);
si_do_write_sequence(buffer, stream, ecl_make_fixnum(0), ECL_NIL);
buffer_ndx = 0;
}
}
}
si_fill_pointer_set(buffer, ecl_make_fixnum(buffer_ndx));
cl_write_string(2, buffer, stream);
si_do_write_sequence(buffer, stream, ecl_make_fixnum(0), ECL_NIL);
si_put_buffer_string(buffer);
}

View file

@ -149,19 +149,19 @@ void
_ecl_write_string(cl_object x, cl_object stream)
{
if (!ecl_print_escape() && !ecl_print_readably()) {
cl_write_string(2, x, stream);
si_do_write_sequence(x, stream, ecl_make_fixnum(0), ECL_NIL);
} else {
cl_index ndx, ndx_start;
ecl_write_char('"', stream);
for (ndx = ndx_start = 0; ndx < x->string.fillp; ndx++) {
ecl_character c = x->string.self[ndx];
if (c == '"' || c == '\\') {
cl_write_string(6, x, stream, @':start', ecl_make_fixnum(ndx_start), @':end', ecl_make_fixnum(ndx));
si_do_write_sequence(x, stream, ecl_make_fixnum(ndx_start), ecl_make_fixnum(ndx));
ecl_write_char('\\', stream);
ndx_start = ndx;
}
}
cl_write_string(4, x, stream, @':start', ecl_make_fixnum(ndx_start));
si_do_write_sequence(x, stream, ecl_make_fixnum(ndx_start), ECL_NIL);
ecl_write_char('"', stream);
}
}
@ -171,19 +171,19 @@ void
_ecl_write_base_string(cl_object x, cl_object stream)
{
if (!ecl_print_escape() && !ecl_print_readably()) {
cl_write_string(2, x, stream);
si_do_write_sequence(x, stream, ecl_make_fixnum(0), ECL_NIL);
} else {
cl_index ndx, ndx_start;
ecl_write_char('"', stream);
for (ndx = ndx_start = 0; ndx < x->base_string.fillp; ndx++) {
ecl_character c = x->base_string.self[ndx];
if (c == '"' || c == '\\') {
cl_write_string(6, x, stream, @':start', ecl_make_fixnum(ndx_start), @':end', ecl_make_fixnum(ndx));
si_do_write_sequence(x, stream, ecl_make_fixnum(ndx_start), ecl_make_fixnum(ndx));
ecl_write_char('\\', stream);
ndx_start = ndx;
}
}
cl_write_string(4, x, stream, @':start', ecl_make_fixnum(ndx_start));
si_do_write_sequence(x, stream, ecl_make_fixnum(ndx_start), ECL_NIL);
ecl_write_char('"', stream);
}
}

View file

@ -106,7 +106,7 @@ needs_to_be_escaped(cl_object s, cl_object readtable, cl_object print_case)
ecl_char_set(buffer, buffer_ndx++, c); \
if (buffer_ndx >= buffer_size) { \
si_fill_pointer_set(buffer, ecl_make_fixnum(buffer_size)); \
cl_write_string(2, buffer, stream); \
si_do_write_sequence(buffer, stream, ecl_make_fixnum(0), ECL_NIL);\
buffer_ndx = 0; \
}
@ -160,7 +160,7 @@ write_symbol_string(cl_object s, int action, cl_object print_case,
if (escape)
buffer_write_char('|', buffer, stream, buffer_ndx, buffer_size);
si_fill_pointer_set(buffer, ecl_make_fixnum(buffer_ndx));
cl_write_string(2, buffer, stream);
si_do_write_sequence(buffer, stream, ecl_make_fixnum(0), ECL_NIL);
si_put_buffer_string(buffer);
}