optimizer repair; `unsafe-c{a,d}r' can be dropped
This commit is contained in:
parent
5e49e0adea
commit
848bba80a3
|
@ -724,11 +724,13 @@ scheme_init_unsafe_list (Scheme_Env *env)
|
|||
scheme_null->type = scheme_null_type;
|
||||
|
||||
p = scheme_make_folding_prim(unsafe_car, "unsafe-car", 1, 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL);
|
||||
scheme_add_global_constant ("unsafe-car", p, env);
|
||||
|
||||
p = scheme_make_folding_prim(unsafe_cdr, "unsafe-cdr", 1, 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= (SCHEME_PRIM_IS_UNARY_INLINED
|
||||
| SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL);
|
||||
scheme_add_global_constant ("unsafe-cdr", p, env);
|
||||
|
||||
p = scheme_make_immed_prim(unsafe_mcar, "unsafe-mcar", 1, 1);
|
||||
|
@ -748,7 +750,7 @@ scheme_init_unsafe_list (Scheme_Env *env)
|
|||
scheme_add_global_constant ("unsafe-set-mcdr!", p, env);
|
||||
|
||||
p = scheme_make_immed_prim(unsafe_unbox, "unsafe-unbox", 1, 1);
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
||||
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
||||
scheme_add_global_constant("unsafe-unbox", p, env);
|
||||
|
||||
p = scheme_make_immed_prim(unsafe_unbox_star, "unsafe-unbox*", 1, 1);
|
||||
|
|
|
@ -390,6 +390,12 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
|
|||
note_match(1, vals, warn_info);
|
||||
if ((vals == 1) || (vals < 0)) {
|
||||
/* can omit an unsafe op */
|
||||
int i;
|
||||
for (i = app->num_args; i--; ) {
|
||||
if (!scheme_omittable_expr(app->args[i + 1], 1, fuel - 1, resolved, warn_info,
|
||||
deeper_than + (resolved ? app->num_args : 0)))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user