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%2Finternal%2Fderiving%2FIODeriver.java;h=9eaff6a68919f8aa4a7cb9af4bc507e64aa96274;hp=1726d7d02127792da3842bf8ce8541b8b05bf5f4;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/IODeriver.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/IODeriver.java index 1726d7d02..9eaff6a68 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/IODeriver.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/IODeriver.java @@ -3,7 +3,7 @@ package org.simantics.scl.compiler.internal.deriving; import java.util.ArrayList; import org.simantics.scl.compiler.common.datatypes.Constructor; -import org.simantics.scl.compiler.common.names.Name; +import org.simantics.scl.compiler.common.names.Names; import org.simantics.scl.compiler.constants.ByteConstant; import org.simantics.scl.compiler.constants.IntegerConstant; import org.simantics.scl.compiler.elaboration.errors.NotPatternException; @@ -18,7 +18,9 @@ import org.simantics.scl.compiler.elaboration.expressions.EVar; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.block.LetStatement; import org.simantics.scl.compiler.elaboration.modules.SCLValue; +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; @@ -33,10 +35,6 @@ import org.simantics.scl.compiler.internal.parsing.types.TVarAst; import org.simantics.scl.compiler.types.TCon; class IODeriver implements InstanceDeriver { - - private static final Name WRITE = Name.create("Serialization", "write"); - private static final Name READ = Name.create("Serialization", "read"); - private static final Name IO_SIZE = Name.create("Serialization", "ioSize"); @Override public void derive( @@ -56,7 +54,7 @@ class IODeriver 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; @@ -65,11 +63,16 @@ class IODeriver 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; @@ -78,9 +81,9 @@ class IODeriver implements InstanceDeriver { DInstanceAst instanceAst = new DInstanceAst(der.location, der.context, der.name, der.types); ValueRepository valueDefs = new ValueRepository(); - SCLValue write = environment.getValue(WRITE); - SCLValue read = environment.getValue(READ); - SCLValue ioSize = environment.getValue(IO_SIZE); + SCLValue write = environment.getValue(Names.Serialization_write); + SCLValue read = environment.getValue(Names.Serialization_read); + SCLValue ioSize = environment.getValue(Names.Serialization_ioSize); // Generate write for(int id=0;id