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;
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;
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(
}
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;
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;
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<tcon.constructors.length;++id) {