@@ -627,8 +627,8 @@ pub(crate) fn string_methods(builder: &mut MethodsBuilder) {
627
627
heap : & ' v Heap ,
628
628
) -> starlark:: Result < ValueOfUnchecked < ' v , String > > {
629
629
#[ inline( always) ]
630
- fn as_str < ' v > ( x : Value < ' v > ) -> anyhow:: Result < & ' v str > {
631
- < & str > :: unpack_named_param ( x, "to_join" )
630
+ fn as_str < ' v > ( x : Value < ' v > ) -> anyhow:: Result < StringValue < ' v > > {
631
+ StringValue :: unpack_named_param ( x, "to_join" )
632
632
}
633
633
634
634
let mut it = to_join. get ( ) . iterate ( heap) ?;
@@ -637,13 +637,12 @@ pub(crate) fn string_methods(builder: &mut MethodsBuilder) {
637
637
Some ( x1) => {
638
638
match it. next ( ) {
639
639
None => {
640
- as_str ( x1) ?;
641
640
// If there is a singleton we can avoid reallocation
642
- Ok ( ValueOfUnchecked :: new ( x1) )
641
+ Ok ( as_str ( x1) ? . to_value_of_unchecked ( ) . cast ( ) )
643
642
}
644
643
Some ( x2) => {
645
- let s1 = as_str ( x1) ?;
646
- let s2 = as_str ( x2) ?;
644
+ let s1 = as_str ( x1) ?. as_str ( ) ;
645
+ let s2 = as_str ( x2) ?. as_str ( ) ;
647
646
// guess towards the upper bound, since we throw away over-allocations quickly
648
647
// include a buffer (20 bytes)
649
648
let n = it. size_hint ( ) . 0 + 2 ;
@@ -655,9 +654,9 @@ pub(crate) fn string_methods(builder: &mut MethodsBuilder) {
655
654
r. push_str ( s2) ;
656
655
for x in it {
657
656
r. push_str ( this) ;
658
- r. push_str ( as_str ( x) ?) ;
657
+ r. push_str ( as_str ( x) ?. as_str ( ) ) ;
659
658
}
660
- Ok ( ValueOfUnchecked :: new ( heap. alloc ( r ) ) )
659
+ Ok ( heap. alloc_typed_unchecked ( r ) )
661
660
}
662
661
}
663
662
}
0 commit comments