X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fblock%2FLetStatement.java;h=302d0cf3416f4c92de753ccdb9966e3a19b59d8f;hb=fad328317fabf79304a44cbf59068025c650a549;hp=88dcc0ac9f3005c2588bd8abdfdab79560fa4ded;hpb=3448b94a8e90047c88eb62a0542c1596acb701b8;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/LetStatement.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/LetStatement.java old mode 100755 new mode 100644 index 88dcc0ac9..302d0cf34 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/LetStatement.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/LetStatement.java @@ -1,67 +1,67 @@ -package org.simantics.scl.compiler.elaboration.expressions.block; - -import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext; -import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; -import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; -import org.simantics.scl.compiler.elaboration.expressions.Case; -import org.simantics.scl.compiler.elaboration.expressions.EMatch; -import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet; -import org.simantics.scl.compiler.elaboration.expressions.EVariable; -import org.simantics.scl.compiler.elaboration.expressions.Expression; -import org.simantics.scl.compiler.errors.Locations; - -public class LetStatement extends Statement { - public Expression pattern; - public Expression value; - - public LetStatement(Expression pattern, Expression value) { - this.pattern = pattern; - this.value = value; - } - - @Override - public Expression toExpression(EnvironmentalContext context, boolean monadic, Expression in) { - if(pattern instanceof EVariable) - return new ESimpleLet(((EVariable)pattern).getVariable(), value, in); - else - //return new EPreLet(Arrays.asList(this), in); - return new EMatch(location, new Expression[] {value}, new Case[] {new Case(pattern, in)}); - } - - @Override - public void setLocationDeep(long loc) { - if(location == Locations.NO_LOCATION) { - location = loc; - pattern.setLocationDeep(loc); - value.setLocationDeep(loc); - } - } - - @Override - public void resolvePattern(TranslationContext context) { - pattern = pattern.resolveAsPattern(context); - } - - @Override - public boolean mayBeRecursive() { - return pattern.isFunctionDefinitionLhs(); - } - - @Override - public Statement replace(ReplaceContext context) { - return new LetStatement(pattern.replaceInPattern(context), value.replace(context)); - } - - @Override - public void accept(StatementVisitor visitor) { - visitor.visit(this); - } - - @Override - public StatementGroup getStatementGroup() { - if(pattern.isFunctionPattern()) - return StatementGroup.LetFunction; - else - return null; - } +package org.simantics.scl.compiler.elaboration.expressions.block; + +import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext; +import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; +import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; +import org.simantics.scl.compiler.elaboration.expressions.Case; +import org.simantics.scl.compiler.elaboration.expressions.EMatch; +import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet; +import org.simantics.scl.compiler.elaboration.expressions.EVariable; +import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.errors.Locations; + +public class LetStatement extends Statement { + public Expression pattern; + public Expression value; + + public LetStatement(Expression pattern, Expression value) { + this.pattern = pattern; + this.value = value; + } + + @Override + public Expression toExpression(EnvironmentalContext context, boolean monadic, Expression in) { + if(pattern instanceof EVariable) + return new ESimpleLet(((EVariable)pattern).getVariable(), value, in); + else + //return new EPreLet(Arrays.asList(this), in); + return new EMatch(location, new Expression[] {value}, new Case[] {new Case(pattern, in)}); + } + + @Override + public void setLocationDeep(long loc) { + if(location == Locations.NO_LOCATION) { + location = loc; + pattern.setLocationDeep(loc); + value.setLocationDeep(loc); + } + } + + @Override + public void resolvePattern(TranslationContext context) { + pattern = pattern.resolveAsPattern(context); + } + + @Override + public boolean mayBeRecursive() { + return pattern.isFunctionDefinitionLhs(); + } + + @Override + public Statement replace(ReplaceContext context) { + return new LetStatement(pattern.replaceInPattern(context), value.replace(context)); + } + + @Override + public void accept(StatementVisitor visitor) { + visitor.visit(this); + } + + @Override + public StatementGroup getStatementGroup() { + if(pattern.isFunctionPattern()) + return StatementGroup.LetFunction; + else + return null; + } } \ No newline at end of file