]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/statements/LetStatement.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/statements/LetStatement.java
new file mode 100644 (file)
index 0000000..d2dcf43
--- /dev/null
@@ -0,0 +1,38 @@
+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