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-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
|
||||
(lambda (bin-name)
|
||||
(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)) {
|
||||
Scheme_Object *p;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user