diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index 3041e287cc..ba9e294ae9 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -1,5 +1,9 @@ 0.62: +- read-line: handle \r\n +- flush output buffer before reading line +- print: only flush in stdio stream +- ignore errors from flush - can-read-line? - client connections broken - vocabulary section: what is the dictionary? @@ -14,8 +18,6 @@ - listener backspace overzealous - SIGBUS handler - handle division by zero -- errors: don't show .factor-rc -- inspector: sort - log-client: fix for native - telnetd: needs own history - multitasking @@ -54,7 +56,6 @@ + native: -- broken pipe errors with httpd and telnetd in cfactor - read# - to_fixnum and friends: error on float ERROR: I/O error: [ "primitive_read_line_fd_8" "Resource temporarily unavailable" ] diff --git a/library/inspector.factor b/library/inspector.factor index 7f7cd0b98a..d9cb269123 100644 --- a/library/inspector.factor +++ b/library/inspector.factor @@ -63,18 +63,31 @@ USE: vocabularies : 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 -- ) [ diff --git a/library/platform/native/namespaces.factor b/library/platform/native/namespaces.factor index fc046856f5..9fc5266606 100644 --- a/library/platform/native/namespaces.factor +++ b/library/platform/native/namespaces.factor @@ -78,12 +78,9 @@ DEFER: >n : 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? ; diff --git a/library/platform/native/parse-stream.factor b/library/platform/native/parse-stream.factor index ae22be1e04..50fad28fe3 100644 --- a/library/platform/native/parse-stream.factor +++ b/library/platform/native/parse-stream.factor @@ -63,7 +63,10 @@ USE: strings : 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 parse-stream ; diff --git a/library/telnetd.factor b/library/telnetd.factor index e0ba8a78c2..840f843d60 100644 --- a/library/telnetd.factor +++ b/library/telnetd.factor @@ -54,7 +54,7 @@ USE: streams [ quit-flag not ] [ - dup accept telnet-client + dup >r accept telnet-client r> ] while ; : telnetd ( port -- )