From 0d19e40279f926508cbaa3253a87a08b64ab254d Mon Sep 17 00:00:00 2001 From: hansen <dominik_hansen@web.de> Date: Wed, 18 Jun 2014 15:59:12 +0200 Subject: [PATCH] Some modifications in the type checker --- .../java/de/tla2b/analysis/TypeChecker.java | 21 ++++++++++++++----- .../java/de/tla2b/types/TupleOrFunction.java | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/tla2b/analysis/TypeChecker.java b/src/main/java/de/tla2b/analysis/TypeChecker.java index 4549a4e..64358c1 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 2ef5303..07be646 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() { -- GitLab