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