Int() may have finally been beaten into submission. The testing continues…
What shall I do next?
- Make another release?
- Implement bin() and oct()?
- Implement left and right shift?
- Work on constant folding optimization?
- begin retargeting?
- ???
Part of the code to make this happen:
4575 11550 Int_WhichPrefix
4575 A0 00 [2] 11551 ldy #0 ; Get next character from the string
4577 B1 22 [5/6] 11552 lda (Ptr5),Y
11553
4579 A2 10 [2] 11554 ldx #16 ; Presume base 16
11555
457B C9 58 [2] 11556 cmp #'X'
457D F0 04 (4583) [2/3] 11557 beq Int_GotX
11558
457F C9 78 [2] 11559 cmp #'x'
4581 D0 0F (4592) [2/3] 11560 bne Int_NotBase16
11561
4583 11562 Int_GotX
4583 A4 04 [3] 11563 ldy Byt2 ; If it was base 0
4585 F0 50 (45D7) [2/3] 11564 beq Int_GotPrefix ; Switch to base 16
11565
4587 C0 10 [2] 11566 cpy #16 ; If already base 16
4589 F0 4C (45D7) [2/3] 11567 beq Int_GotPrefix ; Keep it
11568
458B C0 22 [2] 11569 cpy #34 ; if less than base 34
458D 90 66 (45F5) [2/3] 11570 bcc Int_InvalidLiteral ; Invalid
11571
458F 4C 4606 [3] 11572 jmp Int_MainLoop ; Treat like a regular character
11573
4592 11574 Int_NotBase16
4592 A2 02 [2] 11575 ldx #2 ; Presume base 2
The test program now looks like this:
#print(int('')) # bad
#print(int(' ')) # bad
#print(int('_0')) # bad
#print(int('0_')) # bad
#print(int('0_ ')) # bad
#print(int('0x')) # bad
#print(int('0x', 0)) # bad
#print(int('0x', 16)) # bad
Base = 10
Number = input('Number? ')
while Number != '':
BaseIn = input('Base? ')
if BaseIn != '':
# Change base
Base = int(BaseIn, 10)
Value = int(Number, Base)
print(Value, hex(Value), Base)
Number = input('Another? ')
print("int()", int())
print("int(False)", int(False))
print("int(True)", int(True))
print("int(123)", int(123))
print("int('123')", int('123'))
print("int(' 123 ')", int(' 123 '))
print("int('1011')", int('1011'))
print("int('1011', 0)", int('1011', 0))
print("int('1011', 2)", int('1011', 2))
print("int('1011', 8)", int('1011', 8))
print("int('1011', 10)", int('1011', 10))
print("int('1011', 16)", int('1011', 16))
print("int('1011', 36)", int('1011', 36))
print("int('+1')", int('+1'))
print("int('-1')", int('-1'))
print("int(' +1')", int(' +1'))
print("int(' -1')", int(' -1'))
print("int('1_2_3')", int('1_2_3'))
print("int('0')", int('0'))
print("int('0', 0)", int('0', 0))
print("int('0', 10)", int('0', 10))
print("int('00')", int('00'))
print("int('00', 0)", int('00', 0))
print("int('00', 10)", int('00', 10))
input('-- more --')
print("int('000')", int('000'))
print("int('000', 0)", int('000', 0))
print("int('000', 10)", int('000', 10))
print("int('0_0')", int('0_0'))
print("int('0_0', 0)", int('0_0', 0))
print("int('0_0', 10)", int('0_0', 10))
print("int('0_0', False)", int('0_0', False))
print("int('0_0', 2)", int('0_0', 2))
print("int('0_0', 8)", int('0_0', 8))
print("int('0_0', 16)", int('0_0', 16))
print("int('1_0', 0)", int('1_0', 0))
print("int('0', 0)", int('0', 0))
print("int('0x10', 0)", int('0x10', 0))
print("int('0o10', 0)", int('0o10', 0))
print("int('0b10', 0)", int('0b10', 0))
print("int('0X10', 0)", int('0X10', 0))
print("int('0O10', 0)", int('0O10', 0))
print("int('0B10', 0)", int('0B10', 0))
print("int('0x_10', 0)", int('0x_10', 0))
print("int('0o_10', 0)", int('0o_10', 0))
print("int('0b_10', 0)", int('0b_10', 0))
input('-- more --')
print("int('0b1', 36)", int('0b1', 36))
print("int('0o1', 36)", int('0o1', 36))
print("int('0x1', 36)", int('0x1', 36))
print("int('0x10', 16)", int('0x10', 16))
print("int('0o10', 8)", int('0o10', 8))
print("int('0b10', 2)", int('0b10', 2))