classes.builtin arrays quotations ;
IN: memory.tests
+[ [ ] instances ] must-infer
+
! Code GC wasn't kicking in when needed
: leak-step 800000 f <array> 1quotation call drop ;
! Copyright (C) 2005, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: kernel continuations sequences arrays system ;
+USING: kernel continuations sequences vectors arrays system math ;
IN: memory
: (each-object) ( quot: ( obj -- ) -- )
: each-object ( quot -- )
begin-scan [ (each-object) ] [ end-scan ] [ ] cleanup ; inline
+: count-instances ( quot -- n )
+ 0 swap [ 1 0 ? + ] compose each-object ; inline
+
: instances ( quot -- seq )
- pusher [ each-object ] dip >array ; inline
+ #! To ensure we don't need to grow the vector while scanning
+ #! the heap, we do two scans, the first one just counts the
+ #! number of objects that satisfy the predicate.
+ [ count-instances 100 + <vector> ] keep swap
+ [ [ push-if ] 2curry each-object ] keep >array ; inline
: save ( -- ) image save-image ;