-package org.simantics.scl.compiler.environment;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-\r
-import org.simantics.scl.compiler.common.names.Name;\r
-import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
-import org.simantics.scl.compiler.elaboration.modules.TypeClass;\r
-import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance;\r
-import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;\r
-import org.simantics.scl.compiler.elaboration.relations.SCLEntityType;\r
-import org.simantics.scl.compiler.elaboration.relations.SCLRelation;\r
-import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;\r
-import org.simantics.scl.compiler.module.Module;\r
-import org.simantics.scl.compiler.types.TCon;\r
-\r
-public abstract class AbstractEnvironment implements Environment {\r
- protected abstract Module getModule(String name);\r
- protected abstract Collection<Module> getModules();\r
- \r
- @Override\r
- public SCLValue getValue(Name name) {\r
- Module module = getModule(name.module);\r
- if(module == null)\r
- return null;\r
- return module.getValue(name.name);\r
- }\r
-\r
- @Override\r
- public SCLRelation getRelation(Name name) {\r
- Module module = getModule(name.module);\r
- if(module == null)\r
- return null;\r
- return module.getRelation(name.name);\r
- }\r
-\r
- @Override\r
- public SCLEntityType getEntityType(Name name) {\r
- Module module = getModule(name.module);\r
- if(module == null)\r
- return null;\r
- return module.getEntityType(name.name);\r
- }\r
-\r
- @Override\r
- public TypeDescriptor getTypeDescriptor(TCon type) {\r
- Module module = getModule(type.module);\r
- if(module == null)\r
- return null;\r
- return module.getTypeDescriptor(type.name);\r
- }\r
-\r
- @Override\r
- public EffectConstructor getEffectConstructor(TCon type) {\r
- Module module = getModule(type.module);\r
- if(module == null)\r
- return null;\r
- return module.getEffectConstructor(type.name);\r
- }\r
-\r
- @Override\r
- public TypeClass getTypeClass(TCon type) {\r
- Module module = getModule(type.module);\r
- if(module == null)\r
- return null;\r
- return module.getTypeClass(type.name);\r
- }\r
-\r
- @Override\r
- public Collection<TypeClassInstance> getInstances(TCon typeClass) {\r
- Collection<TypeClassInstance> result = Collections.emptyList();\r
- int nonemptySubresults = 0;\r
- for(Module module : getModules()) {\r
- Collection<TypeClassInstance> instances = module.getInstances(typeClass);\r
- if(!instances.isEmpty()) {\r
- switch(nonemptySubresults) {\r
- case 0:\r
- result = instances;\r
- break;\r
- case 1: {\r
- ArrayList<TypeClassInstance> temp =\r
- new ArrayList<TypeClassInstance>(\r
- ((result.size() + instances.size())*3) / 2);\r
- temp.addAll(result);\r
- result = temp;\r
- }\r
- default:\r
- result.addAll(instances);\r
- }\r
- ++nonemptySubresults;\r
- }\r
- }\r
- return result;\r
- }\r
-}\r
+package org.simantics.scl.compiler.environment;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.simantics.scl.compiler.common.names.Name;
+import org.simantics.scl.compiler.elaboration.modules.SCLValue;
+import org.simantics.scl.compiler.elaboration.modules.TypeClass;
+import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance;
+import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;
+import org.simantics.scl.compiler.elaboration.relations.SCLEntityType;
+import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
+import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;
+import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.types.TCon;
+
+public abstract class AbstractEnvironment implements Environment {
+ protected abstract Module getModule(String name);
+ protected abstract Collection<Module> getModules();
+
+ @Override
+ public SCLValue getValue(Name name) {
+ Module module = getModule(name.module);
+ if(module == null)
+ return null;
+ return module.getValue(name.name);
+ }
+
+ @Override
+ public SCLRelation getRelation(Name name) {
+ Module module = getModule(name.module);
+ if(module == null)
+ return null;
+ return module.getRelation(name.name);
+ }
+
+ @Override
+ public SCLEntityType getEntityType(Name name) {
+ Module module = getModule(name.module);
+ if(module == null)
+ return null;
+ return module.getEntityType(name.name);
+ }
+
+ @Override
+ public TypeDescriptor getTypeDescriptor(TCon type) {
+ Module module = getModule(type.module);
+ if(module == null)
+ return null;
+ return module.getTypeDescriptor(type.name);
+ }
+
+ @Override
+ public EffectConstructor getEffectConstructor(TCon type) {
+ Module module = getModule(type.module);
+ if(module == null)
+ return null;
+ return module.getEffectConstructor(type.name);
+ }
+
+ @Override
+ public TypeClass getTypeClass(TCon type) {
+ Module module = getModule(type.module);
+ if(module == null)
+ return null;
+ return module.getTypeClass(type.name);
+ }
+
+ @Override
+ public Collection<TypeClassInstance> getInstances(TCon typeClass) {
+ Collection<TypeClassInstance> result = Collections.emptyList();
+ int nonemptySubresults = 0;
+ for(Module module : getModules()) {
+ Collection<TypeClassInstance> instances = module.getInstances(typeClass);
+ if(!instances.isEmpty()) {
+ switch(nonemptySubresults) {
+ case 0:
+ result = instances;
+ break;
+ case 1: {
+ ArrayList<TypeClassInstance> temp =
+ new ArrayList<TypeClassInstance>(
+ ((result.size() + instances.size())*3) / 2);
+ temp.addAll(result);
+ result = temp;
+ }
+ default:
+ result.addAll(instances);
+ }
+ ++nonemptySubresults;
+ }
+ }
+ return result;
+ }
+}