diff --git a/src/main/java/de/tla2b/analysis/TypeChecker.java b/src/main/java/de/tla2b/analysis/TypeChecker.java index 4549a4e0e7e1cfe08b7567effbcaee5ec292283a..64358c17e6927110c1b8770b6a9ef90535918ab5 100644 --- a/src/main/java/de/tla2b/analysis/TypeChecker.java +++ b/src/main/java/de/tla2b/analysis/TypeChecker.java @@ -324,12 +324,14 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, TLAType type = (TLAType) rightside.getToolObject(TYPE_ID); try { TLAType res = type.unify(expected); + setType(exprNode, res); return res; } catch (UnificationException e) { throw new TypeErrorException(String.format( "Expected %s, found %s at '@',%n%s ", expected, type, exprNode.getLocation())); } + } @@ -356,6 +358,14 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, } + private void setType(SemanticNode node, TLAType type){ + node.setToolObject(TYPE_ID, type); + if (type instanceof AbstractHasFollowers){ + ((AbstractHasFollowers) type).addFollower(node); + } + } + + /** * @param n * @param expected @@ -852,15 +862,14 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, TupleOrFunction tupleOrFunc = new TupleOrFunction( num.val(), u); - TLAType funcOrTuple = visitExprOrOpArgNode(n.getArgs()[0], + TLAType res = visitExprOrOpArgNode(n.getArgs()[0], tupleOrFunc); - n.getArgs()[0].setToolObject(TYPE_ID, funcOrTuple); + n.getArgs()[0].setToolObject(TYPE_ID, res); tupleNodeList.add(n.getArgs()[0]); - if (funcOrTuple instanceof AbstractHasFollowers) { - ((AbstractHasFollowers) funcOrTuple).addFollower(n + if (res instanceof AbstractHasFollowers) { + ((AbstractHasFollowers) res).addFollower(n .getArgs()[0]); } - TLAType found = (TLAType) n.getToolObject(TYPE_ID); try { found = found.unify(expected); @@ -1196,6 +1205,8 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, return domType; } + + /** * @param n * @param expected diff --git a/src/main/java/de/tla2b/types/TupleOrFunction.java b/src/main/java/de/tla2b/types/TupleOrFunction.java index 2ef5303bbf975385c421ba08ae3bb88481366ad4..07be646bf51a3796a44305c7582cf2ab6de2eaf2 100644 --- a/src/main/java/de/tla2b/types/TupleOrFunction.java +++ b/src/main/java/de/tla2b/types/TupleOrFunction.java @@ -320,6 +320,7 @@ public class TupleOrFunction extends AbstractHasFollowers { } } + update(); } public TLAType getFinalType() {