get rid of prepared_buf

svn: r11532
This commit is contained in:
Matthew Flatt 2008-09-03 20:00:34 +00:00
parent 9c4eaa2c22
commit 1bca658b29
3 changed files with 18 additions and 70 deletions

View File

@ -98,8 +98,6 @@ static Scheme_Object *arity_property;
static Scheme_Object *check_arity_property_value_ok(int argc, Scheme_Object *argv[]);
static char *init_buf(long *len, long *blen);
static char *prepared_buf;
static long prepared_buf_len;
static Scheme_Object *fatal_symbol, *error_symbol, *warning_symbol, *info_symbol, *debug_symbol;
#ifndef INIT_SYSLOG_LEVEL
@ -190,7 +188,9 @@ Scheme_Config *scheme_init_error_escape_proc(Scheme_Config *config)
or error number for scheme_hostname_error()
*/
static long sch_vsprintf(char *s, long maxlen, const char *msg, va_list args)
static long sch_vsprintf(char *s, long maxlen, const char *msg, va_list args, char **_s)
/* NULL for s means allocate the buffer here (and return in (_s), but this function
doesn't allocate before extracting arguments from the stack. */
{
long i, j;
char buf[100];
@ -259,6 +259,11 @@ static long sch_vsprintf(char *s, long maxlen, const char *msg, va_list args)
ip = 0;
dp = 0;
if (!s) {
s = init_buf(NULL, &maxlen);
*_s = s;
}
--maxlen;
i = j = 0;
@ -508,7 +513,7 @@ static long scheme_sprintf(char *s, long maxlen, const char *msg, ...)
GC_CAN_IGNORE va_list args;
HIDE_FROM_XFORM(va_start(args, msg));
len = sch_vsprintf(s, maxlen, msg, args);
len = sch_vsprintf(s, maxlen, msg, args, NULL);
HIDE_FROM_XFORM(va_end(args));
return len;
@ -648,10 +653,6 @@ void scheme_init_error(Scheme_Env *env)
"default-error-value->string-handler",
2, 2);
REGISTER_SO(prepared_buf);
prepared_buf = "";
prepared_buf = init_buf(NULL, &prepared_buf_len);
REGISTER_SO(fatal_symbol);
REGISTER_SO(error_symbol);
REGISTER_SO(warning_symbol);
@ -838,12 +839,6 @@ static char *init_buf(long *len, long *_size)
return (char *)scheme_malloc_atomic(size);
}
void scheme_reset_prepared_error_buffer(void)
{
if (prepared_buf)
prepared_buf = init_buf(NULL, &prepared_buf_len);
}
void
scheme_signal_error (const char *msg, ...)
{
@ -851,15 +846,10 @@ scheme_signal_error (const char *msg, ...)
char *buffer;
long len;
/* Precise GC: Don't allocate before getting hidden args off stack */
buffer = prepared_buf;
HIDE_FROM_XFORM(va_start(args, msg));
len = sch_vsprintf(buffer, prepared_buf_len, msg, args);
len = sch_vsprintf(NULL, 0, msg, args, &buffer);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
if (scheme_current_thread->current_local_env) {
char *s2 = " [during expansion]";
strcpy(buffer + len, s2);
@ -888,15 +878,10 @@ void scheme_warning(char *msg, ...)
char *buffer;
long len;
/* Precise GC: Don't allocate before getting hidden args off stack */
buffer = prepared_buf;
HIDE_FROM_XFORM(va_start(args, msg));
len = sch_vsprintf(buffer, prepared_buf_len, msg, args);
len = sch_vsprintf(NULL, 0, msg, args, &buffer);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
buffer[len++] = '\n';
buffer[len] = 0;
@ -917,15 +902,10 @@ void scheme_log(Scheme_Logger *logger, int level, int flags,
return;
}
/* Precise GC: Don't allocate before getting hidden args off stack */
buffer = prepared_buf;
HIDE_FROM_XFORM(va_start(args, msg));
len = sch_vsprintf(buffer, prepared_buf_len, msg, args);
len = sch_vsprintf(NULL, 0, msg, args, &buffer);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
buffer[len] = 0;
scheme_log_message(logger, level, buffer, len, NULL);
@ -1531,15 +1511,10 @@ void scheme_read_err(Scheme_Object *port,
int show_loc;
Scheme_Object *loc;
/* Precise GC: Don't allocate before getting hidden args off stack */
s = prepared_buf;
HIDE_FROM_XFORM(va_start(args, detail));
slen = sch_vsprintf(s, prepared_buf_len, detail, args);
slen = sch_vsprintf(NULL, 0, detail, args, &s);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
ls = "";
fnlen = 0;
@ -1802,14 +1777,9 @@ void scheme_wrong_syntax(const char *where,
} else {
GC_CAN_IGNORE va_list args;
/* Precise GC: Don't allocate before getting hidden args off stack */
s = prepared_buf;
HIDE_FROM_XFORM(va_start(args, detail));
slen = sch_vsprintf(s, prepared_buf_len, detail, args);
slen = sch_vsprintf(NULL, 0, detail, args, &s);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
}
do_wrong_syntax(where, detail_form, form, s, slen, scheme_null);
@ -1830,14 +1800,9 @@ void scheme_wrong_syntax_with_more_sources(const char *where,
} else {
GC_CAN_IGNORE va_list args;
/* Precise GC: Don't allocate before getting hidden args off stack */
s = prepared_buf;
HIDE_FROM_XFORM(va_start(args, detail));
slen = sch_vsprintf(s, prepared_buf_len, detail, args);
slen = sch_vsprintf(NULL, 0, detail, args, &s);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
}
do_wrong_syntax(where, detail_form, form, s, slen, extra_sources);
@ -1905,14 +1870,9 @@ void scheme_wrong_return_arity(const char *where,
} else {
GC_CAN_IGNORE va_list args;
/* Precise GC: Don't allocate before getting hidden args off stack */
s = prepared_buf;
HIDE_FROM_XFORM(va_start(args, detail));
slen = sch_vsprintf(s, prepared_buf_len, detail, args);
slen = sch_vsprintf(NULL, 0, detail, args, &s);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
}
buffer = init_buf(NULL, &blen);
@ -1990,14 +1950,9 @@ void scheme_raise_out_of_memory(const char *where, const char *msg, ...)
} else {
GC_CAN_IGNORE va_list args;
/* Precise GC: Don't allocate before getting hidden args off stack */
s = prepared_buf;
HIDE_FROM_XFORM(va_start(args, msg));
slen = sch_vsprintf(s, prepared_buf_len, msg, args);
slen = sch_vsprintf(NULL, 0, msg, args, &s);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
}
scheme_raise_exn(MZEXN_FAIL_OUT_OF_MEMORY,
@ -3120,8 +3075,6 @@ scheme_raise_exn(int id, ...)
char *buffer;
/* Precise GC: Don't allocate before getting hidden args off stack */
buffer = prepared_buf;
HIDE_FROM_XFORM(va_start(args, id));
if (id == MZEXN_OTHER)
@ -3135,11 +3088,9 @@ scheme_raise_exn(int id, ...)
msg = mzVA_ARG(args, char*);
alen = sch_vsprintf(buffer, prepared_buf_len, msg, args);
alen = sch_vsprintf(NULL, 0, msg, args, &buffer);
HIDE_FROM_XFORM(va_end(args));
prepared_buf = init_buf(NULL, &prepared_buf_len);
#ifndef NO_SCHEME_EXNS
eargs[0] = scheme_make_immutable_sized_utf8_string(buffer, alen);
eargs[1] = TMP_CMARK_VALUE;

View File

@ -2728,8 +2728,6 @@ void scheme_out_of_string_range(const char *name, const char *which,
const char *scheme_number_suffix(int);
void scheme_reset_prepared_error_buffer(void);
const char *scheme_hostname_error(int err);
char *scheme_make_args_string(char *s, int which, int argc, Scheme_Object **argv, long *olen);

View File

@ -338,7 +338,6 @@ make_a_symbol(const char *name, unsigned int len, int kind)
if (len > scheme_max_found_symbol_name) {
scheme_max_found_symbol_name = len;
scheme_reset_prepared_error_buffer();
}
return (Scheme_Object *) sym;