0.62:\r
\r
+- read-line: handle \r\n\r
+- flush output buffer before reading line\r
+- print: only flush in stdio stream\r
+- ignore errors from flush\r
- can-read-line?\r
- client connections broken\r
- vocabulary section: what is the dictionary?\r
- listener backspace overzealous\r
- SIGBUS handler\r
- handle division by zero\r
-- errors: don't show .factor-rc\r
-- inspector: sort\r
- log-client: fix for native\r
- telnetd: needs own history\r
- multitasking\r
\r
+ native:\r
\r
-- broken pipe errors with httpd and telnetd in cfactor\r
- read#\r
- to_fixnum and friends: error on float\r
ERROR: I/O error: [ "primitive_read_line_fd_8" "Resource temporarily unavailable" ]\r
: value. ( max name value -- )
>r var-name. ": " write r> . ;
-: describe-assoc ( alist -- )
- dup [ car ] inject max-str-length swap
+: ?unparse ( obj -- str )
+ dup string? [ unparse ] unless ;
+
+: alist-keys>str ( alist -- alist )
+ #! Unparse non-string keys.
+ [ unswons ?unparse swons ] inject ;
+
+: alist-sort ( list -- list )
+ [ swap car swap car str-lexi> ] sort ;
+
+: name-padding ( alist -- col )
+ [ car ] inject max-str-length ;
+
+: (describe-assoc) ( alist -- )
+ dup name-padding swap
[ dupd uncons value. ] each drop ;
+
+: describe-assoc ( alist -- )
+ alist-keys>str alist-sort (describe-assoc) ;
: describe-namespace ( namespace -- )
[ vars-values ] bind describe-assoc ;
-: ?unparse ( obj -- str )
- dup string? [ unparse ] unless ;
-
: describe-hashtable ( hashtables -- )
- hash>alist [ unswons ?unparse swons ] inject describe-assoc ;
+ hash>alist describe-assoc ;
: describe ( obj -- )
[
: set ( value variable -- ) namespace set* ;
: put ( variable value -- ) namespace put* ;
-: car-str-sort ( list -- list )
- [ swap car swap car str-lexi> ] sort ;
-
-: vars-values ( -- list ) namespace hash>alist car-str-sort ;
-: vars ( -- list ) vars-values [ car ] inject ;
-: values ( -- list ) vars-values [ cdr ] inject ;
+: vars ( -- list ) namespace hash-keys ;
+: values ( -- list ) namespace hash-values ;
+: vars-values ( -- list ) namespace hash>alist ;
! We don't have bound objects in native Factor.
: namespace? hashtable? ;
: parse-stream ( name stream -- code )
#! Uses the current namespace for temporary variables.
- >r "parse-name" set f r> [ (parse) ] read-lines nreverse ;
+ >r "parse-name" set f r>
+ [ (parse) ] read-lines nreverse
+ "parse-name" off
+ "line-number" off ;
: parse-file ( file -- code )
dup <filecr> parse-stream ;
[
quit-flag not
] [
- dup accept telnet-client
+ dup >r accept telnet-client r>
] while ;
: telnetd ( port -- )