From d7d7147d43384f2c9e9022021c6b4184aefdd5ca Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 27 Dec 2020 02:28:40 +0100 Subject: [PATCH] added error message when not using returnvalue of a functioncall --- compiler/src/prog8/ast/processing/AstChecker.kt | 6 ++++++ compiler/src/prog8/functions/BuiltinFunctions.kt | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/compiler/src/prog8/ast/processing/AstChecker.kt b/compiler/src/prog8/ast/processing/AstChecker.kt index a06eb908a..7239d4795 100644 --- a/compiler/src/prog8/ast/processing/AstChecker.kt +++ b/compiler/src/prog8/ast/processing/AstChecker.kt @@ -11,6 +11,7 @@ import prog8.compiler.target.C64Target import prog8.compiler.target.CompilationTarget import prog8.compiler.target.Cx16Target import prog8.functions.BuiltinFunctions +import prog8.functions.builtinFunctionReturnType import java.io.File internal class AstChecker(private val program: Program, @@ -972,6 +973,11 @@ internal class AstChecker(private val program: Program, else errors.warn("result values of subroutine call are discarded (use void?)", functionCallStatement.position) } + else if(targetStatement is BuiltinFunctionStatementPlaceholder) { + val rt = builtinFunctionReturnType(targetStatement.name, functionCallStatement.args, program) + if(rt.isKnown) + errors.warn("result value of a function call is discarded (use void?)", functionCallStatement.position) + } } if(functionCallStatement.target.nameInSource.last() == "sort") { diff --git a/compiler/src/prog8/functions/BuiltinFunctions.kt b/compiler/src/prog8/functions/BuiltinFunctions.kt index ae7aaaf4d..49674d5ec 100644 --- a/compiler/src/prog8/functions/BuiltinFunctions.kt +++ b/compiler/src/prog8/functions/BuiltinFunctions.kt @@ -145,9 +145,9 @@ private val functionSignatures: List = listOf( FSignature("clear_irqd" , false, emptyList(), null), FSignature("read_flags" , true, emptyList(), DataType.UBYTE), FSignature("progend" , true, emptyList(), DataType.UWORD), + FSignature("memory" , true, listOf(FParam("name", setOf(DataType.STR)), FParam("size", setOf(DataType.UWORD))), DataType.UWORD), FSignature("target" , true, emptyList(), DataType.UBYTE, ::builtinTarget), FSignature("swap" , false, listOf(FParam("first", NumericDatatypes), FParam("second", NumericDatatypes)), null), - FSignature("memory" , false, listOf(FParam("name", setOf(DataType.STR)), FParam("size", setOf(DataType.UWORD))), DataType.UWORD), FSignature("memcopy" , false, listOf( FParam("from", IterableDatatypes + DataType.UWORD), FParam("to", IterableDatatypes + DataType.UWORD),