]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVar.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / EVar.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVar.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVar.java
new file mode 100755 (executable)
index 0000000..5ad1e31
--- /dev/null
@@ -0,0 +1,82 @@
+package org.simantics.scl.compiler.elaboration.expressions;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
+import org.simantics.scl.compiler.elaboration.errors.NotPatternException;\r
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.FunctionDefinitionLhs;\r
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.LhsType;\r
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.PatternMatchingLhs;\r
+import org.simantics.scl.compiler.errors.Locations;\r
+\r
+public class EVar extends ASTExpression {\r
+    public final String name;\r
+\r
+    public EVar(long location, String name) {\r
+        this.location = location;\r
+        this.name = name;\r
+    }\r
+    \r
+    public EVar(String name) {\r
+        this(Locations.NO_LOCATION, name);\r
+    }\r
+   \r
+    @Override\r
+    public EVar getPatternHead() {\r
+        return this;\r
+    }\r
+    \r
+    @Override\r
+    public LhsType getLhsType() throws NotPatternException {\r
+        if(TranslationContext.isConstructorName(name))\r
+            return new PatternMatchingLhs();\r
+        else\r
+            return new FunctionDefinitionLhs(name);\r
+    }\r
+    \r
+    @Override\r
+    protected void collectVariableNames(PatternMatchingLhs lhsType)\r
+            throws NotPatternException {\r
+        if(!TranslationContext.isConstructorName(name))\r
+            lhsType.variableNames.add(name);\r
+    }\r
+\r
+    @Override\r
+    public Expression resolve(TranslationContext context) {\r
+        return context.resolveExpression(location, name);\r
+    }\r
+    \r
+    @Override\r
+    public void getParameters(TranslationContext translationContext,\r
+            ArrayList<Expression> parameters) {\r
+    }\r
+    \r
+    @Override\r
+    public Expression resolveAsPattern(TranslationContext context) {\r
+        return context.resolvePattern(this);\r
+    }\r
+    \r
+    @Override\r
+    public int getFunctionDefinitionArity() throws NotPatternException {\r
+        if(TranslationContext.isConstructorName(name))\r
+            throw new NotPatternException(this);\r
+        else\r
+            return 0;\r
+    }\r
+    \r
+    @Override\r
+    public boolean isConstructorApplication() {\r
+        return TranslationContext.isConstructorName(name);\r
+    }\r
+    \r
+    @Override\r
+    public void setLocationDeep(long loc) {\r
+        if(location == Locations.NO_LOCATION)\r
+            location = loc;\r
+    }\r
+    \r
+    @Override\r
+    public Expression accept(ExpressionTransformer transformer) {\r
+        return transformer.transform(this);\r
+    }\r
+}\r