1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-06 15:41:05 +00:00

Moved const/volatile to SymbolType.

This commit is contained in:
jespergravgaard 2021-04-30 15:39:29 +02:00
commit 6e0cacc908
87 changed files with 15684 additions and 15378 deletions
src
main
test

@ -1,4 +1,244 @@
//KICKC FRAGMENT CACHE 108dd16dc1 108dd18d7f
//FRAGMENT vbuzz=vbuc1
ldz #{c1}
//FRAGMENT vbuzz_lt_vbuc1_then_la1
cpz #{c1}
bcc {la1}
//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz
tza
tax
sta {c1},x
//FRAGMENT vbuzz=_inc_vbuzz
inz
//FRAGMENT vbsz1=_deref_pbsc1
lda {c1}
sta {z1}
//FRAGMENT vbsz1=_neg_vbsz2
lda {z2}
neg
sta {z1}
//FRAGMENT _deref_pbsc1=vbsz1
lda {z1}
sta {c1}
//FRAGMENT vbsz1=vbsz2_ror_2
lda {z2}
asr
asr
sta {z1}
//FRAGMENT vbsaa=_deref_pbsc1
lda {c1}
//FRAGMENT vbsxx=_deref_pbsc1
ldx {c1}
//FRAGMENT vbsz1=_neg_vbsaa
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbsxx
txa
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbsyy
tya
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbszz
tza
neg
sta {z1}
//FRAGMENT vbsaa=_neg_vbsz1
lda {z1}
neg
//FRAGMENT vbsaa=_neg_vbsaa
neg
//FRAGMENT vbsaa=_neg_vbsxx
txa
neg
//FRAGMENT vbsaa=_neg_vbsyy
tya
neg
//FRAGMENT vbsaa=_neg_vbszz
tza
neg
//FRAGMENT vbsxx=_neg_vbsz1
lda {z1}
neg
tax
//FRAGMENT vbsxx=_neg_vbsaa
neg
tax
//FRAGMENT vbsxx=_neg_vbsxx
txa
neg
tax
//FRAGMENT vbsxx=_neg_vbsyy
tya
neg
tax
//FRAGMENT vbsxx=_neg_vbszz
tza
neg
tax
//FRAGMENT vbsyy=_neg_vbsz1
lda {z1}
neg
tay
//FRAGMENT vbsyy=_neg_vbsaa
neg
tay
//FRAGMENT vbsyy=_neg_vbsxx
txa
neg
tay
//FRAGMENT vbsyy=_neg_vbsyy
tya
neg
tay
//FRAGMENT vbsyy=_neg_vbszz
tza
neg
tay
//FRAGMENT vbszz=_neg_vbsz1
lda {z1}
neg
taz
//FRAGMENT vbszz=_neg_vbsaa
neg
taz
//FRAGMENT vbszz=_neg_vbsxx
txa
neg
taz
//FRAGMENT vbszz=_neg_vbsyy
tya
neg
taz
//FRAGMENT vbszz=_neg_vbszz
tza
neg
taz
//FRAGMENT _deref_pbsc1=vbsaa
sta {c1}
//FRAGMENT vbsz1=vbsaa_ror_2
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbsxx_ror_2
txa
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbsyy_ror_2
tya
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbszz_ror_2
tza
asr
asr
sta {z1}
//FRAGMENT vbsaa=vbsz1_ror_2
lda {z1}
asr
asr
//FRAGMENT vbsaa=vbsaa_ror_2
asr
asr
//FRAGMENT vbsaa=vbsxx_ror_2
txa
asr
asr
//FRAGMENT vbsaa=vbsyy_ror_2
tya
asr
asr
//FRAGMENT vbsaa=vbszz_ror_2
tza
asr
asr
//FRAGMENT vbsxx=vbsz1_ror_2
lda {z1}
asr
asr
tax
//FRAGMENT vbsxx=vbsaa_ror_2
asr
asr
tax
//FRAGMENT vbsxx=vbsxx_ror_2
txa
asr
asr
tax
//FRAGMENT vbsxx=vbsyy_ror_2
tya
asr
asr
tax
//FRAGMENT vbsxx=vbszz_ror_2
tza
asr
asr
tax
//FRAGMENT vbsyy=vbsz1_ror_2
lda {z1}
asr
asr
tay
//FRAGMENT vbsyy=vbsaa_ror_2
asr
asr
tay
//FRAGMENT vbsyy=vbsxx_ror_2
txa
asr
asr
tay
//FRAGMENT vbsyy=vbsyy_ror_2
tya
asr
asr
tay
//FRAGMENT vbsyy=vbszz_ror_2
tza
asr
asr
tay
//FRAGMENT vbszz=vbsz1_ror_2
lda {z1}
asr
asr
taz
//FRAGMENT vbszz=vbsaa_ror_2
asr
asr
taz
//FRAGMENT vbszz=vbsxx_ror_2
txa
asr
asr
taz
//FRAGMENT vbszz=vbsyy_ror_2
tya
asr
asr
taz
//FRAGMENT vbszz=vbszz_ror_2
tza
asr
asr
taz
//FRAGMENT vbsyy=_deref_pbsc1
ldy {c1}
//FRAGMENT vbszz=_deref_pbsc1
lda {c1}
taz
//FRAGMENT _deref_pbsc1=vbsxx
stx {c1}
//FRAGMENT _deref_pbsc1=vbsyy
sty {c1}
//FRAGMENT _deref_pbsc1=vbszz
tza
sta {c1}
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
@ -1878,8 +2118,6 @@ cpx {z1}
bcs {la1}
//FRAGMENT vbuxx=vbuc1
ldx #{c1}
//FRAGMENT vbuzz=vbuc1
ldz #{c1}
//FRAGMENT vbuzz=vbuz1
ldz {z1}
//FRAGMENT vbuz1=vbuzz
@ -1894,8 +2132,6 @@ inx
ldy #{c1}
//FRAGMENT vbuyy=_inc_vbuyy
iny
//FRAGMENT vbuzz=_inc_vbuzz
inz
//FRAGMENT vbuz1_ge_vbuxx_then_la1
lda {z1}
stx $ff
@ -1952,9 +2188,6 @@ bcc {la1}
cpy #{c1}
bcc {la1}
beq {la1}
//FRAGMENT vbuzz_lt_vbuc1_then_la1
cpz #{c1}
bcc {la1}
//FRAGMENT vbuzz_le_vbuc1_then_la1
cpz #{c1}
bcc {la1}
@ -2176,236 +2409,3 @@ sta {z1}+1
asw {z1}
asw {z1}
asw {z1}
//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz
tza
tax
sta {c1},x
//FRAGMENT vbsz1=_deref_pbsc1
lda {c1}
sta {z1}
//FRAGMENT vbsz1=_neg_vbsz2
lda {z2}
neg
sta {z1}
//FRAGMENT _deref_pbsc1=vbsz1
lda {z1}
sta {c1}
//FRAGMENT vbsz1=vbsz2_ror_2
lda {z2}
asr
asr
sta {z1}
//FRAGMENT vbsaa=_deref_pbsc1
lda {c1}
//FRAGMENT vbsxx=_deref_pbsc1
ldx {c1}
//FRAGMENT vbsz1=_neg_vbsaa
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbsxx
txa
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbsyy
tya
neg
sta {z1}
//FRAGMENT vbsz1=_neg_vbszz
tza
neg
sta {z1}
//FRAGMENT vbsaa=_neg_vbsz1
lda {z1}
neg
//FRAGMENT vbsaa=_neg_vbsaa
neg
//FRAGMENT vbsaa=_neg_vbsxx
txa
neg
//FRAGMENT vbsaa=_neg_vbsyy
tya
neg
//FRAGMENT vbsaa=_neg_vbszz
tza
neg
//FRAGMENT vbsxx=_neg_vbsz1
lda {z1}
neg
tax
//FRAGMENT vbsxx=_neg_vbsaa
neg
tax
//FRAGMENT vbsxx=_neg_vbsxx
txa
neg
tax
//FRAGMENT vbsxx=_neg_vbsyy
tya
neg
tax
//FRAGMENT vbsxx=_neg_vbszz
tza
neg
tax
//FRAGMENT vbsyy=_neg_vbsz1
lda {z1}
neg
tay
//FRAGMENT vbsyy=_neg_vbsaa
neg
tay
//FRAGMENT vbsyy=_neg_vbsxx
txa
neg
tay
//FRAGMENT vbsyy=_neg_vbsyy
tya
neg
tay
//FRAGMENT vbsyy=_neg_vbszz
tza
neg
tay
//FRAGMENT vbszz=_neg_vbsz1
lda {z1}
neg
taz
//FRAGMENT vbszz=_neg_vbsaa
neg
taz
//FRAGMENT vbszz=_neg_vbsxx
txa
neg
taz
//FRAGMENT vbszz=_neg_vbsyy
tya
neg
taz
//FRAGMENT vbszz=_neg_vbszz
tza
neg
taz
//FRAGMENT _deref_pbsc1=vbsaa
sta {c1}
//FRAGMENT vbsz1=vbsaa_ror_2
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbsxx_ror_2
txa
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbsyy_ror_2
tya
asr
asr
sta {z1}
//FRAGMENT vbsz1=vbszz_ror_2
tza
asr
asr
sta {z1}
//FRAGMENT vbsaa=vbsz1_ror_2
lda {z1}
asr
asr
//FRAGMENT vbsaa=vbsaa_ror_2
asr
asr
//FRAGMENT vbsaa=vbsxx_ror_2
txa
asr
asr
//FRAGMENT vbsaa=vbsyy_ror_2
tya
asr
asr
//FRAGMENT vbsaa=vbszz_ror_2
tza
asr
asr
//FRAGMENT vbsxx=vbsz1_ror_2
lda {z1}
asr
asr
tax
//FRAGMENT vbsxx=vbsaa_ror_2
asr
asr
tax
//FRAGMENT vbsxx=vbsxx_ror_2
txa
asr
asr
tax
//FRAGMENT vbsxx=vbsyy_ror_2
tya
asr
asr
tax
//FRAGMENT vbsxx=vbszz_ror_2
tza
asr
asr
tax
//FRAGMENT vbsyy=vbsz1_ror_2
lda {z1}
asr
asr
tay
//FRAGMENT vbsyy=vbsaa_ror_2
asr
asr
tay
//FRAGMENT vbsyy=vbsxx_ror_2
txa
asr
asr
tay
//FRAGMENT vbsyy=vbsyy_ror_2
tya
asr
asr
tay
//FRAGMENT vbsyy=vbszz_ror_2
tza
asr
asr
tay
//FRAGMENT vbszz=vbsz1_ror_2
lda {z1}
asr
asr
taz
//FRAGMENT vbszz=vbsaa_ror_2
asr
asr
taz
//FRAGMENT vbszz=vbsxx_ror_2
txa
asr
asr
taz
//FRAGMENT vbszz=vbsyy_ror_2
tya
asr
asr
taz
//FRAGMENT vbszz=vbszz_ror_2
tza
asr
asr
taz
//FRAGMENT vbsyy=_deref_pbsc1
ldy {c1}
//FRAGMENT vbszz=_deref_pbsc1
lda {c1}
taz
//FRAGMENT _deref_pbsc1=vbsxx
stx {c1}
//FRAGMENT _deref_pbsc1=vbsyy
sty {c1}
//FRAGMENT _deref_pbsc1=vbszz
tza
sta {c1}

