mirror of
https://github.com/irmen/prog8.git
synced 2024-12-24 16:29:21 +00:00
empty for loops are removed
This commit is contained in:
parent
c38508c262
commit
af8279a9b9
@ -110,9 +110,6 @@ internal class AstChecker(private val program: Program,
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visit(forLoop: ForLoop) {
|
override fun visit(forLoop: ForLoop) {
|
||||||
if(forLoop.body.containsNoCodeNorVars())
|
|
||||||
errors.warn("for loop body is empty", forLoop.position)
|
|
||||||
|
|
||||||
val iterableDt = forLoop.iterable.inferType(program).typeOrElse(DataType.BYTE)
|
val iterableDt = forLoop.iterable.inferType(program).typeOrElse(DataType.BYTE)
|
||||||
if(iterableDt !in IterableDatatypes && forLoop.iterable !is RangeExpr) {
|
if(iterableDt !in IterableDatatypes && forLoop.iterable !is RangeExpr) {
|
||||||
errors.err("can only loop over an iterable type", forLoop.position)
|
errors.err("can only loop over an iterable type", forLoop.position)
|
||||||
|
@ -195,7 +195,7 @@ internal class StatementOptimizer(private val program: Program,
|
|||||||
|
|
||||||
override fun after(forLoop: ForLoop, parent: Node): Iterable<IAstModification> {
|
override fun after(forLoop: ForLoop, parent: Node): Iterable<IAstModification> {
|
||||||
if(forLoop.body.containsNoCodeNorVars()) {
|
if(forLoop.body.containsNoCodeNorVars()) {
|
||||||
// remove empty for loop
|
errors.warn("removing empty for loop", forLoop.position)
|
||||||
return listOf(IAstModification.Remove(forLoop, parent))
|
return listOf(IAstModification.Remove(forLoop, parent))
|
||||||
} else if(forLoop.body.statements.size==1) {
|
} else if(forLoop.body.statements.size==1) {
|
||||||
val loopvar = forLoop.body.statements[0] as? VarDecl
|
val loopvar = forLoop.body.statements[0] as? VarDecl
|
||||||
|
@ -37,10 +37,8 @@ sub start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub delay() {
|
sub delay() {
|
||||||
ubyte d
|
repeat 32 {
|
||||||
for d in 0 to 12 {
|
while c64.RASTER {
|
||||||
while c64.RASTER!=0 {
|
|
||||||
; tempo delay synced to screen refresh
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,7 @@ main {
|
|||||||
sub start() {
|
sub start() {
|
||||||
c64scr.print("fibonacci sequence\n")
|
c64scr.print("fibonacci sequence\n")
|
||||||
|
|
||||||
ubyte i
|
repeat 21 {
|
||||||
for i in 0 to 20 {
|
|
||||||
c64scr.print_uw(fib_next())
|
c64scr.print_uw(fib_next())
|
||||||
c64.CHROUT('\n')
|
c64.CHROUT('\n')
|
||||||
}
|
}
|
||||||
|
@ -7,64 +7,7 @@
|
|||||||
|
|
||||||
main {
|
main {
|
||||||
|
|
||||||
; TODO check removal of empty loops
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
ubyte i
|
|
||||||
for i in 1 to 20 {
|
|
||||||
c64.CHROUT('*')
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
i=0
|
|
||||||
do {
|
|
||||||
c64.CHROUT('*')
|
|
||||||
i++
|
|
||||||
} until i==20
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
repeat {
|
|
||||||
break
|
|
||||||
continue
|
|
||||||
c64.CHROUT('*')
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
repeat 0 {
|
|
||||||
c64.CHROUT('@')
|
|
||||||
break
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
repeat 1 {
|
|
||||||
c64.CHROUT('1')
|
|
||||||
continue
|
|
||||||
break
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
repeat 255 {
|
|
||||||
c64.CHROUT('@')
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
repeat 256 {
|
|
||||||
c64.CHROUT('!')
|
|
||||||
}
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
uword teller
|
|
||||||
repeat 4000 {
|
|
||||||
teller++
|
|
||||||
}
|
|
||||||
c64scr.print_uw(teller)
|
|
||||||
c64.CHROUT('\n')
|
|
||||||
|
|
||||||
|
|
||||||
repeat {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,12 @@ main {
|
|||||||
graphics.enable_bitmap_mode()
|
graphics.enable_bitmap_mode()
|
||||||
turtle.init()
|
turtle.init()
|
||||||
|
|
||||||
ubyte i
|
repeat 100 {
|
||||||
for i in 0 to 255 {
|
|
||||||
while c64.RASTER {
|
while c64.RASTER {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ubyte i
|
||||||
for i in 0 to 100 {
|
for i in 0 to 100 {
|
||||||
turtle.fd(i+20)
|
turtle.fd(i+20)
|
||||||
turtle.rt(94)
|
turtle.rt(94)
|
||||||
|
Loading…
Reference in New Issue
Block a user