fix compiler crash when initializing struct var with something other than a struct literal

This commit is contained in:
Irmen de Jong 2020-03-20 22:48:33 +01:00
parent f265199fbe
commit 511b47bac4
3 changed files with 8 additions and 3 deletions

View File

@ -82,6 +82,11 @@ internal class AstIdentifiersChecker(private val program: Program,
return super.visit(decl)
}
if(decl.value !is StructLiteralValue) {
errors.err("requires struct literal value to initialize a struct variable", decl.value?.position ?: decl.position)
return super.visit(decl)
}
val decls = decl.flattenStructMembers()
decls.add(decl)
val result = AnonymousScope(decls, decl.position)

View File

@ -118,8 +118,8 @@ internal class AssignmentAsmGen(private val program: Program, private val asmgen
assignFromEvalResult(assign.target)
}
is ArrayLiteralValue, is StringLiteralValue -> TODO("string/array/struct assignment?")
is StructLiteralValue -> throw AssemblyError("struct literal value assignment should have been flattened")
is RangeExpr -> throw AssemblyError("range expression should have been changed into array values")
is StructLiteralValue -> throw AssemblyError("struct literal value assignment should have been flattened ${assign.value.position}")
is RangeExpr -> throw AssemblyError("range expression should have been changed into array values ${assign.value.position}")
}
}

View File

@ -12,8 +12,8 @@ main {
}
sub start() {
; Color c = [1,2,3] ; TODO fix compiler error
Color c = {1,2,3}
c= {1,2,3}
}
}