From 0af5582ca7db9227b54230325fdf2416cdf2e085 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Fri, 27 Mar 2020 23:09:46 +0100 Subject: [PATCH] fix compiler crash for undefined symbol in expression --- compiler/src/prog8/ast/expressions/AstExpressions.kt | 6 +++--- compiler/src/prog8/ast/processing/AstChecker.kt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/src/prog8/ast/expressions/AstExpressions.kt b/compiler/src/prog8/ast/expressions/AstExpressions.kt index ec7ab06b9..261f2eb91 100644 --- a/compiler/src/prog8/ast/expressions/AstExpressions.kt +++ b/compiler/src/prog8/ast/expressions/AstExpressions.kt @@ -768,10 +768,10 @@ data class IdentifierReference(val nameInSource: List, override val posi override fun inferType(program: Program): InferredTypes.InferredType { val targetStmt = targetStatement(program.namespace) - if(targetStmt is VarDecl) { - return InferredTypes.knownFor(targetStmt.datatype) + return if(targetStmt is VarDecl) { + InferredTypes.knownFor(targetStmt.datatype) } else { - throw FatalAstException("cannot get datatype from identifier reference ${this}, pos=$position") + InferredTypes.InferredType.unknown() } } diff --git a/compiler/src/prog8/ast/processing/AstChecker.kt b/compiler/src/prog8/ast/processing/AstChecker.kt index e9d8831c4..fa3852784 100644 --- a/compiler/src/prog8/ast/processing/AstChecker.kt +++ b/compiler/src/prog8/ast/processing/AstChecker.kt @@ -716,9 +716,9 @@ internal class AstChecker(private val program: Program, override fun visit(expr: BinaryExpression) { val leftIDt = expr.left.inferType(program) val rightIDt = expr.right.inferType(program) - if(!leftIDt.isKnown || !rightIDt.isKnown) { - throw FatalAstException("can't determine datatype of both expression operands $expr") - } + if(!leftIDt.isKnown || !rightIDt.isKnown) + return // hopefully this error will be detected elsewhere + val leftDt = leftIDt.typeOrElse(DataType.STRUCT) val rightDt = rightIDt.typeOrElse(DataType.STRUCT)