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