minor bytecode-compiler fix

A bogus flag was propagated to closure information. This flag
was ignored by the validator, but not `zo-parse'. Make the validator
reject the bogus flag, too, while fixing the compiler.
This commit is contained in:
Matthew Flatt 2012-11-19 09:36:16 -07:00
parent 702df4b07a
commit be20ecc8f3
3 changed files with 5 additions and 3 deletions

View File

@ -1933,7 +1933,7 @@ resolve_closure_compilation(Scheme_Object *_data, Resolve_Info *info,
if (!convert_boxes)
convert_boxes = allocate_boxmap(offset);
scheme_boxmap_set(convert_boxes, cp, bit, 0);
if (need_flags)
if (need_flags && (bit > CLOS_TYPE_TYPE_OFFSET))
scheme_boxmap_set(closure_map, cp + data->num_params, bit, need_flags);
}
closure_map[cp] = old_pos;

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "5.3.1.7"
#define MZSCHEME_VERSION "5.3.1.8"
#define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 3
#define MZSCHEME_VERSION_Z 1
#define MZSCHEME_VERSION_W 7
#define MZSCHEME_VERSION_W 8
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -1029,6 +1029,8 @@ static void validate_unclosed_procedure(Mz_CPort *port, Scheme_Object *expr,
int pos = data->num_params + i;
int ct;
ct = scheme_boxmap_get(map, pos, data->closure_size);
if (ct == CLOS_TYPE_BOXED)
scheme_ill_formed_code(port);
if (ct > CLOS_TYPE_TYPE_OFFSET) {
if (vld != (VALID_TYPED + (ct - CLOS_TYPE_TYPE_OFFSET)))
vld = VALID_NOT;