-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
+package org.simantics.scl.compiler.elaboration.expressions;
+
+import java.util.ArrayList;
+
+import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
+import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
+import org.simantics.scl.compiler.elaboration.errors.NotPatternException;
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.FunctionDefinitionLhs;
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.LhsType;
+import org.simantics.scl.compiler.elaboration.expressions.lhstype.PatternMatchingLhs;
+import org.simantics.scl.compiler.errors.Locations;
+
+public class EVar extends ASTExpression {
+ public final String name;
+
+ public EVar(long location, String name) {
+ this.location = location;
+ this.name = name;
+ }
+
+ public EVar(String name) {
+ this(Locations.NO_LOCATION, name);
+ }
+
+ @Override
+ public EVar getPatternHead() {
+ return this;
+ }
+
+ @Override
+ public LhsType getLhsType() throws NotPatternException {
+ if(TranslationContext.isConstructorName(name))
+ return new PatternMatchingLhs();
+ else
+ return new FunctionDefinitionLhs(name);
+ }
+
+ @Override
+ protected void collectVariableNames(PatternMatchingLhs lhsType)
+ throws NotPatternException {
+ if(!TranslationContext.isConstructorName(name))
+ lhsType.variableNames.add(name);
+ }
+
+ @Override
+ public Expression resolve(TranslationContext context) {
+ return context.resolveVariable(location, name);
+ }
+
+ @Override
+ public void getParameters(TranslationContext translationContext,
+ ArrayList<Expression> parameters) {
+ }
+
+ @Override
+ public Expression resolveAsPattern(TranslationContext context) {
+ return context.resolvePattern(this);
+ }
+
+ @Override
+ public int getFunctionDefinitionPatternArity() throws NotPatternException {
+ if(TranslationContext.isConstructorName(name))
+ throw new NotPatternException(this);
+ else
+ return 0;
+ }
+
+ @Override
+ public boolean isConstructorApplication() {
+ return TranslationContext.isConstructorName(name);
+ }
+
+ @Override
+ public void setLocationDeep(long loc) {
+ if(location == Locations.NO_LOCATION)
+ location = loc;
+ }
+
+ @Override
+ public Expression accept(ExpressionTransformer transformer) {
+ return transformer.transform(this);
+ }
+
+ @Override
+ public void accept(ExpressionVisitor visitor) {
+ visitor.visit(this);
+ }
+}