import org.simantics.scl.compiler.internal.parsing.declarations.DMappingRelationAst;
import org.simantics.scl.compiler.internal.parsing.declarations.DRelationAst;
import org.simantics.scl.compiler.internal.parsing.declarations.DRuleAst;
+import org.simantics.scl.compiler.internal.parsing.declarations.DRulesetAst;
import org.simantics.scl.compiler.internal.parsing.declarations.DTypeAst;
import org.simantics.scl.compiler.internal.parsing.declarations.DValueAst;
import org.simantics.scl.compiler.internal.parsing.declarations.DValueTypeAst;
import gnu.trove.map.hash.THashMap;
public class DeclarationClassification {
- ArrayList<ImportDeclaration> importsAst = new ArrayList<ImportDeclaration>();
- ArrayList<DDataAst> dataTypesAst = new ArrayList<DDataAst>();
- ArrayList<DTypeAst> typeAliasesAst = new ArrayList<DTypeAst>();
- ValueRepository valueDefinitionsAst = new ValueRepository();
- RelationRepository relationDefinitionsAst = new RelationRepository();
- ArrayList<DValueTypeAst> typeAnnotationsAst = new ArrayList<DValueTypeAst>();
- ArrayList<DFixityAst> fixityAst = new ArrayList<DFixityAst>();
- ArrayList<ProcessedDClassAst> typeClassesAst = new ArrayList<ProcessedDClassAst>();
- ArrayList<ProcessedDInstanceAst> instancesAst = new ArrayList<ProcessedDInstanceAst>();
- ArrayList<DDerivingInstanceAst> derivingInstancesAst = new ArrayList<DDerivingInstanceAst>();
- ArrayList<DEffectAst> effectsAst = new ArrayList<DEffectAst>();
- ArrayList<DRuleAst> rulesAst = new ArrayList<DRuleAst>();
- ArrayList<DMappingRelationAst> mappingRelationsAst = new ArrayList<DMappingRelationAst>();
+ public ArrayList<ImportDeclaration> importsAst = new ArrayList<ImportDeclaration>();
+ public ArrayList<DDataAst> dataTypesAst = new ArrayList<DDataAst>();
+ public ArrayList<DTypeAst> typeAliasesAst = new ArrayList<DTypeAst>();
+ public ValueRepository valueDefinitionsAst = new ValueRepository();
+ public RelationRepository relationDefinitionsAst = new RelationRepository();
+ public ArrayList<DValueTypeAst> typeAnnotationsAst = new ArrayList<DValueTypeAst>();
+ public ArrayList<DFixityAst> fixityAst = new ArrayList<DFixityAst>();
+ public ArrayList<ProcessedDClassAst> typeClassesAst = new ArrayList<ProcessedDClassAst>();
+ public ArrayList<ProcessedDInstanceAst> instancesAst = new ArrayList<ProcessedDInstanceAst>();
+ public ArrayList<DDerivingInstanceAst> derivingInstancesAst = new ArrayList<DDerivingInstanceAst>();
+ public ArrayList<DEffectAst> effectsAst = new ArrayList<DEffectAst>();
+ public ArrayList<DRuleAst> rulesAst = new ArrayList<DRuleAst>();
+ public ArrayList<DMappingRelationAst> mappingRelationsAst = new ArrayList<DMappingRelationAst>();
+ public ArrayList<DRulesetAst> rulesetsAst = new ArrayList<DRulesetAst>();
- THashMap<String, DDocumentationAst> valueDocumentation = new THashMap<String, DDocumentationAst>();
- THashMap<String, DDocumentationAst> relationDocumentation = new THashMap<String, DDocumentationAst>();
- THashMap<String, DDocumentationAst> typeDocumentation = new THashMap<String, DDocumentationAst>();
- THashMap<String, DDocumentationAst> classDocumentation = new THashMap<String, DDocumentationAst>();
+ public THashMap<String, DDocumentationAst> valueDocumentation = new THashMap<String, DDocumentationAst>();
+ public THashMap<String, DDocumentationAst> relationDocumentation = new THashMap<String, DDocumentationAst>();
+ public THashMap<String, DDocumentationAst> typeDocumentation = new THashMap<String, DDocumentationAst>();
+ public THashMap<String, DDocumentationAst> classDocumentation = new THashMap<String, DDocumentationAst>();
- ArrayList<JavaMethodDeclaration> javaMethodDeclarations = new ArrayList<JavaMethodDeclaration>();
+ public ArrayList<JavaMethodDeclaration> javaMethodDeclarations = new ArrayList<JavaMethodDeclaration>();
- StringBuilder moduleDocumentation = new StringBuilder();
+ public StringBuilder moduleDocumentation = new StringBuilder();
- ArrayList<DAnnotationAst> currentAnnotations = new ArrayList<DAnnotationAst>(2);
- DDocumentationAst documentation;
- String inJavaClass;
+ public ArrayList<DAnnotationAst> currentAnnotations = new ArrayList<DAnnotationAst>(2);
+ public DDocumentationAst documentation;
+ public String inJavaClass;
- ArrayList<DAnnotationAst> defaultAnnotations = new ArrayList<DAnnotationAst>();
+ public ArrayList<DAnnotationAst> defaultAnnotations = new ArrayList<DAnnotationAst>();
- ErrorLog errorLog;
+ public ErrorLog errorLog;
public DeclarationClassification(CompilationContext compilationContext) {
this.errorLog = compilationContext.errorLog;
handle((DMappingRelationAst)declaration);
else if(declaration instanceof DRelationAst)
handle((DRelationAst)declaration);
+ else if(declaration instanceof DRulesetAst)
+ handle((DRulesetAst)declaration);
else
throw new InternalCompilerError("Unknown declaration " + declaration.getClass().getSimpleName());
}
importsAst.add(declaration);
}
- public void handle(DImportJavaAst declaration) {
+ public void handle(DImportJavaAst declaration) {
if(!currentAnnotations.isEmpty()) {
for(DAnnotationAst annotation : currentAnnotations) {
String name = annotation.id.text;
errorLog.log(declaration.location, "Annotations not supported.");
currentAnnotations = new ArrayList<DAnnotationAst>(2);
}
+ if(declaration.name.name.equals("Eq") || declaration.name.name.equals("Hashable")) {
+ errorLog.logWarning(declaration.location, "Skipped instance definition for " + declaration.name + " for " + declaration.types[0]);
+ return;
+ }
instancesAst.add(new ProcessedDInstanceAst(
declaration,
valueDefs));
errorLog.log(declaration.location, "Annotations not supported.");
currentAnnotations = new ArrayList<DAnnotationAst>(2);
}
+ if(declaration.name.name.equals("Eq") || declaration.name.name.equals("Hashable")) {
+ errorLog.logWarning(declaration.location, "Skipped instance definition for " + declaration.name + " for " + declaration.types[0]);
+ return;
+ }
derivingInstancesAst.add(declaration);
}
}
}
+ public void handle(DRulesetAst declaration) {
+ if(documentation != null) {
+ declaration.documentation = documentation;
+ documentation = null;
+ }
+ rulesetsAst.add(declaration);
+ }
+
public void handle(DDocumentationAst declaration) {
if(documentation != null) {
errorLog.log(documentation.location, "Invalid documentation string. It precedes another documentation string.");
}
- documentation = declaration;
+ documentation = declaration;
}
public void handle(DAnnotationAst declaration) {