]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/BindStatement.java
(refs #7322) Implemented visitors for CHRStatement
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / block / BindStatement.java
1 package org.simantics.scl.compiler.elaboration.expressions.block;
2
3 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;
4 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
5 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
6 import org.simantics.scl.compiler.elaboration.expressions.EBind;
7 import org.simantics.scl.compiler.elaboration.expressions.Expression;
8 import org.simantics.scl.compiler.errors.Locations;
9
10 public class BindStatement extends Statement {
11     public Expression pattern;
12     public Expression value;
13     
14     public BindStatement(Expression pattern, Expression value) {
15         this.pattern = pattern;
16         this.value = value;
17     }
18
19     @Override
20     public Expression toExpression(EnvironmentalContext context, boolean monadic, Expression in) {
21         //if(!monadic)
22         //    context.getErrorLog().log(location, "Bind statements are allowed only in mdo-blocks.");
23         return new EBind(location, pattern, value, in);
24     }
25     
26     @Override
27     public void setLocationDeep(long loc) {
28         if(location == Locations.NO_LOCATION) {
29             location = loc;
30             pattern.setLocationDeep(loc);
31             value.setLocationDeep(loc);
32         }
33     }
34
35     @Override
36     public void resolvePattern(TranslationContext context) {
37         pattern = pattern.resolveAsPattern(context);
38     }
39     
40     @Override
41     public boolean mayBeRecursive() {
42         return false;
43     }
44     
45     @Override
46     public Statement replace(ReplaceContext context) {
47         return new BindStatement(pattern.replaceInPattern(context), value.replace(context));
48     }
49
50     @Override
51     public void accept(StatementVisitor visitor) {
52         visitor.visit(this);
53     }
54
55     @Override
56     public StatementGroup getStatementGroup() {
57         return null;
58     }
59 }