diff --git a/basis/hints/hints.factor b/basis/hints/hints.factor index 3dc8dff936..b5b41603d2 100644 --- a/basis/hints/hints.factor +++ b/basis/hints/hints.factor @@ -4,8 +4,8 @@ USING: accessors arrays assocs byte-arrays byte-vectors classes combinators definitions effects fry generic generic.single generic.standard hashtables io.binary io.encodings io.streams.string kernel kernel.private math math.parser -namespaces parser sbufs sequences splitting splitting.private -strings vectors words ; +namespaces parser sbufs sequences sequences.private splitting +splitting.private strings vectors words ; IN: hints GENERIC: specializer-predicate ( spec -- quot ) @@ -95,9 +95,10 @@ set-specializer set-specializer ] each -\ subseq -{ { fixnum fixnum string } { fixnum fixnum array } } -set-specializer +{ subseq subseq-unsafe } [ + { { fixnum fixnum string } { fixnum fixnum array } } + set-specializer +] each \ reverse! { { string } { array } } diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 018efc85d1..020f2fcfa7 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -311,6 +311,9 @@ C: copy-state #! The check-length call forces partial dispatch [ [ length check-length 0 ] keep ] 2dip (copy) drop ; inline +: subseq-unsafe ( from to seq -- subseq ) + [ subseq>copy (copy) ] keep like ; + PRIVATE> : subseq ( from to seq -- subseq )