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%2Flist%2FListSeq.java;h=5d633d8d01aaf5b47326600c94f24c66a612b72f;hb=refs%2Fchanges%2F50%2F750%2F1;hp=84fa63e9ce848284cdd656ab182bf552e31ea2a4;hpb=3303fe4a3b363e88662ac75a4f7e873ddb3ab352;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java old mode 100755 new mode 100644 index 84fa63e9c..5d633d8d0 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java @@ -1,115 +1,101 @@ -package org.simantics.scl.compiler.elaboration.expressions.list; - -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.elaboration.expressions.Expression; -import org.simantics.scl.compiler.elaboration.expressions.Variable; -import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure; -import org.simantics.scl.compiler.errors.Locations; -import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator; -import org.simantics.scl.compiler.types.Type; - -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - -public class ListSeq extends ListQualifier { - public ListQualifier a; - public ListQualifier b; - - public ListSeq(ListQualifier a, ListQualifier b) { - this.a = a; - this.b = b; - } - - @Override - public void checkType(TypingContext context) { - a.checkType(context); - b.checkType(context); - } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - a.collectRefs(allRefs, refs); - b.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap allVars, - TIntHashSet vars) { - a.collectVars(allVars, vars); - b.collectVars(allVars, vars); - } - - @Override - public void collectFreeVariables(THashSet vars) { - b.collectFreeVariables(vars); - a.collectFreeVariables(vars); - } - - @Override - public CompiledQualifier compile(SimplificationContext context) { - CompiledQualifier cA = a.compile(context); - CompiledQualifier cB = b.compile(context); - - Variable x = new Variable("xTemp", cA.pattern.getType()); - Variable y = new Variable("yTemp", cB.pattern.getType()); - - Expression value = context.concatMap( - context.lambda(context.var(x), context.mapList( - context.lambda(context.var(y), context.tuple(context.var(x), context.var(y))), - context.match(context.var(x), cA.pattern, cB.value))), - cA.value); - /*try { - value.validateType(context.getEnvironment()); - } catch (TypeValidationException e) { - e.printStackTrace(); - }*/ - return new CompiledQualifier(value, context.tuple(cA.pattern, cB.pattern)); - } - - @Override - public void resolve(TranslationContext context) { - a.resolve(context); - b.resolve(context); - } - - @Override - public void decorate(ExpressionDecorator decorator) { - a.decorate(decorator); - b.decorate(decorator); - } - - @Override - public void collectEffects(THashSet effects) { - a.collectEffects(effects); - b.collectEffects(effects); - } - - @Override - public void setLocationDeep(long loc) { - if(location == Locations.NO_LOCATION) { - location = loc; - a.setLocationDeep(loc); - b.setLocationDeep(loc); - } - } - - @Override - public void accept(ListQualifierVisitor visitor) { - visitor.visit(this); - } - - @Override - public void forVariables(VariableProcedure procedure) { - a.forVariables(procedure); - b.forVariables(procedure); - } - - @Override - public ListQualifier accept(ListQualifierTransformer transformer) { - return transformer.transform(this); - } -} +package org.simantics.scl.compiler.elaboration.expressions.list; + +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.elaboration.expressions.Expression; +import org.simantics.scl.compiler.elaboration.expressions.Variable; +import org.simantics.scl.compiler.errors.Locations; +import org.simantics.scl.compiler.types.Type; + +import gnu.trove.map.hash.TObjectIntHashMap; +import gnu.trove.set.hash.THashSet; +import gnu.trove.set.hash.TIntHashSet; + +public class ListSeq extends ListQualifier { + public ListQualifier a; + public ListQualifier b; + + public ListSeq(ListQualifier a, ListQualifier b) { + this.a = a; + this.b = b; + } + + @Override + public void checkType(TypingContext context) { + a.checkType(context); + b.checkType(context); + } + + @Override + public void collectRefs(TObjectIntHashMap allRefs, + TIntHashSet refs) { + a.collectRefs(allRefs, refs); + b.collectRefs(allRefs, refs); + } + + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + a.collectVars(allVars, vars); + b.collectVars(allVars, vars); + } + + @Override + public void collectFreeVariables(THashSet vars) { + b.collectFreeVariables(vars); + a.collectFreeVariables(vars); + } + + @Override + public CompiledQualifier compile(SimplificationContext context) { + CompiledQualifier cA = a.compile(context); + CompiledQualifier cB = b.compile(context); + + Variable x = new Variable("xTemp", cA.pattern.getType()); + Variable y = new Variable("yTemp", cB.pattern.getType()); + + Expression value = context.concatMap( + context.lambda(context.var(x), context.mapList( + context.lambda(context.var(y), context.tuple(context.var(x), context.var(y))), + context.match(context.var(x), cA.pattern, cB.value))), + cA.value); + /*try { + value.validateType(context.getEnvironment()); + } catch (TypeValidationException e) { + e.printStackTrace(); + }*/ + return new CompiledQualifier(value, context.tuple(cA.pattern, cB.pattern)); + } + + @Override + public void resolve(TranslationContext context) { + a.resolve(context); + b.resolve(context); + } + + @Override + public void collectEffects(THashSet effects) { + a.collectEffects(effects); + b.collectEffects(effects); + } + + @Override + public void setLocationDeep(long loc) { + if(location == Locations.NO_LOCATION) { + location = loc; + a.setLocationDeep(loc); + b.setLocationDeep(loc); + } + } + + @Override + public void accept(ListQualifierVisitor visitor) { + visitor.visit(this); + } + + @Override + public ListQualifier accept(ListQualifierTransformer transformer) { + return transformer.transform(this); + } +}