]> gitweb.factorcode.org Git - factor.git/blob - core/summary/summary.factor
Switch to https urls
[factor.git] / core / summary / summary.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs classes continuations kernel make math
4 math.parser sequences sets strings ;
5 IN: summary
6
7 GENERIC: summary ( object -- string )
8
9 : object-summary ( object -- string ) class-of name>> ; inline
10
11 : container-summary ( obj size word -- str )
12     [ object-summary ] 2dip [
13         [ % " with " % ] [ # ] [ " " % % ] tri*
14     ] "" make ;
15
16 GENERIC: tuple-summary ( object -- string )
17
18 M: assoc tuple-summary
19     dup assoc-size "entries" container-summary ;
20
21 M: object tuple-summary
22     object-summary ;
23
24 M: set tuple-summary
25     dup cardinality "members" container-summary ;
26
27 M: tuple summary
28     tuple-summary ;
29
30 M: object summary object-summary ;
31
32 M: sequence summary
33     dup length "elements" container-summary ;
34
35 M: string summary
36     dup length "code points" container-summary ;
37
38 ! Override sequence => integer instance
39 M: f summary object-summary ;
40
41 M: integer summary object-summary ;
42
43 : safe-summary ( object -- string )
44     [ summary ]
45     [ drop object-summary "~summary error: " "~" surround ]
46     recover ;