X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2FGuardedExpressionGroup.java;h=402d6fab3247758ba525f9de7c0147af21bd39e3;hp=48f72eeac0b1a3f743fb0a042eb5c78b32e54619;hb=91682baa9a8252390f09b80fd724f47e5957b234;hpb=9a175feb652b2b7bba7afa540831b9076be3c10e diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java old mode 100755 new mode 100644 index 48f72eeac..402d6fab3 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java @@ -1,181 +1,130 @@ -package org.simantics.scl.compiler.elaboration.expressions; - -import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; -import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; -import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; -import org.simantics.scl.compiler.elaboration.contexts.TypingContext; -import org.simantics.scl.compiler.environment.Environment; -import org.simantics.scl.compiler.errors.Locations; -import org.simantics.scl.compiler.internal.codegen.continuations.ICont; -import org.simantics.scl.compiler.internal.codegen.references.IVal; -import org.simantics.scl.compiler.internal.codegen.ssa.exits.Throw; -import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; -import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator; -import org.simantics.scl.compiler.types.Type; -import org.simantics.scl.compiler.types.Types; -import org.simantics.scl.compiler.types.exceptions.MatchException; - -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - -public class GuardedExpressionGroup extends Expression { - public GuardedExpression[] expressions; - - public GuardedExpressionGroup(GuardedExpression[] expressions) { - this.expressions = expressions; - } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - for(GuardedExpression expression : expressions) { - for(Expression guard : expression.guards) - guard.collectRefs(allRefs, refs); - expression.value.collectRefs(allRefs, refs); - } - } - - @Override - public void collectVars(TObjectIntHashMap allVars, - TIntHashSet vars) { - for(GuardedExpression expression : expressions) { - for(Expression guard : expression.guards) - guard.collectVars(allVars, vars); - expression.value.collectVars(allVars, vars); - } - } - - @Override - protected void updateType() throws MatchException { - setType(expressions[0].value.getType()); - } - - @Override - public IVal toVal(Environment env, CodeWriter w) { - CodeWriter success = w.createBlock(getType()); - IVal result = success.getParameters()[0]; - CodeWriter failure = w.createBlock(); - compile(env, w, success.getContinuation(), failure.getContinuation()); - w.continueAs(success); - failure.throw_(location, Throw.MatchingException, "Matching failure at: " + toString()); - return result; - //throw new InternalCompilerError("GuardedExpressionGroup should be handled in match compilation."); - } - - @Override - public void collectFreeVariables(THashSet vars) { - for(GuardedExpression expression : expressions) { - for(Expression guard : expression.guards) - guard.collectFreeVariables(vars); - expression.value.collectFreeVariables(vars); - } - } - - @Override - public Expression simplify(SimplificationContext context) { - for(GuardedExpression expression : expressions) { - for(int i=0;i effects) { - for(GuardedExpression ge : expressions) { - for(Expression guard : ge.guards) - guard.collectEffects(effects); - ge.value.collectEffects(effects); - } - } - - @Override - public void setLocationDeep(long loc) { - if(location == Locations.NO_LOCATION) { - location = loc; - for(GuardedExpression expression : expressions) - expression.setLocationDeep(loc); - } - } - - @Override - public void accept(ExpressionVisitor visitor) { - visitor.visit(this); - } - - @Override - public void forVariables(VariableProcedure procedure) { - for(GuardedExpression expression : expressions) - expression.forVariables(procedure); - } - - @Override - public Expression accept(ExpressionTransformer transformer) { - return transformer.transform(this); - } -} +package org.simantics.scl.compiler.elaboration.expressions; + +import org.simantics.scl.compiler.compilation.CompilationContext; +import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; +import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; +import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; +import org.simantics.scl.compiler.elaboration.contexts.TypingContext; +import org.simantics.scl.compiler.errors.Locations; +import org.simantics.scl.compiler.internal.codegen.continuations.ICont; +import org.simantics.scl.compiler.internal.codegen.references.IVal; +import org.simantics.scl.compiler.internal.codegen.ssa.exits.Throw; +import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; +import org.simantics.scl.compiler.types.Type; +import org.simantics.scl.compiler.types.Types; +import org.simantics.scl.compiler.types.exceptions.MatchException; + +public class GuardedExpressionGroup extends Expression { + public GuardedExpression[] expressions; + + public GuardedExpressionGroup(GuardedExpression[] expressions) { + this.expressions = expressions; + } + + @Override + protected void updateType() throws MatchException { + setType(expressions[0].value.getType()); + } + + @Override + public IVal toVal(CompilationContext context, CodeWriter w) { + CodeWriter success = w.createBlock(getType()); + IVal result = success.getParameters()[0]; + CodeWriter failure = w.createBlock(); + compile(context, w, success.getContinuation(), failure.getContinuation()); + w.continueAs(success); + failure.throw_(location, Throw.MatchingException, "Matching failure at: " + toString()); + return result; + //throw new InternalCompilerError("GuardedExpressionGroup should be handled in match compilation."); + } + + @Override + public Expression simplify(SimplificationContext context) { + for(GuardedExpression expression : expressions) { + for(int i=0;i