]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/OrdDeriver.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / deriving / OrdDeriver.java
index de9f08845fb2bc84e27e5b65adcf96347cb93d90..257462bac3af5d42c38e8e525e1bb743be9a54d7 100644 (file)
@@ -9,7 +9,9 @@ import org.simantics.scl.compiler.elaboration.expressions.EApply;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
 import org.simantics.scl.compiler.elaboration.expressions.EVar;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
+import org.simantics.scl.compiler.elaboration.modules.TypeAlias;
 import org.simantics.scl.compiler.elaboration.modules.TypeConstructor;
+import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;
 import org.simantics.scl.compiler.environment.AmbiguousNameException;
 import org.simantics.scl.compiler.environment.Environment;
 import org.simantics.scl.compiler.environment.Environments;
@@ -43,7 +45,7 @@ class OrdDeriver implements InstanceDeriver {
         }
         TCon con;
         try {
-            con = Environments.getTypeConstructorName(environment, headType.name);
+            con = Environments.getTypeDescriptorName(environment, headType.name);
         } catch (AmbiguousNameException e1) {
             errorLog.log(headType.location, e1.getMessage());
             return;
@@ -52,11 +54,16 @@ class OrdDeriver implements InstanceDeriver {
             errorLog.log(headType.location, "Couldn't resolve " + headType.name);
             return;
         }
-        TypeConstructor tcon = environment.getTypeConstructor(con);
-        if(tcon == null) {
+        TypeDescriptor tdesc = environment.getTypeDescriptor(con);
+        if(tdesc == null) {
             errorLog.log(headType.location, "Didn't find type constructor for " + headType.name);
             return;
         }
+        if(tdesc instanceof TypeAlias) {
+            errorLog.log(headType.location, "Cannot derive instance for a type alias.");
+            return;
+        }
+        TypeConstructor tcon = (TypeConstructor)tdesc;
         if(tcon.isOpen) {
             errorLog.log(headType.location, "Cannot derive instance for open data types.");
             return;