]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/BindStatement.java
New type class MonadE and corresponding monad syntax with edo keyword
[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, BlockType blockType, Expression in) {
21         return new EBind(location, blockType, pattern, value, in);
22     }
23     
24     @Override
25     public void setLocationDeep(long loc) {
26         if(location == Locations.NO_LOCATION) {
27             location = loc;
28             pattern.setLocationDeep(loc);
29             value.setLocationDeep(loc);
30         }
31     }
32
33     @Override
34     public void resolvePattern(TranslationContext context) {
35         pattern = pattern.resolveAsPattern(context);
36     }
37     
38     @Override
39     public boolean mayBeRecursive() {
40         return false;
41     }
42     
43     @Override
44     public Statement replace(ReplaceContext context) {
45         return new BindStatement(pattern.replaceInPattern(context), value.replace(context));
46     }
47
48     @Override
49     public void accept(StatementVisitor visitor) {
50         visitor.visit(this);
51     }
52
53     @Override
54     public StatementGroup getStatementGroup() {
55         return null;
56     }
57 }