diff --git a/pom.xml b/pom.xml index 6242841..34588f3 100644 --- a/pom.xml +++ b/pom.xml @@ -183,7 +183,7 @@ org.rascalmpl rascal - 0.41.2 + 0.42.0-RC2 provided diff --git a/src/analysis/typepal/Collector.rsc b/src/analysis/typepal/Collector.rsc index dc7dda2..db8a7e7 100644 --- a/src/analysis/typepal/Collector.rsc +++ b/src/analysis/typepal/Collector.rsc @@ -376,9 +376,9 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co } } - AType(Solver) makeGetTypeInType(loc containerLoc, Tree selector, set[IdRole] idRolesSel, loc scope){ + AType(Solver) makeGetTypeInType(Tree container, Tree selector, set[IdRole] idRolesSel, loc scope){ return AType(Solver s) { - return s.getTypeInType(s.getType(containerLoc), selector, idRolesSel, scope); + return s.getTypeInType(container, selector, idRolesSel, scope); }; } @@ -387,7 +387,7 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co name = normalizeName(""); selectorLoc = getLoc(selector); containerLoc = getLoc(container); - calculators += calc("useViaType `` in ", selectorLoc, [containerLoc], makeGetTypeInType(containerLoc, selector, idRolesSel, currentScope)); + calculators += calc("useViaType `` in ", selectorLoc, [containerLoc], makeGetTypeInType(container, selector, idRolesSel, currentScope)); } else { throw TypePalUsage("Cannot call `useViaType` on Collector after `run`"); } diff --git a/src/analysis/typepal/ISolver.rsc b/src/analysis/typepal/ISolver.rsc index 40992af..3a593db 100644 --- a/src/analysis/typepal/ISolver.rsc +++ b/src/analysis/typepal/ISolver.rsc @@ -26,7 +26,7 @@ data Solver /* Types */ AType(value) getType, AType (Tree occ, loc scope, set[IdRole] idRoles) getTypeInScope, AType (str name, loc scope, set[IdRole] idRoles) getTypeInScopeFromName, - AType (AType containerType, Tree selector, set[IdRole] idRolesSel, loc scope) getTypeInType, + AType (Tree container, Tree selector, set[IdRole] idRolesSel, loc scope) getTypeInType, rel[str id, AType atype] (AType containerType, loc scope, set[IdRole] idRoles) getAllDefinedInType, /* Fact */ void (value, AType) fact, void (value, AType) specializedFact, diff --git a/src/analysis/typepal/Solver.rsc b/src/analysis/typepal/Solver.rsc index 2a89a08..dcbe5ee 100644 --- a/src/analysis/typepal/Solver.rsc +++ b/src/analysis/typepal/Solver.rsc @@ -666,7 +666,11 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ } } - AType solver_getTypeInType(AType containerType, Tree selector, set[IdRole] idRolesSel, loc scope){ + AType solver_getTypeInType(Tree container, Tree selector, set[IdRole] idRolesSel, loc scope){ + return getTypeInType(solver_getType(getLogicalLoc(container)), selector, idRolesSel, scope); + } + + AType getTypeInType(AType containerType, Tree selector, set[IdRole] idRolesSel, loc scope){ if(!solver_isFullyInstantiated(containerType)){ throw TypeUnavailable(); } @@ -680,7 +684,7 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ rel[loc, IdRole, AType] valid_overloads = {}; for( <- overloads){ try { - selectorType = solver_getTypeInType(tp, selector, idRolesSel, scope); + selectorType = getTypeInType(tp, selector, idRolesSel, scope); valid_overloads += ; } catch checkFailed(list[FailMessage] _): ; // do nothing and try next overload catch NoBinding(): ; // do nothing and try next overload @@ -1595,6 +1599,7 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ set[loc] cdeps = toSet(dependsOn(clc)); if(src notin facts && isEmpty(reportedLocations & cdeps)){ messages += error("Unresolved type" : "">", src); + println("*** Unresolved type calculator:"); iprintln(clc); reportedLocations += src; } } @@ -1688,7 +1693,7 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ /* Types */ solver_getType, solver_getTypeInScope, solver_getTypeInScopeFromName, - solver_getTypeInType, + solver_getTypeInType + getTypeInType, solver_getAllDefinedInType, /*Fact */ fact, solver_specializedFact,