fix protection of expression for definitions; fixes #hasheq constants and the nbsp Help Desk bug, in particular
svn: r5243
This commit is contained in:
parent
9984b48d88
commit
01e3bf7140
File diff suppressed because it is too large
Load Diff
|
@ -8797,6 +8797,25 @@ static Scheme_Object *write_syntax(Scheme_Object *obj)
|
|||
protect_after = scheme_syntax_protect_afters[c];
|
||||
|
||||
l = rest = (Scheme_Object *)SCHEME_IPTR_VAL(obj);
|
||||
if (protect_after == -2) {
|
||||
/* -2 => protect first element of vector */
|
||||
if (SCHEME_VECTORP(l)) {
|
||||
l = scheme_protect_quote(SCHEME_VEC_ELS(rest)[0]);
|
||||
if (!SAME_OBJ(l, SCHEME_VEC_ELS(rest)[0])) {
|
||||
Scheme_Object *vec;
|
||||
long i, len;
|
||||
len = SCHEME_VEC_SIZE(rest);
|
||||
vec = scheme_make_vector(len, NULL);
|
||||
SCHEME_VEC_ELS(vec)[0] = l;
|
||||
for (i = 1; i < len; i++) {
|
||||
SCHEME_VEC_ELS(vec)[i] = SCHEME_VEC_ELS(rest)[i];
|
||||
}
|
||||
rest = vec;
|
||||
}
|
||||
} else {
|
||||
scheme_signal_error("expected a vector for syntax");
|
||||
}
|
||||
} else {
|
||||
for (c = 0; SCHEME_PAIRP(l) && (c < protect_after); c++) {
|
||||
l = SCHEME_CDR(l);
|
||||
}
|
||||
|
@ -8829,6 +8848,7 @@ static Scheme_Object *write_syntax(Scheme_Object *obj)
|
|||
rest = first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cons(idx, rest);
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ scheme_init_syntax (Scheme_Env *env)
|
|||
define_values_optimize,
|
||||
define_values_resolve, define_values_validate,
|
||||
define_values_execute, define_values_jit,
|
||||
NULL, NULL, 1);
|
||||
NULL, NULL, -2);
|
||||
scheme_register_syntax(SET_EXPD,
|
||||
set_optimize,
|
||||
set_resolve, set_validate,
|
||||
|
@ -277,12 +277,12 @@ scheme_init_syntax (Scheme_Env *env)
|
|||
define_syntaxes_optimize,
|
||||
define_syntaxes_resolve, define_syntaxes_validate,
|
||||
define_syntaxes_execute, define_syntaxes_jit,
|
||||
NULL, NULL, 4);
|
||||
NULL, NULL, -2);
|
||||
scheme_register_syntax(DEFINE_FOR_SYNTAX_EXPD,
|
||||
define_for_syntaxes_optimize,
|
||||
define_for_syntaxes_resolve, define_for_syntaxes_validate,
|
||||
define_for_syntaxes_execute, define_for_syntaxes_jit,
|
||||
NULL, NULL, 4);
|
||||
NULL, NULL, -2);
|
||||
scheme_register_syntax(CASE_LAMBDA_EXPD,
|
||||
case_lambda_optimize,
|
||||
case_lambda_resolve, case_lambda_validate,
|
||||
|
|
Loading…
Reference in New Issue
Block a user