From 1edb436dfd54648a8a544870bc0825055cf48cd6 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 28 Nov 2017 01:23:59 +0100 Subject: [PATCH] Fixed problem with ++ being added twice in *(char_cursor++) = *str; --- .../passes/Pass1GenerateStatementSequence.java | 2 -- .../Pass3VariableRegisterWeightAnalysis.java | 18 ++++++------------ src/main/java/dk/camelot64/kickc/test/print.kc | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java index 32a5405fc..9a1b89241 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java @@ -387,9 +387,7 @@ public class Pass1GenerateStatementSequence extends KickCBaseVisitor { @Override public Object visitLvaluePtrExpr(KickCParser.LvaluePtrExprContext ctx) { - PrePostModifierHandler.addPreModifiers(this, ctx.expr()); RValue rValue = (RValue) this.visit(ctx.expr()); - PrePostModifierHandler.addPostModifiers(this, ctx.expr()); return new PointerDereferenceSimple(rValue); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3VariableRegisterWeightAnalysis.java b/src/main/java/dk/camelot64/kickc/passes/Pass3VariableRegisterWeightAnalysis.java index d85100ae7..8a9822714 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass3VariableRegisterWeightAnalysis.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass3VariableRegisterWeightAnalysis.java @@ -49,18 +49,7 @@ public class Pass3VariableRegisterWeightAnalysis extends Pass2Base { } } else if (statement instanceof StatementAssignment) { // Add weights for the definition of the variable - LValue lValue = ((StatementAssignment) statement).getlValue(); - if (lValue instanceof VariableRef) { - double w = addWeight((VariableRef) lValue, block.getLabel()); - //log.append("Definition of " + lValue + " w+:" + w + " - [" + statement.getIndex()+"]"); - } - // Also add weight to used pointers - if(lValue instanceof PointerDereferenceSimple) { - addUsageWeightRValue(((PointerDereferenceSimple) lValue).getPointer(), statement, block.getLabel()); - } else if(lValue instanceof PointerDereferenceIndexed) { - addUsageWeightRValue(((PointerDereferenceIndexed) lValue).getPointer(), statement, block.getLabel()); - addUsageWeightRValue(((PointerDereferenceIndexed) lValue).getIndex(), statement, block.getLabel()); - } + addUsageWeightRValue(((StatementAssignment) statement).getlValue(), statement, block.getLabel()); // Add weights for each usage of variables addUsageWeightRValue(((StatementAssignment) statement).getrValue1(), statement, block.getLabel()); addUsageWeightRValue(((StatementAssignment) statement).getrValue2(), statement, block.getLabel()); @@ -80,6 +69,11 @@ public class Pass3VariableRegisterWeightAnalysis extends Pass2Base { if (rValue instanceof VariableRef) { double w = addWeight((VariableRef) rValue, block); //log.append("Usage of " + rValue + " w+:" + w + " - [" + statement.getIndex()+"]"); + } else if(rValue instanceof PointerDereferenceSimple) { + addUsageWeightRValue(((PointerDereferenceSimple) rValue).getPointer(), statement, block); + } else if(rValue instanceof PointerDereferenceIndexed) { + addUsageWeightRValue(((PointerDereferenceIndexed) rValue).getPointer(), statement, block); + addUsageWeightRValue(((PointerDereferenceIndexed) rValue).getIndex(), statement, block); } } diff --git a/src/main/java/dk/camelot64/kickc/test/print.kc b/src/main/java/dk/camelot64/kickc/test/print.kc index 24650d7e1..f2656efaf 100644 --- a/src/main/java/dk/camelot64/kickc/test/print.kc +++ b/src/main/java/dk/camelot64/kickc/test/print.kc @@ -15,7 +15,7 @@ byte* char_cursor = line_cursor; // Print a zero-terminated string void print_str(byte* str) { while(*str!='@') { - *(char_cursor++) = *str; + *(char_cursor++) = *(str++); } }