mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-08 14:37:40 +00:00
Added more asserts
This commit is contained in:
parent
d7e0a638f2
commit
878059da13
@ -148,6 +148,10 @@ public class Compiler {
|
||||
List<Pass2SsaAssertion> assertions = new ArrayList<>();
|
||||
assertions.add(new Pass2AssertSymbols(program));
|
||||
assertions.add(new Pass2AssertBlocks(program));
|
||||
assertions.add(new Pass2AssertNoCallParameters(program));
|
||||
assertions.add(new Pass2AssertNoCallLvalues(program));
|
||||
assertions.add(new Pass2AssertNoProcs(program));
|
||||
assertions.add(new Pass2AssertNoLabels(program));
|
||||
for (Pass2SsaAssertion assertion : assertions) {
|
||||
assertion.check();
|
||||
}
|
||||
|
33
src/dk/camelot64/kickc/passes/Pass2AssertNoCallLvalues.java
Normal file
33
src/dk/camelot64/kickc/passes/Pass2AssertNoCallLvalues.java
Normal file
@ -0,0 +1,33 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.icl.ControlFlowGraphBaseVisitor;
|
||||
import dk.camelot64.kickc.icl.Program;
|
||||
import dk.camelot64.kickc.icl.RValue;
|
||||
import dk.camelot64.kickc.icl.StatementCall;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Asserts that the program does not contain calls with lValues */
|
||||
public class Pass2AssertNoCallLvalues extends Pass2SsaAssertion {
|
||||
|
||||
public Pass2AssertNoCallLvalues(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void check() throws AssertionFailed {
|
||||
|
||||
ControlFlowGraphBaseVisitor<Void> checkCalls = new ControlFlowGraphBaseVisitor<Void>() {
|
||||
|
||||
@Override
|
||||
public Void visitCall(StatementCall callLValue) {
|
||||
if(callLValue.getlValue()!=null) {
|
||||
throw new AssertionFailed("No call lValue allowed! "+callLValue);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
checkCalls.visitGraph(getGraph());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.icl.*;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
/** Asserts that the program does not contain calls with parameters */
|
||||
public class Pass2AssertNoCallParameters extends Pass2SsaAssertion {
|
||||
|
||||
public Pass2AssertNoCallParameters(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void check() throws AssertionFailed {
|
||||
|
||||
ControlFlowGraphBaseVisitor<Void> checkCalls = new ControlFlowGraphBaseVisitor<Void>() {
|
||||
|
||||
@Override
|
||||
public Void visitCall(StatementCall callLValue) {
|
||||
List<RValue> parameters = callLValue.getParameters();
|
||||
if(parameters!=null && parameters.size()>0) {
|
||||
throw new AssertionFailed("No call parameters allowed! "+callLValue);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
checkCalls.visitGraph(getGraph());
|
||||
}
|
||||
|
||||
}
|
25
src/dk/camelot64/kickc/passes/Pass2AssertNoLabels.java
Normal file
25
src/dk/camelot64/kickc/passes/Pass2AssertNoLabels.java
Normal file
@ -0,0 +1,25 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.icl.*;
|
||||
|
||||
/** Asserts that the graph contains no label statements */
|
||||
public class Pass2AssertNoLabels extends Pass2SsaAssertion {
|
||||
|
||||
public Pass2AssertNoLabels(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void check() throws AssertionFailed {
|
||||
|
||||
ControlFlowGraphBaseVisitor<Void> checkCalls = new ControlFlowGraphBaseVisitor<Void>() {
|
||||
|
||||
@Override
|
||||
public Void visitJumpTarget(StatementLabel jumpTarget) {
|
||||
throw new AssertionFailed("No label statements allowed! "+jumpTarget);
|
||||
}
|
||||
};
|
||||
checkCalls.visitGraph(getGraph());
|
||||
}
|
||||
|
||||
}
|
30
src/dk/camelot64/kickc/passes/Pass2AssertNoProcs.java
Normal file
30
src/dk/camelot64/kickc/passes/Pass2AssertNoProcs.java
Normal file
@ -0,0 +1,30 @@
|
||||
package dk.camelot64.kickc.passes;
|
||||
|
||||
import dk.camelot64.kickc.icl.*;
|
||||
|
||||
/** Asserts that the graph contains no proc/endproc statements */
|
||||
public class Pass2AssertNoProcs extends Pass2SsaAssertion {
|
||||
|
||||
public Pass2AssertNoProcs(Program program) {
|
||||
super(program);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void check() throws AssertionFailed {
|
||||
|
||||
ControlFlowGraphBaseVisitor<Void> checkCalls = new ControlFlowGraphBaseVisitor<Void>() {
|
||||
|
||||
@Override
|
||||
public Void visitProcedureBegin(StatementProcedureBegin statement) {
|
||||
throw new AssertionFailed("No proc statements allowed! "+statement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitProcedureEnd(StatementProcedureEnd statement) {
|
||||
throw new AssertionFailed("No proc statements allowed! "+statement);
|
||||
}
|
||||
};
|
||||
checkCalls.visitGraph(getGraph());
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user