From 48c9349ce91f7a6bb19ddd5f08d6da3cfb286738 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Wed, 25 Jan 2023 01:57:25 +0100 Subject: [PATCH] working on codegen fixes --- .../src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt | 3 ++- codeGenCpu6502/src/prog8/codegen/cpu6502/Extensions.kt | 7 ++++++- .../prog8/codegen/cpu6502/assignment/AsmAssignment.kt | 9 ++++----- examples/test.p8 | 9 +++++++-- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt index 3d0889337..2ca7a4d24 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt @@ -71,7 +71,8 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, "callrom" -> funcCallRom(fcall) else -> throw AssemblyError("missing asmgen for builtin func ${fcall.name}") } - TODO("return correct function result type") + + return BuiltinFunctions.getValue(fcall.name).returnType } private fun funcRsave() { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/Extensions.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/Extensions.kt index e9fba1dd6..eb99c74cf 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/Extensions.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/Extensions.kt @@ -59,7 +59,12 @@ fun PtExpression.isSimple(): Boolean { } internal fun PtIdentifier.targetStatement(program: PtProgram): PtNode? { - TODO("Not yet implemented") + TODO("Not yet implemented target stmt for ${this.name}") +// if(nameInSource.size==1 && nameInSource[0] in program.builtinFunctions.names) +// BuiltinFunctionPlaceholder(nameInSource[0], position, parent) +// else +// definingScope.lookup(nameInSource) +// } internal fun PtIdentifier.targetVarDecl(program: PtProgram): PtVariable? = diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt index 60d7e8826..fd913d0d3 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt @@ -2,10 +2,7 @@ package prog8.codegen.cpu6502.assignment import prog8.code.ast.* import prog8.code.core.* -import prog8.codegen.cpu6502.AsmGen -import prog8.codegen.cpu6502.asConstInteger -import prog8.codegen.cpu6502.returnsWhatWhere -import prog8.codegen.cpu6502.targetSubroutine +import prog8.codegen.cpu6502.* internal enum class TargetStorageKind { @@ -57,7 +54,9 @@ internal class AsmAssignTarget(val kind: TargetStorageKind, with(assign.target) { when { identifier != null -> { - val parameter: PtSubroutineParameter = TODO("search subroutine parameter that it may refer to ${assign.target.identifier!!.name}") // identifier!!.targetVarDecl(program)?.subroutineParameter + val paramName = identifier!!.targetVarDecl(program)?.name + val parameter = identifier!!.targetStatement(program)?.definingSub()?.parameters?.singleOrNull { it.name===paramName } + println("assign to ${identifier!!.name} param=$parameter") // TODO WEG if (parameter!=null) { val sub = parameter.definingAsmSub() if (sub!=null) { diff --git a/examples/test.p8 b/examples/test.p8 index 168bb6bee..c4f41e539 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -5,8 +5,13 @@ main { sub start() { - ubyte @shared ub = asmfoo(42) - ub = normalfoo(42) + rsavex() + + ubyte @shared ub + void asmfoo(42) + main.asmfoo.arg = 42 + main.normalfoo.arg=99 + ; normalfoo(42) somelabel: ub++ txt.print_ub(ub)