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%2Fmodule%2FConcreteModule.java;h=31ef0dc5a0cb9863874d042858aec59d451adadd;hp=2f6d52bdba63298ad51c6de3e4f2c8fe3c5b6b89;hb=c07a8f3914123e9b75a11290994a8b78bd3f01f7;hpb=3448b94a8e90047c88eb62a0542c1596acb701b8 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java index 2f6d52bdb..31ef0dc5a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java @@ -9,8 +9,10 @@ import java.util.function.Consumer; import org.simantics.scl.compiler.common.names.Name; import org.simantics.scl.compiler.constants.Constant; +import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; import org.simantics.scl.compiler.elaboration.modules.Documentation; import org.simantics.scl.compiler.elaboration.modules.SCLValue; +import org.simantics.scl.compiler.elaboration.modules.TypeAlias; import org.simantics.scl.compiler.elaboration.modules.TypeClass; import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance; import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor; @@ -19,9 +21,14 @@ import org.simantics.scl.compiler.elaboration.relations.SCLRelation; import org.simantics.scl.compiler.elaboration.rules.MappingRelation; import org.simantics.scl.compiler.elaboration.rules.TransformationRule; import org.simantics.scl.compiler.environment.filter.NamespaceFilter; +import org.simantics.scl.compiler.errors.CompilationError; import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor; +import org.simantics.scl.compiler.module.debug.ModuleDebugInfo; import org.simantics.scl.compiler.top.ModuleInitializer; import org.simantics.scl.compiler.types.TCon; +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.runtime.profiling.BranchPoint; import gnu.trove.map.hash.THashMap; @@ -30,27 +37,44 @@ import gnu.trove.procedure.TObjectProcedure; public class ConcreteModule implements Module { String moduleName; + String defaultLocalName; + String deprecation; THashMap typeDescriptors = new THashMap(); THashMap effectConstructors = new THashMap(); THashMap typeClasses = new THashMap(); THashMap> typeClassInstances = new THashMap>(); THashMap values = new THashMap(); - THashMap relations = new THashMap(); - THashMap entityTypes = new THashMap(); - THashMap rules = new THashMap(); - THashMap mappingRelations = new THashMap(); + THashMap> fieldAccessors = new THashMap>(); + THashMap relations = new THashMap(2); + THashMap entityTypes = new THashMap(2); + THashMap rules = new THashMap(2); + THashMap mappingRelations = new THashMap(2); + THashMap rulesets = new THashMap(2); ArrayList dependencies = new ArrayList(); THashMap branchPoints; - + CompilationError[] warnings = CompilationError.EMPTY_ARRAY; + Map classes = Collections.emptyMap(); + ClassLoader parentClassLoader; ModuleInitializer moduleInitializer; protected Documentation documentation; + + public ModuleDebugInfo moduleDebugInfo; public ConcreteModule(String moduleName) { this.moduleName = moduleName; } + @Override + public String getDefaultLocalName() { + return defaultLocalName; + } + + public void setDefaultLocalName(String defaultLocalName) { + this.defaultLocalName = defaultLocalName; + } + public boolean addTypeDescriptor(String name, TypeDescriptor typeConstructor) { return typeDescriptors.put(name, typeConstructor) != null; } @@ -59,6 +83,10 @@ public class ConcreteModule implements Module { return effectConstructors.put(name, effectConstructor) != null; } + public void addTypeAlias(String name, TVar[] parameters, Type body) { + typeDescriptors.put(name, new TypeAlias(Types.con(moduleName, name), parameters, body)); + } + public boolean addTypeClass(String name, TypeClass typeClass) { return typeClasses.put(name, typeClass) != null; } @@ -93,6 +121,11 @@ public class ConcreteModule implements Module { addValue(value); return value; } + + @Override + public List getFieldAccessors(String name) { + return fieldAccessors.get(name); + } public void addRelation(String name, SCLRelation relation) { relations.put(name, relation); @@ -172,6 +205,11 @@ public class ConcreteModule implements Module { return effectConstructors.get(name); } + @Override + public CHRRuleset getRuleset(String name) { + return rulesets.get(name); + } + public Collection getTypeClasses() { return typeClasses.values(); } @@ -222,7 +260,7 @@ public class ConcreteModule implements Module { this.values.forEachEntry(new TObjectObjectProcedure() { @Override public boolean execute(String name, SCLValue value) { - if(value.isPrivate()) + if(value.isPrivateOrDerived()) return true; String lowerPrefix = prefix.toLowerCase(); String lowerName = name.toLowerCase(); @@ -242,6 +280,11 @@ public class ConcreteModule implements Module { consumer.accept(value); }); } + + @Override + public List getValueNames() { + return new ArrayList(values.keySet()); + } public Collection getRelations() { return relations.values(); @@ -267,6 +310,51 @@ public class ConcreteModule implements Module { @Override public void dispose() { - + } + + public void setWarnings(CompilationError[] warnings) { + this.warnings = warnings; + } + + public CompilationError[] getWarnings() { + return warnings; + } + + @Override + public ClassLoader getParentClassLoader() { + return parentClassLoader; + } + + public void setParentClassLoader(ClassLoader parentClassLoader) { + if(parentClassLoader == null) + throw new NullPointerException(); + this.parentClassLoader = parentClassLoader; + } + + public void addFieldAccessor(String name, Constant accessor) { + List list = fieldAccessors.get(name); + if(list == null) { + list = new ArrayList(2); + fieldAccessors.put(name, list); + } + list.add(accessor); + } + + public void addRuleset(String name, CHRRuleset ruleset) { + rulesets.put(name, ruleset); + } + + @Override + public String getDeprecation() { + return deprecation; + } + + public void setDeprecation(String deprecation) { + this.deprecation = deprecation; + } + + @Override + public ModuleDebugInfo getModuleDebugInfo() { + return moduleDebugInfo; } }