-package org.simantics.scl.compiler.elaboration.modules;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.cojen.classfile.TypeDesc;\r
-import org.simantics.scl.compiler.constants.Constant;\r
-import org.simantics.scl.compiler.constants.JavaTypeClassSuper;\r
-import org.simantics.scl.compiler.elaboration.fundeps.Fundep;\r
-import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator;\r
-import org.simantics.scl.compiler.types.TCon;\r
-import org.simantics.scl.compiler.types.TPred;\r
-import org.simantics.scl.compiler.types.TVar;\r
-import org.simantics.scl.compiler.types.Type;\r
-import org.simantics.scl.compiler.types.Types;\r
-import org.simantics.scl.compiler.types.kinds.Kinds;\r
-\r
-public class TypeClass extends TypeConstructor {\r
- public final TPred[] context;\r
- public final TCon name;\r
- public final String javaName;\r
- public final TVar[] parameters;\r
- public final Fundep[] fundeps;\r
- public final TPred class_; \r
- public final ArrayList<String> methodNames = new ArrayList<String>(); \r
- public final THashMap<String, TypeClassMethod> methods = \r
- new THashMap<String, TypeClassMethod>();\r
- public final Constant[] superGenerators;\r
- public final TypeDesc typeDesc;\r
- long locatable;\r
- public String documentation;\r
- \r
- public TypeClass(long loc, TPred[] context, TCon name, String javaName, TVar[] parameters,\r
- Fundep[] fundeps) {\r
- super(Kinds.STAR);\r
- this.locatable = loc;\r
- this.context = context; \r
- this.name = name;\r
- this.javaName = javaName;\r
- this.parameters = parameters;\r
- this.fundeps = fundeps;\r
- //this.typeDesc = TypeDesc.forClass(new JavaNamingPolicy(name.module).getTypeClassInterfaceName(name));\r
- this.typeDesc = TypeDesc.forClass(javaName);\r
- this.class_ = Types.pred(name, parameters);\r
- this.superGenerators = new Constant[context.length];\r
- for(int i=0;i<context.length;++i)\r
- superGenerators[i] = new JavaTypeClassSuper(i, javaName, "super" + i, context[i], class_);\r
- }\r
-\r
- /*\r
- public void toString(final StringBuilder b) {\r
- final TypeUnparsingContext tuc = new TypeUnparsingContext();\r
- b.append("class (");\r
- for(int i=0;i<context.length;++i) {\r
- if(i>0)\r
- b.append(", ");\r
- context[i].toString(tuc);\r
- b.append(context[i]);\r
- }\r
- b.append(") => ");\r
- b.append(class_.toString(tuc));\r
- b.append(" where\n");\r
- methods.forEachValue(new TObjectProcedure<TypeClassMethod>() { \r
- @Override\r
- public boolean execute(TypeClassMethod method) {\r
- b.append(" ");\r
- b.append(method.name);\r
- b.append(" :: ");\r
- b.append(method.baseType.toString(tuc));\r
- b.append('\n');\r
- return true;\r
- }\r
- });\r
- }\r
- */\r
- \r
- @Override\r
- public TypeDesc construct(JavaTypeTranslator translator, Type[] parameters) {\r
- return typeDesc;\r
- }\r
-\r
- public void setDocumentation(String documentation) {\r
- this.documentation = documentation;\r
- }\r
-}\r
+package org.simantics.scl.compiler.elaboration.modules;
+
+import java.util.ArrayList;
+
+import org.cojen.classfile.TypeDesc;
+import org.simantics.scl.compiler.constants.Constant;
+import org.simantics.scl.compiler.constants.JavaTypeClassSuper;
+import org.simantics.scl.compiler.elaboration.fundeps.Fundep;
+import org.simantics.scl.compiler.internal.codegen.types.JavaTypeTranslator;
+import org.simantics.scl.compiler.types.TCon;
+import org.simantics.scl.compiler.types.TPred;
+import org.simantics.scl.compiler.types.TVar;
+import org.simantics.scl.compiler.types.Type;
+import org.simantics.scl.compiler.types.Types;
+import org.simantics.scl.compiler.types.kinds.Kinds;
+
+import gnu.trove.map.hash.THashMap;
+
+public class TypeClass extends TypeConstructor {
+ public final TPred[] context;
+ public final TCon name;
+ public final String javaName;
+ public final TVar[] parameters;
+ public final Fundep[] fundeps;
+ public final TPred class_;
+ public final ArrayList<String> methodNames = new ArrayList<String>();
+ public final THashMap<String, TypeClassMethod> methods =
+ new THashMap<String, TypeClassMethod>();
+ public final Constant[] superGenerators;
+ public final TypeDesc typeDesc;
+ long locatable;
+ public String documentation;
+
+ public TypeClass(long loc, TPred[] context, TCon name, String javaName, TVar[] parameters,
+ Fundep[] fundeps) {
+ super(Kinds.STAR);
+ this.locatable = loc;
+ this.context = context;
+ this.name = name;
+ this.javaName = javaName;
+ this.parameters = parameters;
+ this.fundeps = fundeps;
+ //this.typeDesc = TypeDesc.forClass(new JavaNamingPolicy(name.module).getTypeClassInterfaceName(name));
+ this.typeDesc = TypeDesc.forClass(javaName);
+ this.class_ = Types.pred(name, parameters);
+ this.superGenerators = new Constant[context.length];
+ for(int i=0;i<context.length;++i)
+ superGenerators[i] = new JavaTypeClassSuper(i, javaName, "super" + i, context[i], class_);
+ }
+
+ /*
+ public void toString(final StringBuilder b) {
+ final TypeUnparsingContext tuc = new TypeUnparsingContext();
+ b.append("class (");
+ for(int i=0;i<context.length;++i) {
+ if(i>0)
+ b.append(", ");
+ context[i].toString(tuc);
+ b.append(context[i]);
+ }
+ b.append(") => ");
+ b.append(class_.toString(tuc));
+ b.append(" where\n");
+ methods.forEachValue(new TObjectProcedure<TypeClassMethod>() {
+ @Override
+ public boolean execute(TypeClassMethod method) {
+ b.append(" ");
+ b.append(method.name);
+ b.append(" :: ");
+ b.append(method.baseType.toString(tuc));
+ b.append('\n');
+ return true;
+ }
+ });
+ }
+ */
+
+ @Override
+ public TypeDesc construct(JavaTypeTranslator translator, Type[] parameters) {
+ return typeDesc;
+ }
+
+ public void setDocumentation(String documentation) {
+ this.documentation = documentation;
+ }
+}