X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fenvironment%2FAbstractEnvironment.java;h=a0d20b56802804323a3e5c12412694236c058724;hb=84b211a0aa05c956d33e038a1106bb0464ce373a;hp=d6929232a99f1563d6f97d2b6982e27e453580da;hpb=a8758de5bc19e5adb3f618d3038743a164f09912;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/AbstractEnvironment.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/AbstractEnvironment.java index d6929232a..a0d20b568 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/AbstractEnvironment.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/AbstractEnvironment.java @@ -1,96 +1,96 @@ -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 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 getInstances(TCon typeClass) { - Collection result = Collections.emptyList(); - int nonemptySubresults = 0; - for(Module module : getModules()) { - Collection instances = module.getInstances(typeClass); - if(!instances.isEmpty()) { - switch(nonemptySubresults) { - case 0: - result = instances; - break; - case 1: { - ArrayList temp = - new ArrayList( - ((result.size() + instances.size())*3) / 2); - temp.addAll(result); - result = temp; - } - default: - result.addAll(instances); - } - ++nonemptySubresults; - } - } - return result; - } -} +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 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 getInstances(TCon typeClass) { + Collection result = Collections.emptyList(); + int nonemptySubresults = 0; + for(Module module : getModules()) { + Collection instances = module.getInstances(typeClass); + if(!instances.isEmpty()) { + switch(nonemptySubresults) { + case 0: + result = instances; + break; + case 1: { + ArrayList temp = + new ArrayList( + ((result.size() + instances.size())*3) / 2); + temp.addAll(result); + result = temp; + } + default: + result.addAll(instances); + } + ++nonemptySubresults; + } + } + return result; + } +}