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%2Ftypes%2FTForAll.java;h=b4b1af8196486fc14e2209983d425e8279d83edc;hp=a22a4b244853406f0ca83dbfaff4d72e5c6ef16e;hb=3448b94a8e90047c88eb62a0542c1596acb701b8;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/types/TForAll.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/types/TForAll.java index a22a4b244..b4b1af819 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/types/TForAll.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/types/TForAll.java @@ -1,12 +1,10 @@ package org.simantics.scl.compiler.types; -import gnu.trove.map.hash.THashMap; -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; - import java.util.ArrayList; +import java.util.Arrays; import org.simantics.scl.compiler.environment.Environment; +import org.simantics.scl.compiler.internal.types.HashCodeUtils; import org.simantics.scl.compiler.internal.types.TypeHashCodeContext; import org.simantics.scl.compiler.internal.types.ast.TForAllAst; import org.simantics.scl.compiler.internal.types.ast.TypeAst; @@ -16,10 +14,14 @@ import org.simantics.scl.compiler.types.kinds.Kinds; import org.simantics.scl.compiler.types.util.Polarity; import org.simantics.scl.compiler.types.util.TypeUnparsingContext; +import gnu.trove.map.hash.THashMap; +import gnu.trove.map.hash.TObjectIntHashMap; +import gnu.trove.set.hash.THashSet; + public class TForAll extends Type { public final TVar var; - public final Type type; + public Type type; TForAll(TVar var, Type type) { if(NULL_CHECKS) { @@ -150,4 +152,131 @@ public class TForAll extends Type { // Should never get here return new TMetaVar(Kinds.STAR); } + + @Override + public int hashCode(int hash) { + int count=1; + { + Type t = Types.canonical(type); + while(t instanceof TForAll) { + t = Types.canonical( ((TForAll)t).type ); + ++count; + } + } + TVar[] boundVars = new TVar[count]; + boundVars[0] = var; + TForAll t = this; + { + for(int i=1;i