| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- [case testStrSplit]
- from typing import Optional, List
- def do_split(s: str, sep: Optional[str] = None, max_split: Optional[int] = None) -> List[str]:
- if sep is not None:
- if max_split is not None:
- return s.split(sep, max_split)
- else:
- return s.split(sep)
- return s.split()
- [out]
- def do_split(s, sep, max_split):
- s :: str
- sep :: union[str, None]
- max_split :: union[int, None]
- r0, r1, r2 :: object
- r3 :: bit
- r4 :: object
- r5 :: bit
- r6 :: str
- r7 :: int
- r8 :: list
- r9 :: str
- r10, r11 :: list
- L0:
- if is_error(sep) goto L1 else goto L2
- L1:
- r0 = box(None, 1)
- sep = r0
- L2:
- if is_error(max_split) goto L3 else goto L4
- L3:
- r1 = box(None, 1)
- max_split = r1
- L4:
- r2 = load_address _Py_NoneStruct
- r3 = sep != r2
- if r3 goto L5 else goto L9 :: bool
- L5:
- r4 = load_address _Py_NoneStruct
- r5 = max_split != r4
- if r5 goto L6 else goto L7 :: bool
- L6:
- r6 = cast(str, sep)
- r7 = unbox(int, max_split)
- r8 = CPyStr_Split(s, r6, r7)
- return r8
- L7:
- r9 = cast(str, sep)
- r10 = PyUnicode_Split(s, r9, -1)
- return r10
- L8:
- L9:
- r11 = PyUnicode_Split(s, 0, -1)
- return r11
- [case testStrEquality]
- def eq(x: str, y: str) -> bool:
- return x == y
- def neq(x: str, y: str) -> bool:
- return x != y
- [out]
- def eq(x, y):
- x, y :: str
- r0 :: int32
- r1 :: bit
- r2 :: object
- r3, r4, r5 :: bit
- L0:
- r0 = PyUnicode_Compare(x, y)
- r1 = r0 == -1
- if r1 goto L1 else goto L3 :: bool
- L1:
- r2 = PyErr_Occurred()
- r3 = r2 != 0
- if r3 goto L2 else goto L3 :: bool
- L2:
- r4 = CPy_KeepPropagating()
- L3:
- r5 = r0 == 0
- return r5
- def neq(x, y):
- x, y :: str
- r0 :: int32
- r1 :: bit
- r2 :: object
- r3, r4, r5 :: bit
- L0:
- r0 = PyUnicode_Compare(x, y)
- r1 = r0 == -1
- if r1 goto L1 else goto L3 :: bool
- L1:
- r2 = PyErr_Occurred()
- r3 = r2 != 0
- if r3 goto L2 else goto L3 :: bool
- L2:
- r4 = CPy_KeepPropagating()
- L3:
- r5 = r0 != 0
- return r5
- [case testStrReplace]
- from typing import Optional
- def do_replace(s: str, old_substr: str, new_substr: str, max_count: Optional[int] = None) -> str:
- if max_count is not None:
- return s.replace(old_substr, new_substr, max_count)
- else:
- return s.replace(old_substr, new_substr)
- [out]
- def do_replace(s, old_substr, new_substr, max_count):
- s, old_substr, new_substr :: str
- max_count :: union[int, None]
- r0, r1 :: object
- r2 :: bit
- r3 :: int
- r4, r5 :: str
- L0:
- if is_error(max_count) goto L1 else goto L2
- L1:
- r0 = box(None, 1)
- max_count = r0
- L2:
- r1 = load_address _Py_NoneStruct
- r2 = max_count != r1
- if r2 goto L3 else goto L4 :: bool
- L3:
- r3 = unbox(int, max_count)
- r4 = CPyStr_Replace(s, old_substr, new_substr, r3)
- return r4
- L4:
- r5 = PyUnicode_Replace(s, old_substr, new_substr, -1)
- return r5
- L5:
- unreachable
- [case testStrToBool]
- def is_true(x: str) -> bool:
- if x:
- return True
- else:
- return False
- [out]
- def is_true(x):
- x :: str
- r0 :: bit
- L0:
- r0 = CPyStr_IsTrue(x)
- if r0 goto L1 else goto L2 :: bool
- L1:
- return 1
- L2:
- return 0
- L3:
- unreachable
- [case testStringFormatMethod]
- def f(s: str, num: int) -> None:
- s1 = "Hi! I'm {}, and I'm {} years old.".format(s, num)
- s2 = ''.format()
- s3 = 'abc'.format()
- s4 = '}}{}{{{}}}{{{}'.format(num, num, num)
- [out]
- def f(s, num):
- s :: str
- num :: int
- r0, r1, r2, r3, r4, s1, r5, s2, r6, s3, r7, r8, r9, r10, r11, r12, r13, s4 :: str
- L0:
- r0 = CPyTagged_Str(num)
- r1 = "Hi! I'm "
- r2 = ", and I'm "
- r3 = ' years old.'
- r4 = CPyStr_Build(5, r1, s, r2, r0, r3)
- s1 = r4
- r5 = ''
- s2 = r5
- r6 = 'abc'
- s3 = r6
- r7 = CPyTagged_Str(num)
- r8 = CPyTagged_Str(num)
- r9 = CPyTagged_Str(num)
- r10 = '}'
- r11 = '{'
- r12 = '}{'
- r13 = CPyStr_Build(6, r10, r7, r11, r8, r12, r9)
- s4 = r13
- return 1
- [case testFStrings]
- def f(var: str, num: int) -> None:
- s1 = f"Hi! I'm {var}. I am {num} years old."
- s2 = f'Hello {var:>{num}}'
- s3 = f''
- s4 = f'abc'
- [out]
- def f(var, num):
- var :: str
- num :: int
- r0, r1, r2, r3, r4, s1, r5, r6, r7, r8, r9, r10, r11 :: str
- r12 :: object
- r13 :: str
- r14 :: list
- r15, r16, r17 :: ptr
- r18, s2, r19, s3, r20, s4 :: str
- L0:
- r0 = "Hi! I'm "
- r1 = '. I am '
- r2 = CPyTagged_Str(num)
- r3 = ' years old.'
- r4 = CPyStr_Build(5, r0, var, r1, r2, r3)
- s1 = r4
- r5 = ''
- r6 = 'Hello '
- r7 = '{:{}}'
- r8 = '>'
- r9 = CPyTagged_Str(num)
- r10 = CPyStr_Build(2, r8, r9)
- r11 = 'format'
- r12 = CPyObject_CallMethodObjArgs(r7, r11, var, r10, 0)
- r13 = cast(str, r12)
- r14 = PyList_New(2)
- r15 = get_element_ptr r14 ob_item :: PyListObject
- r16 = load_mem r15 :: ptr*
- set_mem r16, r6 :: builtins.object*
- r17 = r16 + WORD_SIZE*1
- set_mem r17, r13 :: builtins.object*
- keep_alive r14
- r18 = PyUnicode_Join(r5, r14)
- s2 = r18
- r19 = ''
- s3 = r19
- r20 = 'abc'
- s4 = r20
- return 1
- [case testStringFormattingCStyle]
- def f(var: str, num: int) -> None:
- s1 = "Hi! I'm %s." % var
- s2 = "I am %d years old." % num
- s3 = "Hi! I'm %s. I am %d years old." % (var, num)
- s4 = "Float: %f" % num
- [typing fixtures/typing-full.pyi]
- [out]
- def f(var, num):
- var :: str
- num :: int
- r0, r1, r2, s1, r3, r4, r5, r6, s2, r7, r8, r9, r10, r11, s3, r12 :: str
- r13, r14 :: object
- r15, s4 :: str
- L0:
- r0 = "Hi! I'm "
- r1 = '.'
- r2 = CPyStr_Build(3, r0, var, r1)
- s1 = r2
- r3 = CPyTagged_Str(num)
- r4 = 'I am '
- r5 = ' years old.'
- r6 = CPyStr_Build(3, r4, r3, r5)
- s2 = r6
- r7 = CPyTagged_Str(num)
- r8 = "Hi! I'm "
- r9 = '. I am '
- r10 = ' years old.'
- r11 = CPyStr_Build(5, r8, var, r9, r7, r10)
- s3 = r11
- r12 = 'Float: %f'
- r13 = box(int, num)
- r14 = PyNumber_Remainder(r12, r13)
- r15 = cast(str, r14)
- s4 = r15
- return 1
- [case testDecode]
- def f(b: bytes) -> None:
- b.decode()
- b.decode('utf-8')
- b.decode('utf-8', 'backslashreplace')
- [out]
- def f(b):
- b :: bytes
- r0, r1, r2, r3, r4, r5 :: str
- L0:
- r0 = CPy_Decode(b, 0, 0)
- r1 = 'utf-8'
- r2 = CPy_Decode(b, r1, 0)
- r3 = 'utf-8'
- r4 = 'backslashreplace'
- r5 = CPy_Decode(b, r3, r4)
- return 1
- [case testEncode]
- def f(s: str) -> None:
- s.encode()
- s.encode('utf-8')
- s.encode('ascii', 'backslashreplace')
- [out]
- def f(s):
- s :: str
- r0 :: bytes
- r1 :: str
- r2 :: bytes
- r3, r4 :: str
- r5 :: bytes
- L0:
- r0 = CPy_Encode(s, 0, 0)
- r1 = 'utf-8'
- r2 = CPy_Encode(s, r1, 0)
- r3 = 'ascii'
- r4 = 'backslashreplace'
- r5 = CPy_Encode(s, r3, r4)
- return 1
|