optimizer: (cdr <list?>) is a <list?>
In case it is not an error, the result is a list.
This commit is contained in:
parent
88b165314a
commit
ff5f2ae69a
|
@ -2535,6 +2535,25 @@
|
||||||
(test-reduce 'k:list-pair? '(cdr (list 1)) #f)
|
(test-reduce 'k:list-pair? '(cdr (list 1)) #f)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(test-comp '(lambda (z)
|
||||||
|
(when (and (list? z) (pair? z))
|
||||||
|
(list? (cdr z))))
|
||||||
|
'(lambda (z)
|
||||||
|
(when (and (list? z) (pair? z))
|
||||||
|
#t)))
|
||||||
|
(test-comp '(lambda (z)
|
||||||
|
(when (list? z)
|
||||||
|
(list? (unsafe-cdr z))))
|
||||||
|
'(lambda (z)
|
||||||
|
(when (list? z)
|
||||||
|
#t)))
|
||||||
|
(test-comp '(lambda (z)
|
||||||
|
(when (list? z)
|
||||||
|
(list? (cdr z))))
|
||||||
|
'(lambda (z)
|
||||||
|
(when (list? z)
|
||||||
|
(begin (cdr z) #t))))
|
||||||
|
|
||||||
(let ([test-bin
|
(let ([test-bin
|
||||||
(lambda (bin-name)
|
(lambda (bin-name)
|
||||||
(test-comp `(lambda (z)
|
(test-comp `(lambda (z)
|
||||||
|
|
|
@ -3441,7 +3441,7 @@ static Scheme_Object *do_expr_implies_predicate(Scheme_Object *expr, Optimize_In
|
||||||
|| SAME_OBJ(app->rator, scheme_unsafe_cdr_proc)) {
|
|| SAME_OBJ(app->rator, scheme_unsafe_cdr_proc)) {
|
||||||
Scheme_Object *p;
|
Scheme_Object *p;
|
||||||
p = do_expr_implies_predicate(app->rand, info, NULL, fuel-1, ignore_vars);
|
p = do_expr_implies_predicate(app->rand, info, NULL, fuel-1, ignore_vars);
|
||||||
if (SAME_OBJ(p, scheme_list_pair_p_proc))
|
if (predicate_implies(p, scheme_list_p_proc))
|
||||||
return scheme_list_p_proc;
|
return scheme_list_p_proc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user