This commit is contained in:
Irmen de Jong 2019-08-25 00:24:00 +02:00
parent 7caa0daffc
commit 59a43889a5
4 changed files with 791 additions and 387 deletions

View File

@ -147,6 +147,7 @@ internal class AstChecker(private val program: Program,
checkResult.add(ExpressionError("uword loop variable can only loop over unsigned bytes, words or strings", forLoop.position))
}
DataType.BYTE -> {
// TODO fix this, it should allow: for bb in [1,2,3]
if(iterableDt!= DataType.BYTE && iterableDt!= DataType.ARRAY_B)
checkResult.add(ExpressionError("byte loop variable can only loop over bytes", forLoop.position))
}

View File

@ -97,7 +97,7 @@ fun compileProgram(filepath: Path,
programAst.checkValid(compilerOptions) // check if final tree is valid
programAst.checkRecursion() // check if there are recursive subroutine calls
printAst(programAst)
// printAst(programAst)
if(writeAssembly) {
// asm generation directly from the Ast, no need for intermediate code

File diff suppressed because it is too large Load Diff

View File

@ -1,140 +0,0 @@
%zeropage basicsafe
; TODO implement asm generation for all loops here
main {
sub start() {
byte bvar
ubyte var2
ubyte[] barr = [22,33,44,55,66]
word[] warr = [-111,222,-333,444]
for A in "hello" {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in [1,3,5,99] {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in 10 to 20 {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in 20 to 10 step -1 {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in 10 to 21 step 3 {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in 24 to 10 step -3 {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for A in barr {
c64scr.print_ub(A)
c64.CHROUT(',')
}
c64.CHROUT('\n')
c64.CHROUT('\n')
ubyte cc
for cc in "hello" {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in [1,3,5,99] {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in 10 to 20 {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in 20 to 10 step -1 {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in 10 to 21 step 3 {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in 24 to 10 step -3 {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for cc in barr {
c64scr.print_ub(cc)
c64.CHROUT(',')
}
c64.CHROUT('\n')
c64.CHROUT('\n')
uword uw
for uw in [1111, 2222, 3333] {
c64scr.print_uw(uw)
c64.CHROUT(',')
}
c64.CHROUT('\n')
word ww
for ww in warr {
c64scr.print_w(ww)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for uw in 1111 to 1117 {
c64scr.print_uw(uw)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for uw in 2000 to 1995 step -1 {
c64scr.print_uw(uw)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for uw in 1111 to 50000 step 4444 {
c64scr.print_uw(uw)
c64.CHROUT(',')
}
c64.CHROUT('\n')
for ww in 999 to -999 step -500 {
c64scr.print_w(ww)
c64.CHROUT(',')
}
c64.CHROUT('\n')
c64.CHROUT('\n')
}
}