--- /dev/null
+package org.simantics.scl.compiler.internal.codegen.ssa.statements;\r
+\r
+import org.simantics.scl.compiler.internal.codegen.references.BoundVar;\r
+import org.simantics.scl.compiler.internal.codegen.ssa.SSAStatement;\r
+import org.simantics.scl.compiler.internal.codegen.ssa.binders.BoundVarBinder;\r
+import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;\r
+import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;\r
+\r
+public abstract class LetStatement extends SSAStatement implements BoundVarBinder {\r
+ BoundVar target;\r
+\r
+ public LetStatement(BoundVar target) {\r
+ setTarget(target);\r
+ }\r
+ \r
+ @Override\r
+ public void simplify(SSASimplificationContext context) {\r
+ if(target.hasNoOccurences()) {\r
+ remove();\r
+ context.markModified("dead-let-statement");\r
+ } \r
+ }\r
+ \r
+ public BoundVar getTarget() {\r
+ return target;\r
+ }\r
+ \r
+ public void setTarget(BoundVar target) {\r
+ this.target = target;\r
+ target.parent = this;\r
+ }\r
+ \r
+ @Override\r
+ public void addBoundVariablesTo(SSAValidationContext context) {\r
+ context.validBoundVariables.add(target); \r
+ }\r
+\r
+}\r