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%2FEApply.java;h=14366a4c9a366ea4e84711e20a319a79ae1998d4;hp=fd5822743432a533e3ec9d5e482adfb2582733b1;hb=6dfe20b0f514b91337fcac4de0267ffd8268be07;hpb=ca40974f87c9db00eb77aaf1acc1e9937b37261b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java old mode 100755 new mode 100644 index fd5822743..14366a4c9 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java @@ -3,6 +3,8 @@ package org.simantics.scl.compiler.elaboration.expressions; import java.util.ArrayList; import org.simantics.scl.compiler.common.names.Name; +import org.simantics.scl.compiler.common.names.Names; +import org.simantics.scl.compiler.compilation.CompilationContext; import org.simantics.scl.compiler.constants.NoRepConstant; import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; @@ -14,11 +16,9 @@ import org.simantics.scl.compiler.elaboration.expressions.lhstype.PatternMatchin import org.simantics.scl.compiler.elaboration.java.ListConstructor; import org.simantics.scl.compiler.elaboration.macros.MacroRule; import org.simantics.scl.compiler.elaboration.modules.SCLValue; -import org.simantics.scl.compiler.environment.Environment; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.codegen.references.IVal; import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter; -import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator; import org.simantics.scl.compiler.internal.interpreted.IApply; import org.simantics.scl.compiler.internal.interpreted.IExpression; import org.simantics.scl.compiler.internal.interpreted.IListLiteral; @@ -33,13 +33,12 @@ import org.simantics.scl.compiler.types.kinds.Kinds; import org.simantics.scl.compiler.types.util.MultiFunction; import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; import gnu.trove.set.hash.TIntHashSet; public class EApply extends Expression { public Expression function; public Expression[] parameters; - Type effect = Types.NO_EFFECTS; + public Type effect = Types.NO_EFFECTS; public EApply(Expression function, Expression ... parameters) { this.function = function; @@ -76,13 +75,6 @@ public class EApply extends Expression { return parameters; } - - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - function.collectRefs(allRefs, refs); - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - } - public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { function.collectVars(allVars, vars); for(Expression parameter : parameters) @@ -100,22 +92,15 @@ public class EApply extends Expression { } @Override - public IVal toVal(Environment env, CodeWriter w) { - IVal functionVal = function.toVal(env, w); + public IVal toVal(CompilationContext context, CodeWriter w) { + IVal functionVal = function.toVal(context, w); IVal[] parameterVals = new IVal[parameters.length]; for(int i=0;i vars) { - function.collectFreeVariables(vars); - for(Expression parameter : parameters) - parameter.collectFreeVariables(vars); - } private void combineApplications() { if(function instanceof EApply) { @@ -193,13 +178,6 @@ public class EApply extends Expression { for(Expression parameter : this.parameters) parameters.add(parameter); } - - @Override - public void removeFreeVariables(THashSet vars) { - function.removeFreeVariables(vars); - for(Expression parameter : parameters) - parameter.removeFreeVariables(vars); - } @Override public Expression replace(ReplaceContext context) { @@ -287,27 +265,21 @@ public class EApply extends Expression { @Override public Expression inferType(TypingContext context) { + if(parameters.length == 2 && function instanceof EConstant && ((EConstant)function).value.getName() == Names.Prelude_dollar) + return new EApply(location, parameters[0], parameters[1]).inferType(context); inferType(context, false); return this; } @Override public Expression checkIgnoredType(TypingContext context) { + if(parameters.length == 2 && function instanceof EConstant && ((EConstant)function).value.getName() == Names.Prelude_dollar) + return new EApply(location, parameters[0], parameters[1]).inferType(context); inferType(context, true); if(Types.canonical(getType()) != Types.UNIT) return new ESimpleLet(location, null, this, new ELiteral(NoRepConstant.PUNIT)); return this; } - - @Override - public Expression decorate(ExpressionDecorator decorator) { - if(decorator.decorateSubstructure(this)) { - function = function.decorate(decorator); - for(int i=0;i effects) { - effects.add(effect); - function.collectEffects(effects); - for(Expression parameter : parameters) - parameter.collectEffects(effects); - } - @Override public void accept(ExpressionVisitor visitor) { visitor.visit(this); @@ -375,13 +339,6 @@ public class EApply extends Expression { return false; } } - - @Override - public void forVariables(VariableProcedure procedure) { - function.forVariables(procedure); - for(Expression parameter : parameters) - parameter.forVariables(procedure); - } @Override public boolean isPattern(int arity) {