diff --git a/extra/bencode/bencode-tests.factor b/extra/bencode/bencode-tests.factor index 1d18c6c205..2ef6796681 100644 --- a/extra/bencode/bencode-tests.factor +++ b/extra/bencode/bencode-tests.factor @@ -1,4 +1,4 @@ -USING: bencode tools.test ; +USING: bencode linked-assocs tools.test ; { "i42e" } [ 42 >bencode ] unit-test { "i0e" } [ 0 >bencode ] unit-test @@ -8,6 +8,6 @@ USING: bencode tools.test ; { { "spam" 42 } } [ "l4:spami42ee" bencode> ] unit-test -{ H{ { "bar" "spam" } { "foo" 42 } } } [ +{ LH{ { "bar" "spam" } { "foo" 42 } } } [ "d3:bar4:spam3:fooi42ee" bencode> ] unit-test diff --git a/extra/bencode/bencode.factor b/extra/bencode/bencode.factor index 2347595ae4..7173b93c12 100644 --- a/extra/bencode/bencode.factor +++ b/extra/bencode/bencode.factor @@ -1,6 +1,6 @@ -USING: arrays assocs combinators hashtables io -io.encodings.ascii io.encodings.string io.streams.string kernel -math math.parser sequences strings ; +USING: arrays assocs combinators io io.encodings.ascii +io.encodings.string io.streams.string kernel linked-assocs math +math.parser sequences strings ; IN: bencode GENERIC: >bencode ( obj -- bencode ) @@ -18,10 +18,10 @@ M: assoc >bencode [ [ >bencode ] bi@ append ] { } assoc>map concat "d" "e" surround ; -number ; @@ -31,11 +31,13 @@ DEFER: read-bencode : read-dictionary ( -- obj ) [ read-bencode [ read-bencode 2array ] [ f ] if* dup - ] [ ] produce nip >hashtable ; + ] [ ] produce nip >linked-hash ; : read-string ( prefix -- obj ) ":" read-until CHAR: : assert= swap prefix - string>number read ascii decode ; + string>number read "" like ; + +PRIVATE> : read-bencode ( -- obj ) read1 { @@ -46,7 +48,5 @@ DEFER: read-bencode [ read-string ] } case ; -PRIVATE> - : bencode> ( bencode -- obj ) [ read-bencode ] with-string-reader ;