]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TApplyAst.java
(refs #7561) Allow extra parameters to the application of type alias
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / types / TApplyAst.java
index 3c77000757f67b96d56a2f4f6a5125888a4a8300..1aeba20713063dc70728bf443b907fdbb491b951 100644 (file)
@@ -49,15 +49,19 @@ public class TApplyAst extends TypeAst {
                 return Types.metaVar(Kinds.STAR);
             }
             if(alias != null) {
-                if(parameters.length != alias.getArity()) {
+                int arity = alias.getArity();
+                if(parameters.length < arity) {
                     context.getErrorLog().log(location, "Wrong number of parameters are given to the type alias. Expected " +
-                            alias.getArity() + " parameters, got " + parameters.length + " parameters.");
+                            arity + " parameters, got " + parameters.length + " parameters.");
                     return Types.metaVar(Kinds.metaVar());
                 }
-                Type[] parameterTypes = new Type[parameters.length];
-                for(int i=0;i<parameters.length;++i)
+                Type[] parameterTypes = new Type[arity];
+                for(int i=0;i<arity;++i)
                     parameterTypes[i] = parameters[i].toType(context, Kinds.metaVar());
-                return alias.body.replace(alias.parameters, parameterTypes);
+                Type result = alias.body.replace(alias.parameters, parameterTypes);
+                for(int i=arity;i<parameters.length;++i)
+                    result = Types.apply(result, parameters[i].toType(context, Kinds.metaVar()));
+                return result;
             }
         }