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.elaboration.java.Builtins; import org.simantics.scl.compiler.elaboration.java.ListConstructor; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.codegen.utils.Constants; import org.simantics.scl.compiler.internal.interpreted.IExpression; import org.simantics.scl.compiler.internal.interpreted.IListLiteral; import org.simantics.scl.compiler.top.ExpressionInterpretationContext; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.exceptions.MatchException; public class EListLiteral extends SimplifiableExpression { public Expression[] components; Type componentType; public EListLiteral(Expression[] components) { this.components = components; } private EListLiteral(Expression[] components, Type componentType) { this.components = components; this.componentType = componentType; } public Expression[] getComponents() { return components; } @Override public Expression simplify(SimplificationContext context) { context.pushLocation(location); try { for(int i=0;i 0) result = new EApply(location, result, components); return result; } else { Expression result = new EApplyType(new ELiteral(location, new ListConstructor(components.length)), componentType); result = new EApply(location, result, components); return result; } } finally { context.popLocation(); } } @Override public Expression resolve(TranslationContext context) { for(int i=0;i