X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fparsing%2Ftypes%2FTVarAst.java;h=cf5a7a862c45fa99a5cad9b5148a6ec586910585;hb=refs%2Fchanges%2F86%2F1386%2F2;hp=e95b3ad9a9a4cdf21aab2abafa835b6457d013ad;hpb=3448b94a8e90047c88eb62a0542c1596acb701b8;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TVarAst.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TVarAst.java index e95b3ad9a..cf5a7a862 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TVarAst.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TVarAst.java @@ -11,6 +11,8 @@ import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.kinds.Kind; import org.simantics.scl.compiler.types.kinds.Kinds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import gnu.trove.map.hash.TObjectIntHashMap; import gnu.trove.set.hash.TIntHashSet; @@ -20,7 +22,8 @@ import gnu.trove.set.hash.TIntHashSet; * This class represents an abstract syntax tree node for a type variable. * The only property of a type variable is its name. */ -public class TVarAst extends TypeAst { +public class TVarAst extends TypeAst { + private static final Logger LOGGER = LoggerFactory.getLogger(TVarAst.class); public final String name; public TVarAst(String name) { @@ -56,6 +59,8 @@ public class TVarAst extends TypeAst { } else if(Character.isLowerCase(c)) return context.resolveTypeVariable(location, name, expectedKind); + else if(c == '?') + return context.resolveExistential(location, name, expectedKind); else { TypeDescriptor tdesc; try { @@ -96,7 +101,7 @@ public class TVarAst extends TypeAst { if(name.charAt(i) != ',') { con = context.resolveTypeConstructor(name.substring(1, name.length()-1)); if(con == null) { - System.err.println("Didn't find type constructor " + name + "."); + LOGGER.warn("Didn't find type constructor " + name + "."); return Types.metaVar(Kinds.STAR); } break block; @@ -105,10 +110,12 @@ public class TVarAst extends TypeAst { } else if(Character.isLowerCase(c)) return context.resolveTypeVariable(name); + else if(c == '?') + return context.resolveExistential(name); else { con = context.resolveTypeConstructor(name); if(con == null) { - System.err.println("Didn't find type constructor " + name + "."); + LOGGER.warn("Didn't find type constructor " + name + "."); return Types.metaVar(Kinds.STAR); } } @@ -150,10 +157,12 @@ public class TVarAst extends TypeAst { char c = name.charAt(0); if(Character.isLowerCase(c)) return context.resolveTypeVariable(name); + else if(c == '?') + return context.resolveExistential(name); else { Type con = context.resolveTypeConstructor(name); if(con == null) { - System.err.println("Didn't find effect constructor " + name + "."); + LOGGER.warn("Didn't find effect constructor " + name + "."); return Types.metaVar(Kinds.EFFECT); } return con;