@@ -616,96 +616,81 @@ public static boolean formatToRopeBuilderCanBeFast(Token[] compiledPattern) {
616
616
@ ExplodeLoop
617
617
public static ManagedRope formatToRopeBuilderFast (Token [] compiledPattern , ZonedDateTime dt , Object zone ,
618
618
RubyContext context , RubyLanguage language , Node currentNode , ErrnoErrorNode errnoErrorNode ) {
619
- try {
620
- ManagedRope rope = null ;
619
+ ManagedRope rope = null ;
621
620
622
- for (Token token : compiledPattern ) {
623
- final ManagedRope appendRope ;
621
+ for (Token token : compiledPattern ) {
622
+ final ManagedRope appendRope ;
624
623
625
- switch (token .getFormat ()) {
626
- case FORMAT_ENCODING :
627
- case FORMAT_OUTPUT :
628
- continue ;
624
+ switch (token .getFormat ()) {
625
+ case FORMAT_ENCODING :
626
+ case FORMAT_OUTPUT :
627
+ continue ;
629
628
630
- case FORMAT_STRING :
631
- appendRope = token .getRope ();
632
- break ;
633
- case FORMAT_DAY :
634
- appendRope = RopeConstants .paddedNumber (dt .getDayOfMonth ());
635
- break ;
636
- case FORMAT_HOUR :
637
- appendRope = RopeConstants .paddedNumber (dt .getHour ());
638
- break ;
639
- case FORMAT_MINUTES :
640
- appendRope = RopeConstants .paddedNumber (dt .getMinute ());
641
- break ;
642
- case FORMAT_MONTH :
643
- appendRope = RopeConstants .paddedNumber (dt .getMonthValue ());
644
- break ;
645
- case FORMAT_SECONDS :
646
- appendRope = RopeConstants .paddedNumber (dt .getSecond ());
647
- break ;
629
+ case FORMAT_STRING :
630
+ appendRope = token .getRope ();
631
+ break ;
632
+ case FORMAT_DAY :
633
+ appendRope = RopeConstants .paddedNumber (dt .getDayOfMonth ());
634
+ break ;
635
+ case FORMAT_HOUR :
636
+ appendRope = RopeConstants .paddedNumber (dt .getHour ());
637
+ break ;
638
+ case FORMAT_MINUTES :
639
+ appendRope = RopeConstants .paddedNumber (dt .getMinute ());
640
+ break ;
641
+ case FORMAT_MONTH :
642
+ appendRope = RopeConstants .paddedNumber (dt .getMonthValue ());
643
+ break ;
644
+ case FORMAT_SECONDS :
645
+ appendRope = RopeConstants .paddedNumber (dt .getSecond ());
646
+ break ;
648
647
649
- case FORMAT_YEAR_LONG : {
650
- final int value = dt .getYear ();
651
-
652
- if (value < 1000 || value > 9999 ) {
653
- CompilerDirectives .transferToInterpreterAndInvalidate ();
654
- return formatToRopeBuilder (
655
- compiledPattern ,
656
- dt ,
657
- zone ,
658
- context ,
659
- language ,
660
- currentNode ,
661
- errnoErrorNode ).toRope ();
662
- }
648
+ case FORMAT_YEAR_LONG : {
649
+ final int value = dt .getYear ();
663
650
664
- appendRope = new LazyIntRope (value , UTF8Encoding .INSTANCE , 4 );
665
- }
666
- break ;
651
+ assert value >= 1000 ;
652
+ assert value <= 9999 ;
667
653
668
- case FORMAT_NANOSEC : {
669
- final int nano = dt .getNano ();
670
- assert nano >= 0 ;
671
- assert nano < 1000000000 ;
654
+ appendRope = new LazyIntRope (value , UTF8Encoding .INSTANCE , 4 );
655
+ }
656
+ break ;
672
657
673
- final LazyIntRope nanoRope = new LazyIntRope (nano );
658
+ case FORMAT_NANOSEC : {
659
+ final int nano = dt .getNano ();
660
+ assert nano >= 0 ;
661
+ assert nano < 1000000000 ;
674
662
675
- final int padding = 6 - nanoRope . characterLength ( );
663
+ final LazyIntRope nanoRope = new LazyIntRope ( nano );
676
664
677
- if (padding == 0 ) {
678
- appendRope = nanoRope ;
679
- } else if (padding < 0 ) {
680
- appendRope = new SubstringRope (UTF8Encoding .INSTANCE , nanoRope , 0 , 6 , 6 , CodeRange .CR_7BIT );
681
- } else {
682
- appendRope = new ConcatRope (
683
- nanoRope ,
684
- RopeConstants .paddingZeros (padding ),
685
- UTF8Encoding .INSTANCE ,
686
- CodeRange .CR_7BIT );
687
- }
688
- }
689
- break ;
665
+ final int padding = 6 - nanoRope .characterLength ();
690
666
691
- default :
692
- CompilerDirectives .transferToInterpreterAndInvalidate ();
693
- throw new UnsupportedOperationException ();
667
+ if (padding == 0 ) {
668
+ appendRope = nanoRope ;
669
+ } else if (padding < 0 ) {
670
+ appendRope = new SubstringRope (UTF8Encoding .INSTANCE , nanoRope , 0 , 6 , 6 , CodeRange .CR_7BIT );
671
+ } else {
672
+ appendRope = new ConcatRope (
673
+ nanoRope ,
674
+ RopeConstants .paddingZeros (padding ),
675
+ UTF8Encoding .INSTANCE ,
676
+ CodeRange .CR_7BIT );
677
+ }
694
678
}
679
+ break ;
695
680
696
- if (rope == null ) {
697
- rope = appendRope ;
698
- } else {
699
- rope = new ConcatRope (rope , appendRope , UTF8Encoding .INSTANCE , CodeRange .CR_UNKNOWN );
700
- }
681
+ default :
682
+ CompilerDirectives .shouldNotReachHere ();
683
+ throw new UnsupportedOperationException ();
701
684
}
702
685
703
- return rope ;
704
- } catch ( IndexOutOfBoundsException ioobe ) {
705
- CompilerDirectives . transferToInterpreterAndInvalidate ();
706
- return formatToRopeBuilder ( compiledPattern , dt , zone , context , language , currentNode , errnoErrorNode )
707
- . toRope ();
686
+ if ( rope == null ) {
687
+ rope = appendRope ;
688
+ } else {
689
+ rope = new ConcatRope ( rope , appendRope , UTF8Encoding . INSTANCE , CodeRange . CR_UNKNOWN );
690
+ }
708
691
}
692
+
693
+ return rope ;
709
694
}
710
695
711
696
private static int formatWeekOfYear (ZonedDateTime dt , int firstDayOfWeek ) {
0 commit comments