@ -1,72 +1,24 @@
//KICKC FRAGMENT CACHE 108dd16dc1 108dd18d7f
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}
//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #{c2}
ora {c1}
sta {c1}
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
//FRAGMENT pbuz1=pbuc1
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
//FRAGMENT pbuz1_lt_pbuc1_then_la1
lda {z1}+1
cmp #>{c1}
bcc {la1}
bne !+
lda {z1}
cmp #<{c1}
bcc {la1}
!:
//FRAGMENT _deref_pbuc1=_deref_pbuc2
lda {c2}
sta {c1}
//FRAGMENT vbuz1=_lo_pbuz2
lda {z2}
sta {z1}
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1=_inc_pbuz1
inw {z1}
//FRAGMENT _deref_pbuz1=vbuc1
lda #{c1}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_lo_pbuz1
lda {z1}
//FRAGMENT vbuxx=_lo_pbuz1
ldx {z1}
//FRAGMENT _deref_pbuz1=vbuaa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT vbuyy=_lo_pbuz1
ldy {z1}
//FRAGMENT vbuzz=_lo_pbuz1
ldz {z1}
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
//FRAGMENT isr_hardware_all_entry
pha @clob_a
phx @clob_x
phy @clob_y
phz @clob_z
//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2
lda #{c2}
ora {c1}
sta {c1}
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}
//FRAGMENT vbuz1=_inc_vbuz1
inc {z1}
//FRAGMENT vbuz1=vbuz2
@ -93,6 +45,8 @@ dec {z1}
ldy #0
lda ({z2}),y
sta {z1}
//FRAGMENT pbuz1=_inc_pbuz1
inw {z1}
//FRAGMENT vbuz1_neq_0_then_la1
lda {z1}
bne {la1}
@ -190,6 +144,10 @@ bne {la1}
lda {z1}
cmp #<{c1}
bne {la1}
//FRAGMENT _deref_pbuz1=vbuc1
lda #{c1}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=vbuz1
lda {z1}
//FRAGMENT vbuxx=vbuz1
@ -1187,217 +1145,11 @@ inc
stx {c1}
//FRAGMENT _deref_pbuc1=vbuzz
stz {c1}
//FRAGMENT vbuz1=_deref_pbuc1_plus_1
lda {c1}
inc
sta {z1}
//FRAGMENT vwuz1=_word_vbuz2
lda {z2}
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=vwuz2_rol_2
lda {z2}
asl
sta {z1}
lda {z2}+1
rol
sta {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT vwuz1=vwuz2_plus_vwuz3
lda {z2}
clc
adc {z3}
sta {z1}
lda {z2}+1
adc {z3}+1
sta {z1}+1
//FRAGMENT vwuz1=vwuz2_rol_4
lda {z2}
asl
sta {z1}
lda {z2}+1
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT pbuz1=pbuc1_plus_vwuz2
clc
lda {z2}
adc #<{c1}
sta {z1}
lda {z2}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT pbuz1=pbuz2
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
//FRAGMENT 0_neq_vbuz1_then_la1
lda {z1}
bne {la1}
//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3
lda {z3}
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1
lda #{c1}
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1=pbuz1_plus_vbuc1
lda #{c1}
clc
adc {z1}
sta {z1}
bcc !+
inc {z1}+1
!:
//FRAGMENT pvoz1=pvoc1
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
//FRAGMENT pbuz1=pbuz1_minus_vbuc1
sec
lda {z1}
sbc #{c1}
sta {z1}
lda {z1}+1
sbc #0
sta {z1}+1
//FRAGMENT pbuz1=pbuz2_plus_vwuc1
clc
lda {z2}
adc #<{c1}
sta {z1}
lda {z2}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT pbuz1_neq_pbuz2_then_la1
lda {z1}+1
cmp {z2}+1
bne {la1}
lda {z1}
cmp {z2}
bne {la1}
//FRAGMENT _deref_pbuz1=_deref_pbuz2
ldy #0
lda ({z2}),y
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1=pbuz2_plus_vbuc1
lda #{c1}
clc
adc {z2}
sta {z1}
lda #0
adc {z2}+1
sta {z1}+1
//FRAGMENT vbuaa=_deref_pbuc1_plus_1
lda {c1}
inc
//FRAGMENT vbuxx=_deref_pbuc1_plus_1
ldx {c1}
inx
//FRAGMENT vbuz1=vbuxx
stx {z1}
//FRAGMENT vwuz1=_word_vbuxx
txa
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=_word_vbuyy
tya
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=_word_vbuzz
tza
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT 0_neq_vbuaa_then_la1
cmp #0
bne {la1}
//FRAGMENT vbuz1=vbuaa
sta {z1}
//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx
txa
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy
tya
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz
tza
ldz {z2}
sta ({z1}),z
//FRAGMENT 0_neq_vbuxx_then_la1
cpx #0
bne {la1}
//FRAGMENT vbuaa=vbuxx
txa
//FRAGMENT 0_neq_vbuyy_then_la1
cpy #0
bne {la1}
//FRAGMENT vbuaa=vbuyy
tya
//FRAGMENT 0_neq_vbuzz_then_la1
cpz #0
bne {la1}
//FRAGMENT vbuaa=vbuzz
tza
//FRAGMENT vbuz1=vbuyy
sty {z1}
//FRAGMENT vbuz1=vbuzz
tza
sta {z1}
//FRAGMENT vbuxx=vbuaa
tax
//FRAGMENT vbuyy=_deref_pbuc1_plus_1
ldy {c1}
iny
//FRAGMENT vbuxx=vbuyy
tya
tax
//FRAGMENT vbuzz=_deref_pbuc1_plus_1
lda {c1}
inc
taz
//FRAGMENT vbuxx=vbuzz
tza
tax
//FRAGMENT vwuz1=vwuz2_plus_vwuz1
lda {z1}
clc
adc {z2}
sta {z1}
lda {z1}+1
adc {z2}+1
sta {z1}+1
//FRAGMENT pbuz1=pbuc1_plus_vwuz1
clc
lda {z1}
adc #<{c1}
sta {z1}
lda {z1}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT vwuz1=vwuz1_rol_4
asw {z1}
asw {z1}
asw {z1}
asw {z1}
//FRAGMENT vwuz1=vwuc1
lda #<{c1}
sta {z1}
@ -1408,6 +1160,9 @@ lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
//FRAGMENT _deref_pbuc1=_deref_pbuc2
lda {c2}
sta {c1}
//FRAGMENT pbuz1=pbuz1_plus_vwuc1
clc
lda {z1}
@ -1416,10 +1171,23 @@ sta {z1}
lda {z1}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT pbuz1=pbuz1_plus_vbuc1
lda #{c1}
clc
adc {z1}
sta {z1}
bcc !+
inc {z1}+1
!:
//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2
ldy {z2}
lda ({z3}),y
sta ({z1}),y
//FRAGMENT vwuz1=_word_vbuz2
lda {z2}
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT pwuz1=pwuz1_plus_vbuc1
lda #{c1}
clc
@ -1493,6 +1261,21 @@ sta ({z1}),y
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=_word_vbuxx
txa
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=_word_vbuyy
tya
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vwuz1=_word_vbuzz
tza
sta {z1}
lda #0
sta {z1}+1
//FRAGMENT vbuz1=vbuaa_rol_1
asl
sta {z1}
@ -1661,6 +1444,8 @@ inc {c1},x
lda {z1}
//FRAGMENT vbuxx=_lo_vwuz1
ldx {z1}
//FRAGMENT vbuz1=vbuaa
sta {z1}
//FRAGMENT vbuaa=_hi_vwuz1
lda {z1}+1
//FRAGMENT vbuxx=_hi_vwuz1
@ -1700,10 +1485,17 @@ ora {z2}
sta {z1}
//FRAGMENT vbuz1=vbuxx_bor_vbuxx
stx {z1}
//FRAGMENT vbuz1=vbuxx
stx {z1}
//FRAGMENT vbuyy=_lo_vwuz1
ldy {z1}
//FRAGMENT vbuz1=vbuyy
sty {z1}
//FRAGMENT vbuzz=_lo_vwuz1
ldz {z1}
//FRAGMENT vbuz1=vbuzz
tza
sta {z1}
//FRAGMENT vbuyy=_hi_vwuz1
ldy {z1}+1
//FRAGMENT vbuzz=_hi_vwuz1
@ -2541,6 +2333,8 @@ tza
tax
tya
sta {c1},x
//FRAGMENT vbuxx=vbuaa
tax
//FRAGMENT vbuyy=vbuaa
tay
//FRAGMENT vbuzz=vbuaa
@ -2609,3 +2403,209 @@ sta {z1}+3
NO_SYNTHESIS
//FRAGMENT vduz1=vwsc1
NO_SYNTHESIS
//FRAGMENT pbuz1_lt_pbuc1_then_la1
lda {z1}+1
cmp #>{c1}
bcc {la1}
bne !+
lda {z1}
cmp #<{c1}
bcc {la1}
!:
//FRAGMENT vbuz1=_lo_pbuz2
lda {z2}
sta {z1}
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_lo_pbuz1
lda {z1}
//FRAGMENT vbuxx=_lo_pbuz1
ldx {z1}
//FRAGMENT _deref_pbuz1=vbuaa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT vbuyy=_lo_pbuz1
ldy {z1}
//FRAGMENT vbuzz=_lo_pbuz1
ldz {z1}
//FRAGMENT vbuz1=_deref_pbuc1_plus_1
lda {c1}
inc
sta {z1}
//FRAGMENT vwuz1=vwuz2_rol_2
lda {z2}
asl
sta {z1}
lda {z2}+1
rol
sta {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT vwuz1=vwuz2_plus_vwuz3
lda {z2}
clc
adc {z3}
sta {z1}
lda {z2}+1
adc {z3}+1
sta {z1}+1
//FRAGMENT vwuz1=vwuz2_rol_4
lda {z2}
asl
sta {z1}
lda {z2}+1
rol
sta {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
asl {z1}
rol {z1}+1
//FRAGMENT pbuz1=pbuc1_plus_vwuz2
clc
lda {z2}
adc #<{c1}
sta {z1}
lda {z2}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT pbuz1=pbuz2
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
//FRAGMENT 0_neq_vbuz1_then_la1
lda {z1}
bne {la1}
//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3
lda {z3}
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1
lda #{c1}
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1=pbuz1_minus_vbuc1
sec
lda {z1}
sbc #{c1}
sta {z1}
lda {z1}+1
sbc #0
sta {z1}+1
//FRAGMENT pbuz1=pbuz2_plus_vwuc1
clc
lda {z2}
adc #<{c1}
sta {z1}
lda {z2}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT pbuz1_neq_pbuz2_then_la1
lda {z1}+1
cmp {z2}+1
bne {la1}
lda {z1}
cmp {z2}
bne {la1}
//FRAGMENT _deref_pbuz1=_deref_pbuz2
ldy #0
lda ({z2}),y
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1=pbuz2_plus_vbuc1
lda #{c1}
clc
adc {z2}
sta {z1}
lda #0
adc {z2}+1
sta {z1}+1
//FRAGMENT vbuaa=_deref_pbuc1_plus_1
lda {c1}
inc
//FRAGMENT vbuxx=_deref_pbuc1_plus_1
ldx {c1}
inx
//FRAGMENT 0_neq_vbuaa_then_la1
cmp #0
bne {la1}
//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx
txa
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy
tya
ldz {z2}
sta ({z1}),z
//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz
tza
ldz {z2}
sta ({z1}),z
//FRAGMENT 0_neq_vbuxx_then_la1
cpx #0
bne {la1}
//FRAGMENT vbuaa=vbuxx
txa
//FRAGMENT 0_neq_vbuyy_then_la1
cpy #0
bne {la1}
//FRAGMENT vbuaa=vbuyy
tya
//FRAGMENT 0_neq_vbuzz_then_la1
cpz #0
bne {la1}
//FRAGMENT vbuaa=vbuzz
tza
//FRAGMENT vbuyy=_deref_pbuc1_plus_1
ldy {c1}
iny
//FRAGMENT vbuxx=vbuyy
tya
tax
//FRAGMENT vbuzz=_deref_pbuc1_plus_1
lda {c1}
inc
taz
//FRAGMENT vbuxx=vbuzz
tza
tax
//FRAGMENT vwuz1=vwuz2_plus_vwuz1
lda {z1}
clc
adc {z2}
sta {z1}
lda {z1}+1
adc {z2}+1
sta {z1}+1
//FRAGMENT pbuz1=pbuc1_plus_vwuz1
clc
lda {z1}
adc #<{c1}
sta {z1}
lda {z1}+1
adc #>{c1}
sta {z1}+1
//FRAGMENT vwuz1=vwuz1_rol_4
asw {z1}
asw {z1}
asw {z1}
asw {z1}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -73,6 +73,9 @@ public class Initializers {
* @return The constantified value. A {@link ConstantValue} is possible
*/
public static RValue constantify(RValue initValue, ValueTypeSpec typeSpec, Program program, StatementSource source) {
// Remove any const/volatile qualifiers
typeSpec = new ValueTypeSpec(typeSpec.getType().getQualified(false, false));
if(initValue == null) {
// Add an zero-value
initValue = createZeroValue(typeSpec, source);

@ -54,13 +54,20 @@ public class VariableBuilder {
* @return The variable
*/
public Variable build() {
Variable variable = new Variable(varName, getKind(), type, scope, getMemoryArea(), dataSegment, null);
// Todo: #121 move to type parsing!
SymbolType typeQualified = type.getQualified(this.isVolatile(), this.isNoModify());
Variable variable = new Variable(varName, getKind(), typeQualified, scope, getMemoryArea(), dataSegment, null);
// Todo: #121 remove!
variable.setNoModify(this.isNoModify());
variable.setVolatile(this.isVolatile());
variable.setExport(this.isExport());
variable.setPermanent(this.isPermanent());
variable.setToNoModify(this.isToNoModify());
variable.setToVolatile(this.isToVolatile());
variable.setExport(this.isExport());
variable.setPermanent(this.isPermanent());
variable.setOptimize(this.isOptimize());
variable.setRegister(this.getRegister());
if(variable.getRegister() instanceof Registers.RegisterMainMem) {

@ -193,11 +193,14 @@ public class Variable implements Symbol {
version.setMemoryAlignment(phiMaster.getMemoryAlignment());
version.setMemoryAddress(phiMaster.getMemoryAddress());
version.setOptimize(phiMaster.isOptimize());
version.setNoModify(phiMaster.isNoModify());
version.setRegister(phiMaster.getRegister());
// TODO: #121 remove
version.setVolatile(phiMaster.isVolatile());
version.setNoModify(phiMaster.isNoModify());
version.setToNoModify(phiMaster.isToNoModify());
version.setToVolatile(phiMaster.isToVolatile());
version.setRegister(phiMaster.getRegister());
version.setPermanent(phiMaster.isPermanent());
version.setExport(phiMaster.isExport());
version.setComments(phiMaster.getComments());
@ -239,11 +242,13 @@ public class Variable implements Symbol {
constVar.setMemoryAlignment(variable.getMemoryAlignment());
constVar.setMemoryAddress(variable.getMemoryAddress());
constVar.setOptimize(variable.isOptimize());
constVar.setNoModify(variable.isNoModify());
constVar.setRegister(variable.getRegister());
// Todo: #121 remove
constVar.setVolatile(variable.isVolatile());
constVar.setNoModify(variable.isNoModify());
constVar.setToNoModify(variable.isToNoModify());
constVar.setToVolatile(variable.isToVolatile());
constVar.setPermanent(variable.isPermanent());
constVar.setExport(variable.isExport());
constVar.setComments(variable.getComments());
@ -262,11 +267,14 @@ public class Variable implements Symbol {
copy.setMemoryAlignment(original.getMemoryAlignment());
copy.setMemoryAddress(original.getMemoryAddress());
copy.setOptimize(original.isOptimize());
copy.setNoModify(original.isNoModify());
copy.setPermanent(original.isPermanent());
// Todo: #121 remove
copy.setVolatile(original.isVolatile());
copy.setNoModify(original.isNoModify());
copy.setToNoModify(original.isToNoModify());
copy.setToVolatile(original.isToVolatile());
copy.setExport(original.isExport());
copy.setRegister(original.getRegister());
copy.setComments(original.getComments());
@ -288,18 +296,24 @@ public class Variable implements Symbol {
if(isParameter && memberDefinition.isArray()) {
// Array struct members are converted to pointers when unwound (use same kind as the struct variable)
SymbolTypePointer arrayType = (SymbolTypePointer) memberDefinition.getType();
memberVariable = new Variable(name, structVar.getKind(), new SymbolTypePointer(arrayType.getElementType()), structVar.getScope(), memoryArea, structVar.getDataSegment(), null);
SymbolType typeQualified = new SymbolTypePointer(arrayType.getElementType()).getQualified(structVar.isVolatile, structVar.isNoModify());
memberVariable = new Variable(name, structVar.getKind(), typeQualified, structVar.getScope(), memoryArea, structVar.getDataSegment(), null);
} else if(memberDefinition.isKindConstant()) {
// Constant members are unwound as constants
memberVariable = new Variable(name, Kind.CONSTANT, memberDefinition.getType(), structVar.getScope(), memoryArea, structVar.getDataSegment(), memberDefinition.getInitValue());
SymbolType typeQualified = memberDefinition.getType().getQualified(structVar.isVolatile, structVar.isNoModify());
memberVariable = new Variable(name, Kind.CONSTANT, typeQualified, structVar.getScope(), memoryArea, structVar.getDataSegment(), memberDefinition.getInitValue());
} else {
// For others the kind is preserved from the member definition
memberVariable = new Variable(name, structVar.getKind(), memberDefinition.getType(), structVar.getScope(), memoryArea, structVar.getDataSegment(), memberDefinition.getInitValue());
SymbolType typeQualified = memberDefinition.getType().getQualified(structVar.isVolatile, structVar.isNoModify());
memberVariable = new Variable(name, structVar.getKind(),typeQualified, structVar.getScope(), memoryArea, structVar.getDataSegment(), memberDefinition.getInitValue());
}
// Todo: #121 fix struct member qualifiers - and remove!
memberVariable.setVolatile(structVar.isVolatile());
memberVariable.setNoModify(structVar.isNoModify());
memberVariable.setToNoModify(structVar.isToNoModify());
memberVariable.setToVolatile(structVar.isToVolatile());
memberVariable.setExport(structVar.isExport());
memberVariable.setPermanent(structVar.isPermanent());
return memberVariable;

@ -11,6 +11,14 @@ public interface SymbolType extends Serializable {
/** Specifies that the variable is not allowed to be modified (const keyword). The compiler should try to detect modifications and generate compile-time errors if they occur.*/
boolean isNomodify();
/** Get the type with different type qualifiers.
*
* @param isVolatile Should the type be marked as volatile
* @param isNomodify Should the type be marked as nomodify (keyword const)
* @return The type with different qualifiers
*/
SymbolType getQualified(boolean isVolatile, boolean isNomodify);
/** Unsigned byte (8 bits)). */
SymbolTypeIntegerFixed BYTE = new SymbolTypeIntegerFixed("byte", 0, 255, false, 8, false, false);
/** Signed byte (8 bits). */

@ -4,12 +4,11 @@ package dk.camelot64.kickc.model.types;
public class SymbolTypeBlockScope implements SymbolType {
public SymbolTypeBlockScope() {
}
@Override
public String getTypeName() {
return "BLOCK";
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return this;
}
@Override
@ -22,6 +21,11 @@ public class SymbolTypeBlockScope implements SymbolType {
return false;
}
@Override
public String getTypeName() {
return "BLOCK";
}
@Override
public int getSizeBytes() {
return -1;

@ -8,7 +8,7 @@ import java.util.Objects;
public class SymbolTypeEnum implements SymbolType {
/** Name of the enum type. */
private String name;
private String enumName;
/** The enum definition. */
private EnumDefinition definition;
@ -18,11 +18,16 @@ public class SymbolTypeEnum implements SymbolType {
public SymbolTypeEnum(EnumDefinition definition, boolean isVolatile, boolean isNomodify) {
this.definition = definition;
this.name = definition.getLocalName();
this.enumName = definition.getLocalName();
this.isVolatile = isVolatile;
this.isNomodify = isNomodify;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return new SymbolTypeEnum(this.definition, isVolatile, isNomodify);
}
@Override
public boolean isVolatile() {
return isVolatile;
@ -35,7 +40,17 @@ public class SymbolTypeEnum implements SymbolType {
@Override
public String getTypeName() {
return "enum " + name;
String name = "";
// TODO #121 Add
/*
if(isVolatile)
name += "volatile ";
if(isNomodify)
name += "const ";
*/
name += "enum " + this.enumName;
return name;
}
@Override
@ -57,12 +72,12 @@ public class SymbolTypeEnum implements SymbolType {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
SymbolTypeEnum that = (SymbolTypeEnum) o;
return Objects.equals(name, that.name);
return Objects.equals(enumName, that.enumName);
}
@Override
public int hashCode() {
return Objects.hash(name);
return Objects.hash(enumName);
}
}

@ -19,10 +19,10 @@ public class SymbolTypeInference {
Variable variable = symbols.getVar((SymbolVariableRef) rValue);
if(variable==null)
throw new CompileError("Unknown variable "+rValue.toString());
type = variable.getType();
type = variable.getType().getQualified(false, variable.getType().isNomodify());
} else if(rValue instanceof Symbol) {
Symbol rSymbol = (Symbol) rValue;
type = rSymbol.getType();
type = rSymbol.getType().getQualified(false, rSymbol.getType().isNomodify());
} else if(rValue instanceof LvalueIntermediate) {
return inferType(symbols, ((LvalueIntermediate) rValue).getVariable());
} else if(rValue instanceof ConstantInteger) {
@ -36,12 +36,14 @@ public class SymbolTypeInference {
} else if(rValue instanceof ConstantUnary) {
ConstantUnary constUnary = (ConstantUnary) rValue;
SymbolType valueType = inferType(symbols, constUnary.getOperand());
return constUnary.getOperator().inferType(valueType);
final SymbolType unaryType = constUnary.getOperator().inferType(valueType);
return unaryType.getQualified(false, true);
} else if(rValue instanceof ConstantBinary) {
ConstantBinary constBin = (ConstantBinary) rValue;
SymbolType leftType = inferType(symbols, constBin.getLeft());
SymbolType rightType = inferType(symbols, constBin.getRight());
return constBin.getOperator().inferType(leftType, rightType);
final SymbolType binaryType = constBin.getOperator().inferType(leftType, rightType);
return binaryType.getQualified(false, true);
} else if(rValue instanceof ValueList) {
return SymbolType.VAR;
} else if(rValue instanceof PointerDereference) {
@ -97,7 +99,7 @@ public class SymbolTypeInference {
} else {
throw new InternalError("Cannot infer type of " + assignment.toString());
}
return rValueType;
return rValueType.getQualified(false, false);
} else if(rValue instanceof StructMemberRef) {
StructMemberRef structMemberRef = (StructMemberRef) rValue;
SymbolType structType = inferType(symbols, structMemberRef.getStruct());

@ -11,6 +11,11 @@ public class SymbolTypeIntegerAuto implements SymbolTypeInteger {
this.typeName = typeName;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return this;
}
@Override
public boolean isVolatile() {
return false;

@ -7,16 +7,19 @@ import java.util.Objects;
/** Integer type with a fixed size (byte, signed byte, word, ...). */
public class SymbolTypeIntegerFixed implements SymbolTypeInteger {
private final String typeName;
/** The basename of the the type (without any qualifiers). */
private final String typeBaseName;
private final long minValue;
private final long maxValue;
private final boolean signed;
private final int bits;
private final boolean isVolatile;
private final boolean isNomodify;
SymbolTypeIntegerFixed(String typeName, long minValue, long maxValue, boolean signed, int bits, boolean isVolatile, boolean isNomodify) {
this.typeName = typeName;
SymbolTypeIntegerFixed(String typeBaseName, long minValue, long maxValue, boolean signed, int bits, boolean isVolatile, boolean isNomodify) {
this.typeBaseName = typeBaseName;
this.minValue = minValue;
this.maxValue = maxValue;
this.signed = signed;
@ -25,10 +28,15 @@ public class SymbolTypeIntegerFixed implements SymbolTypeInteger {
this.isNomodify = isNomodify;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return new SymbolTypeIntegerFixed(this.typeBaseName, this.minValue, this.maxValue, this.signed, this.bits, isVolatile, isNomodify);
}
/**
* Get all fixed size integer types.
* Get all (unqualified) fixed size integer types.
*
* @return All fixed size integer types
* @return All (unqualified) fixed size integer types
*/
public static Collection<SymbolTypeIntegerFixed> getIntegerFixedTypes() {
ArrayList<SymbolTypeIntegerFixed> types = new ArrayList<>();
@ -88,7 +96,16 @@ public class SymbolTypeIntegerFixed implements SymbolTypeInteger {
@Override
public String getTypeName() {
return typeName;
String name = "";
// TODO #121 Add
/*
if(isVolatile)
name += "volatile ";
if(isNomodify)
name += "const ";
*/
name += typeBaseName;
return name;
}
public long getMinValue() {
@ -122,11 +139,11 @@ public class SymbolTypeIntegerFixed implements SymbolTypeInteger {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
SymbolTypeIntegerFixed that = (SymbolTypeIntegerFixed) o;
return Objects.equals(typeName, that.typeName);
return Objects.equals(typeBaseName, that.typeBaseName);
}
@Override
public int hashCode() {
return Objects.hash(typeName);
return Objects.hash(typeBaseName);
}
}

@ -3,18 +3,23 @@ package dk.camelot64.kickc.model.types;
/** Basic named (string, char, ...) Symbol Types */
public class SymbolTypeNamed implements SymbolType {
private String typeName;
private String typeBaseName;
private int sizeBytes;
private final boolean isVolatile;
private final boolean isNomodify;
SymbolTypeNamed(String typeName, int sizeBytes, boolean isVolatile, boolean isNomodify) {
this.typeName = typeName;
SymbolTypeNamed(String typeBaseName, int sizeBytes, boolean isVolatile, boolean isNomodify) {
this.typeBaseName = typeBaseName;
this.sizeBytes = sizeBytes;
this.isVolatile = isVolatile;
this.isNomodify = isNomodify;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return new SymbolTypeNamed(this.typeBaseName, this.sizeBytes, isVolatile, isNomodify);
}
@Override
public boolean isVolatile() {
return isVolatile;
@ -26,7 +31,16 @@ public class SymbolTypeNamed implements SymbolType {
}
public String getTypeName() {
return typeName;
String name = "";
// TODO #121 Add
/*
if(isVolatile)
name += "volatile ";
if(isNomodify)
name += "const ";
*/
name += typeBaseName;
return name;
}
@Override
@ -45,12 +59,12 @@ public class SymbolTypeNamed implements SymbolType {
SymbolTypeNamed that = (SymbolTypeNamed) o;
return typeName != null ? typeName.equals(that.typeName) : that.typeName == null;
return typeBaseName != null ? typeBaseName.equals(that.typeBaseName) : that.typeBaseName == null;
}
@Override
public int hashCode() {
return typeName != null ? typeName.hashCode() : 0;
return typeBaseName != null ? typeBaseName.hashCode() : 0;
}
@Override

@ -18,7 +18,6 @@ public class SymbolTypePointer implements SymbolType {
private final boolean isVolatile;
private final boolean isNomodify;
public SymbolTypePointer(SymbolType elementType, ArraySpec arraySpec, boolean isVolatile, boolean isNomodify) {
this.elementType = elementType;
this.arraySpec = arraySpec;
@ -30,14 +29,19 @@ public class SymbolTypePointer implements SymbolType {
this(elementType, null, false, false);
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return new SymbolTypePointer(this.elementType, this.arraySpec, isVolatile, isNomodify);
}
@Override
public boolean isVolatile() {
return false;
return isVolatile;
}
@Override
public boolean isNomodify() {
return false;
return isNomodify;
}
public SymbolType getElementType() {
@ -54,7 +58,15 @@ public class SymbolTypePointer implements SymbolType {
@Override
public String getTypeName() {
return elementType.getTypeName() + "*";
String name = elementType.getTypeName() + "*";
// TODO #121 Add
/*
if(isVolatile)
name += " volatile";
if(isNomodify)
name += " const";
*/
return name;
}
@Override

@ -11,6 +11,11 @@ public class SymbolTypeProcedure implements SymbolType {
this.returnType = returnType;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return this;
}
@Override
public boolean isVolatile() {
return false;

@ -4,7 +4,11 @@ package dk.camelot64.kickc.model.types;
public class SymbolTypeProgram implements SymbolType {
public SymbolTypeProgram() {
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return this;
}
@Override

@ -13,7 +13,7 @@ import java.util.Objects;
public class SymbolTypeStruct implements SymbolType {
/** Name of the struct type. */
private String name;
private String structName;
/** Size of the struct in bytes. */
private int sizeBytes;
@ -21,13 +21,25 @@ public class SymbolTypeStruct implements SymbolType {
private final boolean isVolatile;
private final boolean isNomodify;
public SymbolTypeStruct(String structName, int sizeBytes, boolean isVolatile, boolean isNomodify) {
this.structName = structName;
this.sizeBytes = sizeBytes;
this.isVolatile = isVolatile;
this.isNomodify = isNomodify;
}
public SymbolTypeStruct(StructDefinition structDefinition, boolean isVolatile, boolean isNomodify) {
this.name = structDefinition.getLocalName();
this.structName = structDefinition.getLocalName();
this.sizeBytes = calculateSizeBytes(structDefinition, null);
this.isVolatile = isVolatile;
this.isNomodify = isNomodify;
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return new SymbolTypeStruct(this.structName, this.sizeBytes, isVolatile, isNomodify);
}
@Override
public boolean isVolatile() {
return isVolatile;
@ -40,15 +52,24 @@ public class SymbolTypeStruct implements SymbolType {
@Override
public String getTypeName() {
return "struct " + name;
}
public String getStructTypeName() {
String name = "";
// TODO #121 Add
/*
if(isVolatile)
name += "volatile ";
if(isNomodify)
name += "const ";
*/
name += "struct " + this.structName;
return name;
}
public String getStructTypeName() {
return structName;
}
public StructDefinition getStructDefinition(ProgramScope programScope) {
return programScope.getLocalStructDefinition(name);
return programScope.getLocalStructDefinition(structName);
}
@Override
@ -98,12 +119,12 @@ public class SymbolTypeStruct implements SymbolType {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
SymbolTypeStruct that = (SymbolTypeStruct) o;
return Objects.equals(name, that.name);
return Objects.equals(structName, that.structName);
}
@Override
public int hashCode() {
return Objects.hash(name, sizeBytes);
return Objects.hash(structName, sizeBytes);
}
@Override

@ -4,7 +4,11 @@ package dk.camelot64.kickc.model.types;
public class SymbolTypeTypeDefScope implements SymbolType {
public SymbolTypeTypeDefScope() {
}
@Override
public SymbolType getQualified(boolean isVolatile, boolean isNomodify) {
return this;
}
@Override

@ -794,9 +794,11 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
}
/** The declared type of a variable. Combines SymbolType, type directives (const, volatile) and ArraySpec. It holds advanced type information like <p><code>char volatile * const * [42]</code> */
// TODO: #121 Remove when const/volatile are put into type
static class VariableDeclType {
/** The type. */
SymbolType type;
// TODO: #121 Remove when const/volatile are put into type
/** Const / Volatile Directives if applied to the type */
List<Directive> typeDirectives;
/** If the type is SymbolTypePointer this holds the declaration type of the elements. */
@ -820,6 +822,12 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
void setTypeDirectives(List<Directive> directives) {
this.typeDirectives = directives;
for(Directive directive : directives) {
if(directive instanceof Directive.Const)
setType(type.getQualified(type.isVolatile(), true));
if(directive instanceof Directive.Volatile)
setType(type.getQualified(true, type.isNomodify()));
}
}
void setElementDeclType(VariableDeclType elementDeclType) {
@ -851,8 +859,20 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
void setDeclDirectives(List<Directive> directives) {
this.declDirectives = new ArrayList<>();
for(Directive directive : directives) {
if(directive instanceof Directive.Const || directive instanceof Directive.Volatile) {
if(directive instanceof Directive.Volatile) {
// Type directive
SymbolType type = this.declType.getType();
SymbolType typeQualified = type.getQualified(true, type.isNomodify());
this.declType.setType(typeQualified);
// TODO: #121 Remove when const/volatile are put into type
if(!this.declType.getTypeDirectives().contains(directive))
this.declType.getTypeDirectives().add(directive);
} else if(directive instanceof Directive.Const) {
// Type directive
SymbolType type = this.declType.getType();
SymbolType typeQualified = type.getQualified(type.isVolatile(), true);
this.declType.setType(typeQualified);
// TODO: #121 Remove when const/volatile are put into type
if(!this.declType.getTypeDirectives().contains(directive))
this.declType.getTypeDirectives().add(directive);
} else {
@ -868,9 +888,11 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
// Add all general directives
dirs.addAll(declDirectives);
// Add type-directives
// TODO: #121 Remove when const/volatile are put into type
final VariableDeclType effectiveDeclType = getEffectiveDeclType();
dirs.addAll(effectiveDeclType.getTypeDirectives());
// Convert element directives
// TODO: #121 Remove when const/volatile are put into type
final VariableDeclType elementDeclType = effectiveDeclType.getElementDeclType();
if(elementDeclType != null) {
for(Directive elementTypeDirective : elementDeclType.getTypeDirectives()) {
@ -881,6 +903,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
}
}
// Produce error on any deeper directives
// TODO: #121 Remove when const/volatile are put into type
VariableDeclType deepDeclType = elementDeclType.getElementDeclType();
while(deepDeclType != null) {
if(!deepDeclType.getTypeDirectives().isEmpty()) {
@ -2039,6 +2062,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
type = elementType;
declType = elementDeclType;
}
// TODO: #121 Remove when const/volatile are put into type
if(typeDefVariable.isNoModify())
varDecl.getDeclType().getTypeDirectives().add(new Directive.Const());
if(typeDefVariable.isVolatile())

@ -7,6 +7,7 @@ import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.symbols.Symbol;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.ConstantSymbolPointer;
import dk.camelot64.kickc.model.values.RValue;
@ -60,11 +61,17 @@ public class Pass1AddressOfHandling extends Pass2SsaOptimization {
private void updateAddressOfVariable(Variable variable, String stmtStr) {
if(variable.getType() instanceof SymbolTypeStruct) {
variable.setKind(Variable.Kind.LOAD_STORE);
SymbolType typeQualified = variable.getType().getQualified(true, variable.getType().isNomodify());
variable.setType(typeQualified);
// TODO: #121 remove
variable.setVolatile(true);
getLog().append("Setting struct to load/store in variable affected by address-of " + stmtStr);
//getLog().append("Setting struct to load/store in variable affected by address-of: " + variable.toString() + " in " + stmtStr);
} else {
variable.setKind(Variable.Kind.LOAD_STORE);
SymbolType typeQualified = variable.getType().getQualified(true, variable.getType().isNomodify());
variable.setType(typeQualified);
// TODO: #121 remove
variable.setVolatile(true);
getLog().append("Setting inferred volatile on symbol affected by address-of " + stmtStr);
//getLog().append("Setting inferred volatile on symbol affected by address-of: " + variable.toString() + " in " + stmtStr);

@ -4,6 +4,7 @@ import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.iterator.ProgramValue;
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.SymbolVariableRef;
import dk.camelot64.kickc.model.values.Value;
@ -39,9 +40,13 @@ public class Pass1AsmUsesHandling extends Pass2SsaOptimization {
private void updateAddressOfVariable(Variable variable, String stmtStr) {
if(variable.getType() instanceof SymbolTypeStruct) {
variable.setKind(Variable.Kind.LOAD_STORE);
// TODO: #121 Add volatile??
getLog().append("Setting struct to load/store in variable affected by address-of: " + variable.toString() + " in " + stmtStr);
} else {
variable.setKind(Variable.Kind.LOAD_STORE);
SymbolType typeQualified = variable.getType().getQualified(true, variable.getType().isNomodify());
variable.setType(typeQualified);
// TODO: #121 Remove
variable.setVolatile(true);
getLog().append("Setting inferred volatile on symbol affected by address-of: " + variable.toString() + " in " + stmtStr);
}

@ -1,12 +1,16 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
import dk.camelot64.kickc.model.symbols.Scope;
import dk.camelot64.kickc.model.symbols.StructDefinition;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.ConstantStructValue;
import dk.camelot64.kickc.model.values.StructUnwoundPlaceholder;
import dk.camelot64.kickc.model.values.StructZero;
import dk.camelot64.kickc.passes.utils.SizeOfConstants;
/**
@ -27,6 +31,20 @@ public class Pass1StructTypeSizeFix extends Pass2SsaOptimization {
modified |= fixStructSize(variable.getType());
}
// Update all types hidden inside values
ProgramValueIterator.execute(getProgram(), (programValue, currentStmt, stmtIt, currentBlock) -> {
if(programValue.get() instanceof StructZero) {
final SymbolTypeStruct typeStruct = ((StructZero) programValue.get()).getTypeStruct();
fixStructSize(typeStruct);
} else if(programValue.get() instanceof ConstantStructValue) {
final SymbolTypeStruct typeStruct = ((ConstantStructValue) programValue.get()).getStructType();
fixStructSize(typeStruct);
} else if(programValue.get() instanceof StructUnwoundPlaceholder) {
final SymbolTypeStruct typeStruct = ((StructUnwoundPlaceholder) programValue.get()).getTypeStruct();
fixStructSize(typeStruct);
}
});
// Update all SIZEOF_XXX constants
for(Scope subScope : getScope().getAllScopes(false)) {
if(subScope instanceof StructDefinition) {

@ -13,6 +13,7 @@ import dk.camelot64.kickc.model.statements.StatementConditionalJump;
import dk.camelot64.kickc.model.StatementInfos;
import dk.camelot64.kickc.model.symbols.Scope;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.values.RValue;
import dk.camelot64.kickc.model.values.ScopeRef;
import dk.camelot64.kickc.model.values.SymbolRef;
@ -134,7 +135,8 @@ public class Pass2ConditionalJumpSimplification extends Pass2SsaOptimization {
final ScopeRef conditionDefineScopeRef = conditionDefineBlock.getScope();
final Scope conditionDefineScope = getScope().getScope(conditionDefineScopeRef);
final Variable intermediateLoadStoreVar = conditionDefineScope.addVariableIntermediate();
intermediateLoadStoreVar.setType(referencedLoadStoreVariable.getType());
SymbolType typeQualified = referencedLoadStoreVariable.getType().getQualified(false, referencedLoadStoreVariable.getType().isNomodify());
intermediateLoadStoreVar.setType(typeQualified);
final StatementAssignment intermediateLoadStoreAssignment = new StatementAssignment(intermediateLoadStoreVar.getVariableRef(), referencedLoadStoreVariable.getRef(), true, simpleCondition.conditionAssignment.getSource(), Comment.NO_COMMENTS);
conditionDefineBlock.addStatementAfter(intermediateLoadStoreAssignment, simpleCondition.conditionAssignment);
// Replace all references to the load/store variable in the expressions with the new intermediate

@ -9,6 +9,7 @@ import dk.camelot64.kickc.model.symbols.Scope;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeInference;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.values.*;
import java.util.concurrent.atomic.AtomicBoolean;
@ -40,6 +41,10 @@ public class Pass2DeInlineWordDerefIdx extends Pass2SsaOptimization {
programValue.set(new PointerDereferenceSimple(tmpVar.getRef()));
SymbolType pointerType = SymbolTypeInference.inferType(getScope(), new AssignmentRValue(tmpVarAssignment));
tmpVar.setType(pointerType);
if(((SymbolTypePointer)pointerType).getElementType().isNomodify())
tmpVar.setToNoModify(true);
if(((SymbolTypePointer)pointerType).getElementType().isVolatile())
tmpVar.setToVolatile(true);
optimized.set(true);
}
}

@ -77,7 +77,9 @@ public class Pass2NopCastInlining extends Pass2SsaOptimization {
delete.add((SymbolRef) castValue.getValue());
// Change the type of the assignment variable
Variable castVar = getScope().getVariable((VariableRef) castValue.getValue());
assignmentVar.setType(castVar.getType());
// Copy type qualifiers from the variable being assigned
SymbolType qualifiedType = castVar.getType().getQualified(assignmentVar.getType().isVolatile(), assignmentVar.getType().isNomodify());
assignmentVar.setType(qualifiedType);
// Remove the assignment
stmtIt.remove();
}

@ -8,6 +8,10 @@ import dk.camelot64.kickc.asm.AsmProgram;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.TargetPlatform;
import dk.camelot64.kickc.model.symbols.Symbol;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.parser.CTargetPlatformParser;
import kickass.KickAssembler65CE02;
import kickass.nonasm.c64.CharToPetsciiConverter;
@ -2236,7 +2240,7 @@ public class TestPrograms {
@Test
public void testStructPtr12() throws IOException, URISyntaxException {
compileAndCompare("struct-ptr-12.c");
compileAndCompare("struct-ptr-12.c", log());
}
@Test
@ -2916,7 +2920,7 @@ public class TestPrograms {
@Test
public void testTypeIdPlusBytes() throws IOException, URISyntaxException {
compileAndCompare("typeid-plus-bytes.c");
compileAndCompare("typeid-plus-bytes.c", log());
}
@Test
@ -5094,6 +5098,25 @@ public class TestPrograms {
defines.put("__KICKC__", "1");
defines.putAll(program.getTargetPlatform().getDefines());
compiler.compile(files, defines);
// TODO: #121 Delete when const/volatile is confirmed to work on SymbolType
for(Symbol symbol : program.getScope().getAllSymbols(true)) {
if(symbol instanceof Variable) {
Variable var = (Variable) symbol;
SymbolType varType = var.getType();
assertEquals(var.isVolatile(), varType.isVolatile(), "Variable volatile "+var.toString());
assertEquals(var.isNoModify(), varType.isNomodify(), "Variable nomodify "+var.toString());
boolean isToVolatile = false;
boolean isToNomodify = false;
if(varType instanceof SymbolTypePointer) {
isToVolatile = ((SymbolTypePointer) varType).getElementType().isVolatile();
isToNomodify = ((SymbolTypePointer) varType).getElementType().isNomodify();
}
assertEquals(var.isToVolatile(), isToVolatile, "Variable to volatile "+var.toString());
assertEquals(var.isToNoModify(), isToNomodify, "Variable to nomodify "+var.toString());
}
}
compileAsm(fileName, program);
boolean success = true;
ReferenceHelper helper = new ReferenceHelperFolder(refPath);

@ -2,7 +2,7 @@
#include "lib.h"
const char* SCREEN = 0x0400;
char* const SCREEN = 0x0400;
void main() {

@ -65,8 +65,6 @@ void main() {
SEI();
// Map memory to BANK 0 : 0x00XXXX - giving access to I/O
memoryRemap(0x00,0,0);
// Fast CPU, M65 IO
POKE(0,65);
// Disable Kernal & Basic
*PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK;
*PROCPORT = PROCPORT_RAM_IO;
@ -124,10 +122,13 @@ void main() {
VICIV->CHARPTR_HILO = 0;
graphics_render = GRAPHICS1;
}
VICIV->BORDER_COLOR = BLUE;
// Clear the graphics
memset_dma(graphics_render, 0x00, 40*25*8);
VICIV->BORDER_COLOR = PURPLE;
// Render some dots
render_dots();
VICIV->BORDER_COLOR = BLACK;
//Play SID
(*musicPlay)();
@ -212,7 +213,7 @@ unsigned int SINX2[SINX2_SIZE+256] = kickasm {{
void graphics_mode(void) {
// 16-bit text mode
VICIV->CONTROLC = VICIV_CHR16;
VICIV->CONTROLC = VICIV_CHR16|VICIV_VFAST;
// H320, fast CPU
VICIV->CONTROLB = VICIV_FAST;
// 320x200 per char, 16 pixels wide per char

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_sint 0 (struct printf_format_number){ 2, 0, 0, 0, 0, DECIMAL }

@ -3,6 +3,7 @@ Fixing struct type size struct ATARI_GTIA_READ to 32
Fixing struct type size struct ATARI_POKEY_READ to 16
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct ATARI_GTIA_READ to 32
Fixing struct type SIZE_OF struct ATARI_POKEY_READ to 16
Fixing struct type SIZE_OF struct printf_buffer_number to 12
@ -6808,13 +6809,13 @@ ASSEMBLER BEFORE OPTIMIZATION
// Find 2 entries that give 2020 when added together
// And 3 entries that give 2020 when added together
// Upstart
// Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="2020-01.xex", type="bin", segments="XexFile"]
.segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segmentdef Program [segments="Code, Data"]
.segmentdef Code [start=$2000]
// Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="2020-01.xex", type="bin", segments="XexFile"]
.segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segmentdef Program [segments="Code, Data"]
.segmentdef Code [start=$2000]
.segmentdef Data [startAfter="Code"]
// Global Constants & labels
.const SIZEOF_WORD = 2
@ -9782,13 +9783,13 @@ Score: 27696937
// Find 2 entries that give 2020 when added together
// And 3 entries that give 2020 when added together
// Upstart
// Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="2020-01.xex", type="bin", segments="XexFile"]
.segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segmentdef Program [segments="Code, Data"]
.segmentdef Code [start=$2000]
// Atari XL/XE executable XEX file with a single segment
// https://www.atarimax.com/jindroush.atari.org/afmtexe.html
.plugin "dk.camelot64.kickass.xexplugin.AtariXex"
.file [name="2020-01.xex", type="bin", segments="XexFile"]
.segmentdef XexFile [segments="Program", modify="XexFormat", _RunAddr=main]
.segmentdef Program [segments="Code, Data"]
.segmentdef Code [start=$2000]
.segmentdef Data [startAfter="Code"]
// Global Constants & labels
.const SIZEOF_WORD = 2

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of main::$3 = call strtouc main::pwd &main::pwd

@ -3,6 +3,7 @@ Fixing struct type size struct ATARI_GTIA_READ to 32
Fixing struct type size struct ATARI_POKEY_READ to 16
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct ATARI_GTIA_READ to 32
Fixing struct type SIZE_OF struct ATARI_POKEY_READ to 16
Fixing struct type SIZE_OF struct printf_buffer_number to 12

@ -4,6 +4,7 @@ Fixing struct type size struct ATARI_GTIA_READ to 32
Fixing struct type size struct ATARI_POKEY_READ to 16
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct ATARI_GTIA_READ to 32
Fixing struct type SIZE_OF struct ATARI_POKEY_READ to 16
Fixing struct type SIZE_OF struct printf_buffer_number to 12

@ -3,6 +3,7 @@ Fixing struct type size struct ATARI_GTIA_READ to 32
Fixing struct type size struct ATARI_POKEY_READ to 16
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct ATARI_GTIA_READ to 32
Fixing struct type SIZE_OF struct ATARI_POKEY_READ to 16
Fixing struct type SIZE_OF struct printf_buffer_number to 12

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_sint main::$1 (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_sint test_casting::signed_short_value (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint main::count (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -39,7 +39,7 @@ __start::@return: scope:[__start] from __start::@2
to:@return
SYMBOL TABLE SSA
const to_nomodify byte* SCREEN = (byte*)$400
const nomodify byte* SCREEN = (byte*)$400
void __start()
void main()
byte main::i
@ -172,7 +172,7 @@ Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
const to_nomodify byte* SCREEN = (byte*) 1024
const nomodify byte* SCREEN = (byte*) 1024
void main()
byte main::i
byte value

@ -1,4 +1,4 @@
const to_nomodify byte* SCREEN = (byte*) 1024
const nomodify byte* SCREEN = (byte*) 1024
void main()
byte main::i
byte value

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint 8 (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct foo to 14
Fixing struct type size struct foo to 14
Fixing struct type size struct foo to 14
Fixing struct type SIZE_OF struct foo to 14
Fixing struct type SIZE_OF struct foo to 14
Setting struct to load/store in variable affected by address-of main::barp = &bar

@ -3,6 +3,7 @@ Fixing struct type size struct ATARI_GTIA_READ to 32
Fixing struct type size struct ATARI_POKEY_READ to 16
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct ATARI_GTIA_READ to 32
Fixing struct type SIZE_OF struct ATARI_POKEY_READ to 16
Fixing struct type SIZE_OF struct printf_buffer_number to 12

@ -1,4 +1,17 @@
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type size struct $0 to 41
Fixing struct type SIZE_OF struct $0 to 41
Fixing struct type SIZE_OF struct $0 to 41
Setting inferred volatile on symbol affected by address-of main::$0 = call screensize &XSize &YSize

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch

@ -1,6 +1,7 @@
Loading link script "cx16-bankload.ld"
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch

@ -1,6 +1,7 @@
Resolved forward reference irq_vsync to __interrupt(rom_sys_cx16) void irq_vsync()
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch
@ -9775,21 +9776,21 @@ word~ bitmap_init::$25 2002.0
word~ bitmap_init::$26 2002.0
byte~ bitmap_init::$27 202.0
word~ bitmap_init::$28 2002.0
word*~ bitmap_init::$29 2002.0
to_nomodify word*~ bitmap_init::$29 2002.0
byte~ bitmap_init::$3 202.0
byte*~ bitmap_init::$30 2002.0
byte*~ bitmap_init::$31 2002.0
word*~ bitmap_init::$32 2002.0
byte*~ bitmap_init::$33 2002.0
byte*~ bitmap_init::$34 2002.0
word*~ bitmap_init::$35 2002.0
byte*~ bitmap_init::$36 2002.0
byte*~ bitmap_init::$37 2002.0
word*~ bitmap_init::$38 2002.0
byte*~ bitmap_init::$39 2002.0
to_nomodify byte*~ bitmap_init::$30 2002.0
to_nomodify byte*~ bitmap_init::$31 2002.0
to_nomodify word*~ bitmap_init::$32 2002.0
to_nomodify byte*~ bitmap_init::$33 2002.0
to_nomodify byte*~ bitmap_init::$34 2002.0
to_nomodify word*~ bitmap_init::$35 2002.0
to_nomodify byte*~ bitmap_init::$36 2002.0
to_nomodify byte*~ bitmap_init::$37 2002.0
to_nomodify word*~ bitmap_init::$38 2002.0
to_nomodify byte*~ bitmap_init::$39 2002.0
byte~ bitmap_init::$4 202.0
byte*~ bitmap_init::$40 2002.0
dword*~ bitmap_init::$41 2002.0
to_nomodify byte*~ bitmap_init::$40 2002.0
to_nomodify dword*~ bitmap_init::$41 2002.0
word~ bitmap_init::$7 667.3333333333334
dword bitmap_init::address
byte bitmap_init::bitmask
@ -10013,10 +10014,10 @@ word bitmap_line_ydxi::yd#1 6667.333333333333
word bitmap_line_ydxi::yd#5 1.3334666933333334E7
void bitmap_plot(word bitmap_plot::x , word bitmap_plot::y , byte bitmap_plot::c)
word~ bitmap_plot::$10 2.000000002E9
word*~ bitmap_plot::$12 1.000000001E9
dword*~ bitmap_plot::$13 2.000000002E9
byte*~ bitmap_plot::$14 2.000000002E9
byte*~ bitmap_plot::$15 2.000000002E9
to_nomodify word*~ bitmap_plot::$12 1.000000001E9
to_nomodify dword*~ bitmap_plot::$13 2.000000002E9
to_nomodify byte*~ bitmap_plot::$14 2.000000002E9
to_nomodify byte*~ bitmap_plot::$15 2.000000002E9
byte~ bitmap_plot::$3 2.000000002E9
byte~ bitmap_plot::$6 2.000000002E9
byte~ bitmap_plot::$7 2.000000002E9
@ -19035,21 +19036,21 @@ word~ bitmap_init::$25 zp[2]:82 2002.0
word~ bitmap_init::$26 zp[2]:114 2002.0
byte~ bitmap_init::$27 reg byte a 202.0
word~ bitmap_init::$28 zp[2]:104 2002.0
word*~ bitmap_init::$29 zp[2]:67 2002.0
to_nomodify word*~ bitmap_init::$29 zp[2]:67 2002.0
byte~ bitmap_init::$3 reg byte a 202.0
byte*~ bitmap_init::$30 zp[2]:69 2002.0
byte*~ bitmap_init::$31 zp[2]:72 2002.0
word*~ bitmap_init::$32 zp[2]:106 2002.0
byte*~ bitmap_init::$33 zp[2]:108 2002.0
byte*~ bitmap_init::$34 zp[2]:110 2002.0
word*~ bitmap_init::$35 zp[2]:82 2002.0
byte*~ bitmap_init::$36 zp[2]:84 2002.0
byte*~ bitmap_init::$37 zp[2]:86 2002.0
word*~ bitmap_init::$38 zp[2]:114 2002.0
byte*~ bitmap_init::$39 zp[2]:90 2002.0
to_nomodify byte*~ bitmap_init::$30 zp[2]:69 2002.0
to_nomodify byte*~ bitmap_init::$31 zp[2]:72 2002.0
to_nomodify word*~ bitmap_init::$32 zp[2]:106 2002.0
to_nomodify byte*~ bitmap_init::$33 zp[2]:108 2002.0
to_nomodify byte*~ bitmap_init::$34 zp[2]:110 2002.0
to_nomodify word*~ bitmap_init::$35 zp[2]:82 2002.0
to_nomodify byte*~ bitmap_init::$36 zp[2]:84 2002.0
to_nomodify byte*~ bitmap_init::$37 zp[2]:86 2002.0
to_nomodify word*~ bitmap_init::$38 zp[2]:114 2002.0
to_nomodify byte*~ bitmap_init::$39 zp[2]:90 2002.0
byte~ bitmap_init::$4 reg byte a 202.0
byte*~ bitmap_init::$40 zp[2]:92 2002.0
dword*~ bitmap_init::$41 zp[2]:104 2002.0
to_nomodify byte*~ bitmap_init::$40 zp[2]:92 2002.0
to_nomodify dword*~ bitmap_init::$41 zp[2]:104 2002.0
word~ bitmap_init::$7 zp[2]:65 667.3333333333334
dword bitmap_init::address
const dword bitmap_init::address#0 address = 0
@ -19275,10 +19276,10 @@ word bitmap_line_ydxi::yd#1 yd zp[2]:69 6667.333333333333
word bitmap_line_ydxi::yd#5 yd zp[2]:69 1.3334666933333334E7
void bitmap_plot(word bitmap_plot::x , word bitmap_plot::y , byte bitmap_plot::c)
word~ bitmap_plot::$10 zp[2]:98 2.000000002E9
word*~ bitmap_plot::$12 zp[2]:92 1.000000001E9
dword*~ bitmap_plot::$13 zp[2]:98 2.000000002E9
byte*~ bitmap_plot::$14 zp[2]:104 2.000000002E9
byte*~ bitmap_plot::$15 zp[2]:110 2.000000002E9
to_nomodify word*~ bitmap_plot::$12 zp[2]:92 1.000000001E9
to_nomodify dword*~ bitmap_plot::$13 zp[2]:98 2.000000002E9
to_nomodify byte*~ bitmap_plot::$14 zp[2]:104 2.000000002E9
to_nomodify byte*~ bitmap_plot::$15 zp[2]:110 2.000000002E9
byte~ bitmap_plot::$3 reg byte x 2.000000002E9
byte~ bitmap_plot::$6 reg byte a 2.000000002E9
byte~ bitmap_plot::$7 reg byte a 2.000000002E9

@ -86,21 +86,21 @@ word~ bitmap_init::$25 zp[2]:82 2002.0
word~ bitmap_init::$26 zp[2]:114 2002.0
byte~ bitmap_init::$27 reg byte a 202.0
word~ bitmap_init::$28 zp[2]:104 2002.0
word*~ bitmap_init::$29 zp[2]:67 2002.0
to_nomodify word*~ bitmap_init::$29 zp[2]:67 2002.0
byte~ bitmap_init::$3 reg byte a 202.0
byte*~ bitmap_init::$30 zp[2]:69 2002.0
byte*~ bitmap_init::$31 zp[2]:72 2002.0
word*~ bitmap_init::$32 zp[2]:106 2002.0
byte*~ bitmap_init::$33 zp[2]:108 2002.0
byte*~ bitmap_init::$34 zp[2]:110 2002.0
word*~ bitmap_init::$35 zp[2]:82 2002.0
byte*~ bitmap_init::$36 zp[2]:84 2002.0
byte*~ bitmap_init::$37 zp[2]:86 2002.0
word*~ bitmap_init::$38 zp[2]:114 2002.0
byte*~ bitmap_init::$39 zp[2]:90 2002.0
to_nomodify byte*~ bitmap_init::$30 zp[2]:69 2002.0
to_nomodify byte*~ bitmap_init::$31 zp[2]:72 2002.0
to_nomodify word*~ bitmap_init::$32 zp[2]:106 2002.0
to_nomodify byte*~ bitmap_init::$33 zp[2]:108 2002.0
to_nomodify byte*~ bitmap_init::$34 zp[2]:110 2002.0
to_nomodify word*~ bitmap_init::$35 zp[2]:82 2002.0
to_nomodify byte*~ bitmap_init::$36 zp[2]:84 2002.0
to_nomodify byte*~ bitmap_init::$37 zp[2]:86 2002.0
to_nomodify word*~ bitmap_init::$38 zp[2]:114 2002.0
to_nomodify byte*~ bitmap_init::$39 zp[2]:90 2002.0
byte~ bitmap_init::$4 reg byte a 202.0
byte*~ bitmap_init::$40 zp[2]:92 2002.0
dword*~ bitmap_init::$41 zp[2]:104 2002.0
to_nomodify byte*~ bitmap_init::$40 zp[2]:92 2002.0
to_nomodify dword*~ bitmap_init::$41 zp[2]:104 2002.0
word~ bitmap_init::$7 zp[2]:65 667.3333333333334
dword bitmap_init::address
const dword bitmap_init::address#0 address = 0
@ -326,10 +326,10 @@ word bitmap_line_ydxi::yd#1 yd zp[2]:69 6667.333333333333
word bitmap_line_ydxi::yd#5 yd zp[2]:69 1.3334666933333334E7
void bitmap_plot(word bitmap_plot::x , word bitmap_plot::y , byte bitmap_plot::c)
word~ bitmap_plot::$10 zp[2]:98 2.000000002E9
word*~ bitmap_plot::$12 zp[2]:92 1.000000001E9
dword*~ bitmap_plot::$13 zp[2]:98 2.000000002E9
byte*~ bitmap_plot::$14 zp[2]:104 2.000000002E9
byte*~ bitmap_plot::$15 zp[2]:110 2.000000002E9
to_nomodify word*~ bitmap_plot::$12 zp[2]:92 1.000000001E9
to_nomodify dword*~ bitmap_plot::$13 zp[2]:98 2.000000002E9
to_nomodify byte*~ bitmap_plot::$14 zp[2]:104 2.000000002E9
to_nomodify byte*~ bitmap_plot::$15 zp[2]:110 2.000000002E9
byte~ bitmap_plot::$3 reg byte x 2.000000002E9
byte~ bitmap_plot::$6 reg byte a 2.000000002E9
byte~ bitmap_plot::$7 reg byte a 2.000000002E9

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of kbhit::ch

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of: queen::column in asm { ldacolumn pha ldar pha }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint 8 (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx

@ -1,6 +1,7 @@
Fixing struct type size struct F018_DMAGIC to 17
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct F018_DMAGIC to 17
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct F018_DMAGIC to 17

@ -4,6 +4,7 @@ Resolved forward reference x_scroll to x_scroll
Resolved forward reference y_scroll to y_scroll
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Inlined call call disableVideoOutput

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list main::$1 = call printf_string "cml" (struct printf_format_string){ $a, 0 }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Setting inferred volatile on symbol affected by address-of call printf_uint (word)&main::c { 0, 0, 0, 0, 0, HEXADECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_string "x" (struct printf_format_string){ 3, 0 }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uchar main::c (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_sint 1 (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list main::$1 = call printf_schar -$4d (struct printf_format_number){ 6, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_string main::$3 (struct printf_format_string){ 0, 0 }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint main::rnd (struct printf_format_number){ 5, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint main::rnd (struct printf_format_number){ 5, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uint (word)main::pStar (struct printf_format_number){ 0, 0, 0, 0, 0, HEXADECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uchar (stars.star_x)[main::i] (struct printf_format_number){ 0, 0, 0, 0, 0, DECIMAL }

@ -1,5 +1,6 @@
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type size struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Fixing struct type SIZE_OF struct printf_buffer_number to 12
Added struct type cast to parameter value list call printf_uchar assert_char::expect (struct printf_format_number){ 0, 0, 0, 0, 0, HEXADECIMAL }

@ -1,6 +1,8 @@
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type SIZE_OF struct Person to 65
Fixing struct type SIZE_OF struct Person to 65
Inlined call call __init

@ -1,6 +1,8 @@
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type size struct Person to 65
Fixing struct type SIZE_OF struct Person to 65
Fixing struct type SIZE_OF struct Person to 65
Inlined call call __init

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type SIZE_OF struct Point to 3
Fixing struct type SIZE_OF struct Point to 3

@ -1,5 +1,6 @@
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type SIZE_OF struct Point to 3
Fixing struct type SIZE_OF struct Point to 3

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 4
Fixing struct type size struct Point to 4
Fixing struct type SIZE_OF struct Point to 4
Fixing struct type SIZE_OF struct Point to 4

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type SIZE_OF struct Point to 3
Fixing struct type SIZE_OF struct Point to 3

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type SIZE_OF struct Point to 3
Fixing struct type SIZE_OF struct Point to 3

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 4
Fixing struct type size struct Point to 4
Fixing struct type SIZE_OF struct Point to 4
Fixing struct type SIZE_OF struct Point to 4

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 3
Fixing struct type size struct Point to 3
Fixing struct type SIZE_OF struct Point to 3
Fixing struct type SIZE_OF struct Point to 3

@ -1,4 +1,5 @@
Fixing struct type size struct Point to 7
Fixing struct type size struct Point to 7
Fixing struct type SIZE_OF struct Point to 7
Fixing struct type SIZE_OF struct Point to 7

@ -1,6 +1,8 @@
Fixing struct type size struct Person to 5
Fixing struct type size struct Person to 5
Fixing struct type size struct Person to 5
Fixing struct type size struct Person to 5
Fixing struct type size struct Person to 5
Fixing struct type SIZE_OF struct Person to 5
Fixing struct type SIZE_OF struct Person to 5
Inlined call call __init

@ -1,6 +1,8 @@
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Setting struct to load/store in variable affected by address-of main::$0 = call print_person &main::jesper

@ -1,5 +1,7 @@
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Fixing constant pointer addition persons+1

@ -1,5 +1,7 @@
Fixing struct type size struct Person to 16
Fixing struct type size struct Person to 16
Fixing struct type size struct Person to 16
Fixing struct type size struct Person to 16
Fixing struct type SIZE_OF struct Person to 16
Fixing struct type SIZE_OF struct Person to 16

@ -1,6 +1,8 @@
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type size struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Fixing struct type SIZE_OF struct Person to 17
Inlined call call __init

@ -2,6 +2,8 @@ Fixing struct type size struct Tile to 25
Fixing struct type size struct Tile to 25
Fixing struct type size struct Tile to 25
Fixing struct type size struct Tile to 25
Fixing struct type size struct Tile to 25
Fixing struct type size struct Tile to 25
Fixing struct type SIZE_OF struct Tile to 25
Fixing struct type SIZE_OF struct Tile to 25
Setting struct to load/store in variable affected by address-of S1