From 6fa3f0b6cd58e3d7179d502c0e2ecdd2dd500eec Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sat, 8 Jan 2022 18:02:38 +0100 Subject: [PATCH] small refactor --- .../compiler/astprocessing/AstExtensions.kt | 4 +-- .../BeforeAsmAstChanger.kt} | 6 ++-- .../BeforeAsmTypecastCleaner.kt | 3 +- compiler/test/TestOptimization.kt | 29 +++++-------------- 4 files changed, 13 insertions(+), 29 deletions(-) rename compiler/src/prog8/compiler/{BeforeAsmGenerationAstChanger.kt => astprocessing/BeforeAsmAstChanger.kt} (98%) rename compiler/src/prog8/compiler/{ => astprocessing}/BeforeAsmTypecastCleaner.kt (97%) diff --git a/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt b/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt index 42cb9145a..13a71cb2c 100644 --- a/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt +++ b/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt @@ -9,8 +9,6 @@ import prog8.ast.expressions.NumericLiteralValue import prog8.ast.statements.Directive import prog8.ast.walk.AstWalker import prog8.ast.walk.IAstModification -import prog8.compiler.BeforeAsmGenerationAstChanger -import prog8.compiler.BeforeAsmTypecastCleaner import prog8.compilerinterface.CompilationOptions import prog8.compilerinterface.IErrorReporter import prog8.compilerinterface.IStringEncoding @@ -24,7 +22,7 @@ internal fun Program.checkValid(errors: IErrorReporter, compilerOptions: Compila } internal fun Program.processAstBeforeAsmGeneration(compilerOptions: CompilationOptions, errors: IErrorReporter) { - val fixer = BeforeAsmGenerationAstChanger(this, compilerOptions, errors) + val fixer = BeforeAsmAstChanger(this, compilerOptions, errors) fixer.visit(this) while(errors.noErrors() && fixer.applyModifications()>0) { fixer.visit(this) diff --git a/compiler/src/prog8/compiler/BeforeAsmGenerationAstChanger.kt b/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt similarity index 98% rename from compiler/src/prog8/compiler/BeforeAsmGenerationAstChanger.kt rename to compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt index 4764cfe5c..b4b813b46 100644 --- a/compiler/src/prog8/compiler/BeforeAsmGenerationAstChanger.kt +++ b/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt @@ -1,4 +1,4 @@ -package prog8.compiler +package prog8.compiler.astprocessing import prog8.ast.IFunctionCall import prog8.ast.IStatementContainer @@ -16,8 +16,8 @@ import prog8.compilerinterface.IErrorReporter import prog8.compilerinterface.isIOAddress import prog8.optimizer.getTempVarName -internal class BeforeAsmGenerationAstChanger(val program: Program, private val options: CompilationOptions, - private val errors: IErrorReporter +internal class BeforeAsmAstChanger(val program: Program, private val options: CompilationOptions, + private val errors: IErrorReporter ) : AstWalker() { private val subroutineVariables = mutableMapOf>>() diff --git a/compiler/src/prog8/compiler/BeforeAsmTypecastCleaner.kt b/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt similarity index 97% rename from compiler/src/prog8/compiler/BeforeAsmTypecastCleaner.kt rename to compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt index 99e4c671f..9fa4b5fcf 100644 --- a/compiler/src/prog8/compiler/BeforeAsmTypecastCleaner.kt +++ b/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt @@ -1,4 +1,4 @@ -package prog8.compiler +package prog8.compiler.astprocessing import prog8.ast.IFunctionCall import prog8.ast.Node @@ -13,7 +13,6 @@ import prog8.ast.expressions.IdentifierReference import prog8.ast.expressions.TypecastExpression import prog8.ast.walk.AstWalker import prog8.ast.walk.IAstModification -import prog8.compiler.astprocessing.isSubroutineParameter import prog8.compilerinterface.IErrorReporter internal class BeforeAsmTypecastCleaner(val program: Program, diff --git a/compiler/test/TestOptimization.kt b/compiler/test/TestOptimization.kt index d90d7708f..54530c231 100644 --- a/compiler/test/TestOptimization.kt +++ b/compiler/test/TestOptimization.kt @@ -14,19 +14,14 @@ import prog8.ast.base.ParentSentinel import prog8.ast.base.Position import prog8.ast.expressions.* import prog8.ast.statements.* -import prog8.compiler.printProgram import prog8.codegen.target.C64Target -import prog8.compiler.BeforeAsmGenerationAstChanger -import prog8.compiler.BeforeAsmTypecastCleaner -import prog8.compilerinterface.* +import prog8.compiler.astprocessing.processAstBeforeAsmGeneration +import prog8.compiler.printProgram +import prog8.compilerinterface.CompilationOptions +import prog8.compilerinterface.LauncherType +import prog8.compilerinterface.OutputType +import prog8.compilerinterface.ZeropageType import prog8tests.helpers.* -import prog8tests.helpers.DummyFunctions -import prog8tests.helpers.DummyMemsizer -import prog8tests.helpers.DummyStringEncoder -import prog8tests.helpers.ErrorReporterForTests -import prog8tests.helpers.assertSuccess -import prog8tests.helpers.compileText -import prog8tests.helpers.generateAssembly class TestOptimization: FunSpec({ test("remove empty subroutine except start") { @@ -305,16 +300,8 @@ class TestOptimization: FunSpec({ expr.inferType(result.program).getOrElse { fail("dt") } shouldBe DataType.UBYTE val options = CompilationOptions(OutputType.RAW, LauncherType.NONE, ZeropageType.DONTUSE, emptyList(), false, true, C64Target) - val changer = BeforeAsmGenerationAstChanger(result.program, options, ErrorReporterForTests()) - changer.visit(result.program) - while(changer.applyModifications()>0) { - changer.visit(result.program) - } - val cleaner = BeforeAsmTypecastCleaner(result.program, ErrorReporterForTests()) - cleaner.visit(result.program) - while(cleaner.applyModifications()>0) { - cleaner.visit(result.program) - } + result.program.processAstBeforeAsmGeneration(options, ErrorReporterForTests()) + // assignment is now split into: // bb = not bb // bb = (bb or not ww)