File tree Expand file tree Collapse file tree 1 file changed +20
-0
lines changed Expand file tree Collapse file tree 1 file changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -1869,6 +1869,11 @@ pub pure fn escape_unicode(s: &str) -> ~str {
18691869 move out
18701870}
18711871
1872+ extern mod rustrt {
1873+ #[ rust_stack]
1874+ pure fn upcall_str_new_shared ( cstr : * libc:: c_char , len : size_t ) -> @str ;
1875+ }
1876+
18721877/// Unsafe operations
18731878pub mod raw {
18741879
@@ -2090,6 +2095,7 @@ pub trait StrSlice {
20902095 pure fn trim_left ( ) -> ~str ;
20912096 pure fn trim_right ( ) -> ~str ;
20922097 pure fn to_unique ( ) -> ~str ;
2098+ pure fn to_managed ( ) -> @str ;
20932099 pure fn char_at ( i : uint ) -> char ;
20942100}
20952101
@@ -2213,6 +2219,14 @@ impl &str: StrSlice {
22132219 #[ inline]
22142220 pure fn to_unique ( ) -> ~str { self . slice ( 0 , self . len ( ) ) }
22152221
2222+ #[ inline]
2223+ pure fn to_managed ( ) -> @str {
2224+ do str:: as_buf ( self ) |p, _len| {
2225+ rustrt:: upcall_str_new_shared ( p as * libc:: c_char ,
2226+ self . len ( ) as size_t )
2227+ }
2228+ }
2229+
22162230 #[ inline]
22172231 pure fn char_at ( i : uint ) -> char { char_at ( self , i) }
22182232}
@@ -3190,4 +3204,10 @@ mod tests {
31903204 assert escape_default(~"\U 0001d4ea\r " ) == ~"\\ U0001d4ea \\ r";
31913205 }
31923206
3207+ #[test]
3208+ fn test_to_managed() {
3209+ assert (~" abc").to_managed() == @" abc";
3210+ assert view(" abcdef", 1, 5).to_managed() == @" bcde" ;
3211+ }
3212+
31933213}
You can’t perform that action at this time.
0 commit comments