]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/statements/LetStatement.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / statements / LetStatement.java
1 package org.simantics.scl.compiler.internal.codegen.ssa.statements;\r
2 \r
3 import org.simantics.scl.compiler.internal.codegen.references.BoundVar;\r
4 import org.simantics.scl.compiler.internal.codegen.ssa.SSAStatement;\r
5 import org.simantics.scl.compiler.internal.codegen.ssa.binders.BoundVarBinder;\r
6 import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;\r
7 import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;\r
8 \r
9 public abstract class LetStatement extends SSAStatement implements BoundVarBinder {\r
10     BoundVar target;\r
11 \r
12     public LetStatement(BoundVar target) {\r
13         setTarget(target);\r
14     }\r
15     \r
16     @Override\r
17     public void simplify(SSASimplificationContext context) {\r
18         if(target.hasNoOccurences()) {\r
19             remove();\r
20             context.markModified("dead-let-statement");\r
21         }                   \r
22     }\r
23     \r
24     public BoundVar getTarget() {\r
25         return target;\r
26     }\r
27     \r
28     public void setTarget(BoundVar target) {\r
29         this.target = target;\r
30         target.parent = this;\r
31     }\r
32     \r
33     @Override\r
34     public void addBoundVariablesTo(SSAValidationContext context) {\r
35         context.validBoundVariables.add(target);        \r
36     }\r
37 \r
38 }\r