mirror of
https://github.com/irmen/prog8.git
synced 2024-09-16 16:55:50 +00:00
fix string literal replacing by identifierref
This commit is contained in:
parent
cc9965cc96
commit
6f7322150f
@ -236,6 +236,7 @@ internal class AstIdentifiersChecker(private val program: Program) : IAstModifyi
|
|||||||
override fun visit(refLiteral: ReferenceLiteralValue): Expression {
|
override fun visit(refLiteral: ReferenceLiteralValue): Expression {
|
||||||
val litval = super.visit(refLiteral)
|
val litval = super.visit(refLiteral)
|
||||||
if(litval is ReferenceLiteralValue) {
|
if(litval is ReferenceLiteralValue) {
|
||||||
|
val vardecl = litval.parent as? VarDecl
|
||||||
if (litval.isString) {
|
if (litval.isString) {
|
||||||
// intern the string; move it into the heap
|
// intern the string; move it into the heap
|
||||||
if (litval.str!!.length !in 1..255)
|
if (litval.str!!.length !in 1..255)
|
||||||
@ -243,8 +244,11 @@ internal class AstIdentifiersChecker(private val program: Program) : IAstModifyi
|
|||||||
else {
|
else {
|
||||||
litval.addToHeap(program.heap)
|
litval.addToHeap(program.heap)
|
||||||
}
|
}
|
||||||
|
return if(vardecl!=null)
|
||||||
|
litval
|
||||||
|
else
|
||||||
|
makeIdentifierFromRefLv(litval) // replace the literal string by a identifier reference.
|
||||||
} else if (litval.isArray) {
|
} else if (litval.isArray) {
|
||||||
val vardecl = litval.parent as? VarDecl
|
|
||||||
if (vardecl!=null) {
|
if (vardecl!=null) {
|
||||||
return fixupArrayDatatype(litval, vardecl, program.heap)
|
return fixupArrayDatatype(litval, vardecl, program.heap)
|
||||||
} else {
|
} else {
|
||||||
@ -253,7 +257,7 @@ internal class AstIdentifiersChecker(private val program: Program) : IAstModifyi
|
|||||||
val datatype = determineArrayDt(litval.array!!) ?: return litval
|
val datatype = determineArrayDt(litval.array!!) ?: return litval
|
||||||
val litval2 = litval.cast(datatype)!!
|
val litval2 = litval.cast(datatype)!!
|
||||||
litval2.parent = litval.parent
|
litval2.parent = litval.parent
|
||||||
// finally, replace the literal by a identifier reference.
|
// finally, replace the literal array by a identifier reference.
|
||||||
return makeIdentifierFromRefLv(litval2)
|
return makeIdentifierFromRefLv(litval2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,15 @@
|
|||||||
main {
|
main {
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
; byte bvar
|
byte bvar
|
||||||
; ubyte var2
|
ubyte var2
|
||||||
;
|
|
||||||
; for A in "hello" {
|
for A in "hello" {
|
||||||
; c64scr.print_ub(A)
|
c64scr.print_ub(A)
|
||||||
; c64.CHROUT(',')
|
c64.CHROUT(',')
|
||||||
; }
|
}
|
||||||
; c64.CHROUT('\n')
|
c64.CHROUT('\n')
|
||||||
;
|
|
||||||
; for A in [1,3,5,99] {
|
; for A in [1,3,5,99] {
|
||||||
; c64scr.print_ub(A)
|
; c64scr.print_ub(A)
|
||||||
; c64.CHROUT(',')
|
; c64.CHROUT(',')
|
||||||
@ -26,12 +26,6 @@ main {
|
|||||||
; }
|
; }
|
||||||
; c64.CHROUT('\n')
|
; c64.CHROUT('\n')
|
||||||
|
|
||||||
for float fl in [1.1, 2.2, 5.5, 99.99] {
|
|
||||||
c64flt.print_f(fl)
|
|
||||||
c64.CHROUT(',')
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
; for var2 in 10 to 20 {
|
; for var2 in 10 to 20 {
|
||||||
; c64scr.print_ub(var2)
|
; c64scr.print_ub(var2)
|
||||||
; c64.CHROUT(',')
|
; c64.CHROUT(',')
|
||||||
@ -48,6 +42,12 @@ main {
|
|||||||
; c64scr.print_b(bvar)
|
; c64scr.print_b(bvar)
|
||||||
; c64.CHROUT(',')
|
; c64.CHROUT(',')
|
||||||
; }
|
; }
|
||||||
|
; c64.CHROUT('\n')
|
||||||
|
|
||||||
|
; for float fl in [1.1, 2.2, 5.5, 99.99] {
|
||||||
|
; c64flt.print_f(fl)
|
||||||
|
; c64.CHROUT(',')
|
||||||
|
; }
|
||||||
; c64.CHROUT('\n')
|
; c64.CHROUT('\n')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user