From 9953c1d379192608f0ca4c940f6b5dbf682cb582 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 1 Jun 2020 22:34:21 +0200 Subject: [PATCH] Slight optimization not initializing exception stack trace on every usage. --- .../java/dk/camelot64/kickc/model/ConstantNotLiteral.java | 6 +++++- .../camelot64/kickc/model/operators/OperatorAddressOf.java | 2 +- .../camelot64/kickc/model/operators/OperatorCastDWord.java | 2 +- .../dk/camelot64/kickc/model/operators/OperatorCastPtr.java | 2 +- .../camelot64/kickc/model/operators/OperatorCastWord.java | 2 +- .../camelot64/kickc/model/operators/OperatorDecrement.java | 2 +- .../dk/camelot64/kickc/model/operators/OperatorGetHigh.java | 4 ++-- .../dk/camelot64/kickc/model/operators/OperatorGetLow.java | 6 +++--- .../camelot64/kickc/model/operators/OperatorIncrement.java | 2 +- .../camelot64/kickc/model/operators/OperatorMultiply.java | 2 +- .../dk/camelot64/kickc/model/operators/OperatorPlus.java | 2 +- .../camelot64/kickc/model/values/ConstantArrayFilled.java | 2 +- .../camelot64/kickc/model/values/ConstantArrayKickAsm.java | 2 +- .../dk/camelot64/kickc/model/values/ConstantArrayList.java | 2 +- .../camelot64/kickc/model/values/ConstantStructValue.java | 2 +- .../camelot64/kickc/model/values/ConstantSymbolPointer.java | 4 ++-- .../java/dk/camelot64/kickc/model/values/StructZero.java | 2 +- 17 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/ConstantNotLiteral.java b/src/main/java/dk/camelot64/kickc/model/ConstantNotLiteral.java index c9147e0cb..98d8a8876 100644 --- a/src/main/java/dk/camelot64/kickc/model/ConstantNotLiteral.java +++ b/src/main/java/dk/camelot64/kickc/model/ConstantNotLiteral.java @@ -6,7 +6,11 @@ package dk.camelot64.kickc.model; **/ public class ConstantNotLiteral extends RuntimeException { - public ConstantNotLiteral(String message) { + /** Global singleton (saves initialization time for the exception stacktrace)*/ + public static final ConstantNotLiteral EXCEPTION = new ConstantNotLiteral("Constant not literal!"); + + private ConstantNotLiteral(String message) { super(message); } + } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java index f0da75fec..c49490e91 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorAddressOf.java @@ -15,7 +15,7 @@ public class OperatorAddressOf extends OperatorUnary { @Override public ConstantLiteral calculateLiteral(ConstantLiteral operand, ProgramScope scope) { - throw new ConstantNotLiteral("Constant not literal"); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java index 1a8ef4271..fa52ba711 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastDWord.java @@ -22,7 +22,7 @@ public class OperatorCastDWord extends OperatorCast { } else if(value instanceof ConstantPointer) { return new ConstantInteger(0xffff & ((ConstantPointer) value).getLocation(), SymbolType.DWORD); } else if(value instanceof ConstantString) { - throw new ConstantNotLiteral("String cannot be cast to dword"); + throw ConstantNotLiteral.EXCEPTION; } throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtr.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtr.java index e2e295acc..1c42ab090 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtr.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastPtr.java @@ -27,7 +27,7 @@ public class OperatorCastPtr extends OperatorCast { } else if(value instanceof ConstantPointer) { return new ConstantPointer(((ConstantPointer) value).getLocation(), pointerType.getElementType()); } else if(value instanceof ConstantString){ - throw new ConstantNotLiteral("Constant string not literal"); + throw ConstantNotLiteral.EXCEPTION; } throw new InternalError("Calculation not implemented " + getOperator() + " " + value); } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java index 027391233..fb7719c53 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastWord.java @@ -22,7 +22,7 @@ public class OperatorCastWord extends OperatorCast { } else if(value instanceof ConstantPointer) { return new ConstantInteger(0xffff & ((ConstantPointer) value).getLocation(), SymbolType.WORD); } else if(value instanceof ConstantString) { - throw new ConstantNotLiteral("String cannot be cast to word"); + throw ConstantNotLiteral.EXCEPTION; } throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java index 6ec62890e..e025f7e11 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorDecrement.java @@ -21,7 +21,7 @@ public class OperatorDecrement extends OperatorUnary { } else if(operand instanceof ConstantPointer) { return new ConstantPointer(0xffff&(((ConstantPointer) operand).getLocation()-1), ((ConstantPointer) operand).getElementType()); } - throw new ConstantNotLiteral("Calculation not literal " + getOperator() + " " + operand ); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java index 0cb3ae430..e83808239 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetHigh.java @@ -28,12 +28,12 @@ public class OperatorGetHigh extends OperatorUnary { } else if(SymbolType.BYTE.equals(operandInt.getType()) || SymbolType.SBYTE.equals(operandInt.getType())) { return new ConstantInteger(0L, SymbolType.BYTE); } else if(SymbolType.NUMBER.equals(operandInt.getType())) { - throw new ConstantNotLiteral("Operand not resolved "+operand); + throw ConstantNotLiteral.EXCEPTION; } } else if(operand instanceof ConstantPointer) { return new ConstantInteger(((ConstantPointer) operand).getLocation()>>8); } else if(operand instanceof ConstantString) { - throw new ConstantNotLiteral("address of string is not literal"); + throw ConstantNotLiteral.EXCEPTION; } throw new CompileError("Calculation not implemented " + getOperator() + " " + operand ); } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java index 01d7605e5..f37c0617c 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorGetLow.java @@ -28,14 +28,14 @@ public class OperatorGetLow extends OperatorUnary { } else if(SymbolType.BYTE.equals(operandInt.getType()) || SymbolType.SBYTE.equals(operandInt.getType())) { return operandInt; } else if(SymbolType.NUMBER.equals(operandInt.getType())) { - throw new ConstantNotLiteral("Operand not resolved "+operand); + throw ConstantNotLiteral.EXCEPTION; } } else if(operand instanceof ConstantPointer) { return new ConstantInteger(((ConstantPointer) operand).getLocation()&0xff); } else if(operand instanceof ConstantString) { - throw new ConstantNotLiteral("address of string is not literal"); + throw ConstantNotLiteral.EXCEPTION; } - throw new ConstantNotLiteral("Calculation not implemented " + getOperator() + " " + operand ); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java index 711e12625..6778234be 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorIncrement.java @@ -21,7 +21,7 @@ public class OperatorIncrement extends OperatorUnary { } else if(operand instanceof ConstantPointer) { return new ConstantPointer(0xffff&(((ConstantPointer) operand).getLocation()+1), ((ConstantPointer) operand).getElementType()); } - throw new ConstantNotLiteral("Calculation not literal " + getOperator() + " " + operand ); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java index ec24f32d2..866933d91 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorMultiply.java @@ -17,7 +17,7 @@ public class OperatorMultiply extends OperatorBinary { if(left instanceof ConstantInteger && right instanceof ConstantInteger) { return new ConstantInteger(((ConstantInteger) left).getInteger() * ((ConstantInteger) right).getInteger()); } - throw new ConstantNotLiteral("Not literal "+left.toString()+"*"+right.toString()); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java index 6d6cd8405..69aab8c7f 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorPlus.java @@ -23,7 +23,7 @@ public class OperatorPlus extends OperatorBinary { } else if(left instanceof ConstantEnumerable && right instanceof ConstantEnumerable) { return new ConstantInteger(((ConstantEnumerable) left).getInteger() + ((ConstantEnumerable) right).getInteger()); } else if(left instanceof ConstantString && right instanceof ConstantInteger) { - throw new ConstantNotLiteral("String pointer not literal"); + throw ConstantNotLiteral.EXCEPTION; } throw new CompileError("Calculation not implemented " + left + " " + getOperator() + " " + right); } diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayFilled.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayFilled.java index 4a5d5a9d6..964cb29cc 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayFilled.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayFilled.java @@ -39,7 +39,7 @@ public class ConstantArrayFilled implements ConstantArray { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - throw new ConstantNotLiteral("Cannot calculate literal array"); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java index 2772490b1..bc0861e5d 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java @@ -64,7 +64,7 @@ public class ConstantArrayKickAsm implements ConstantArray { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - throw new ConstantNotLiteral("Cannot calculate literal array"); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java index 55fbfa1c7..d3b2150ae 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java @@ -52,7 +52,7 @@ public class ConstantArrayList implements ConstantArray { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - throw new ConstantNotLiteral("Cannot calculate literal array"); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantStructValue.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantStructValue.java index ace9d53a1..e4892fc25 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantStructValue.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantStructValue.java @@ -31,7 +31,7 @@ public class ConstantStructValue implements ConstantValue { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - throw new ConstantNotLiteral("Cannot calculate literal struct."); + throw ConstantNotLiteral.EXCEPTION; } public SymbolTypeStruct getStructType() { diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantSymbolPointer.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantSymbolPointer.java index 3be8b7911..f5389ac9e 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantSymbolPointer.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantSymbolPointer.java @@ -60,12 +60,12 @@ public class ConstantSymbolPointer implements ConstantValue { int zp = ((Registers.RegisterZpMem) allocation).getZp(); return new ConstantInteger((long) zp, SymbolType.BYTE); } else if(allocation != null && Registers.RegisterType.MAIN_MEM.equals(allocation.getType())) { - throw new ConstantNotLiteral("Cannot calculate literal var pointer"); + throw ConstantNotLiteral.EXCEPTION; } } } // We cannot calculate a literal value - throw new ConstantNotLiteral("Cannot calculate literal var pointer"); + throw ConstantNotLiteral.EXCEPTION; } @Override diff --git a/src/main/java/dk/camelot64/kickc/model/values/StructZero.java b/src/main/java/dk/camelot64/kickc/model/values/StructZero.java index 0262e57aa..8d18da46d 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/StructZero.java +++ b/src/main/java/dk/camelot64/kickc/model/values/StructZero.java @@ -28,7 +28,7 @@ public class StructZero implements ConstantValue { @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { - throw new ConstantNotLiteral("Cannot calculate literal struct."); + throw ConstantNotLiteral.EXCEPTION; } @Override