@@ -519,16 +519,26 @@ def do_count(s: str) -> int:
519519def do_count(s):
520520 s, r0 :: str
521521 r1 :: native_int
522- r2 :: bit
523- r3 :: object
524- r4 :: int
522+ r2, r3, r4 :: bit
523+ r5, r6, r7 :: int
525524L0:
526525 r0 = 'x'
527526 r1 = CPyStr_Count(s, r0, 0)
528527 r2 = r1 >= 0 :: signed
529- r3 = box(native_int, r1)
530- r4 = unbox(int, r3)
531- return r4
528+ r3 = r1 <= 4611686018427387903 :: signed
529+ if r3 goto L1 else goto L2 :: bool
530+ L1:
531+ r4 = r1 >= -4611686018427387904 :: signed
532+ if r4 goto L3 else goto L2 :: bool
533+ L2:
534+ r5 = CPyTagged_FromInt64(r1)
535+ r6 = r5
536+ goto L4
537+ L3:
538+ r7 = r1 << 1
539+ r6 = r7
540+ L4:
541+ return r6
532542
533543[case testCountStart]
534544from typing import NewType, Union
@@ -542,16 +552,26 @@ def do_count(s, start):
542552 start :: int
543553 r0 :: str
544554 r1 :: native_int
545- r2 :: bit
546- r3 :: object
547- r4 :: int
555+ r2, r3, r4 :: bit
556+ r5, r6, r7 :: int
548557L0:
549558 r0 = 'x'
550559 r1 = CPyStr_Count(s, r0, start)
551560 r2 = r1 >= 0 :: signed
552- r3 = box(native_int, r1)
553- r4 = unbox(int, r3)
554- return r4
561+ r3 = r1 <= 4611686018427387903 :: signed
562+ if r3 goto L1 else goto L2 :: bool
563+ L1:
564+ r4 = r1 >= -4611686018427387904 :: signed
565+ if r4 goto L3 else goto L2 :: bool
566+ L2:
567+ r5 = CPyTagged_FromInt64(r1)
568+ r6 = r5
569+ goto L4
570+ L3:
571+ r7 = r1 << 1
572+ r6 = r7
573+ L4:
574+ return r6
555575
556576[case testCountStartEnd]
557577from typing import NewType, Union
@@ -565,13 +585,24 @@ def do_count(s, start, end):
565585 start, end :: int
566586 r0 :: str
567587 r1 :: native_int
568- r2 :: bit
569- r3 :: object
570- r4 :: int
588+ r2, r3, r4 :: bit
589+ r5, r6, r7 :: int
571590L0:
572591 r0 = 'x'
573592 r1 = CPyStr_CountFull(s, r0, start, end)
574593 r2 = r1 >= 0 :: signed
575- r3 = box(native_int, r1)
576- r4 = unbox(int, r3)
577- return r4
594+ r3 = r1 <= 4611686018427387903 :: signed
595+ if r3 goto L1 else goto L2 :: bool
596+ L1:
597+ r4 = r1 >= -4611686018427387904 :: signed
598+ if r4 goto L3 else goto L2 :: bool
599+ L2:
600+ r5 = CPyTagged_FromInt64(r1)
601+ r6 = r5
602+ goto L4
603+ L3:
604+ r7 = r1 << 1
605+ r6 = r7
606+ L4:
607+ return r6
608+
0 commit comments