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,