diff --git a/src/analysis/typepal/Collector.rsc b/src/analysis/typepal/Collector.rsc index 6861ec8..dc7dda2 100644 --- a/src/analysis/typepal/Collector.rsc +++ b/src/analysis/typepal/Collector.rsc @@ -385,9 +385,9 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co void collector_useViaType(Tree container, Tree selector, set[IdRole] idRolesSel){ if(building){ name = normalizeName(""); - selectorLoc = getLogicalLoc(selector); - containerLoc = getLogicalLoc(container); - calculators += calc("useViaType `` in ", selectorLoc, [containerLoc], makeGetTypeInType(containerLoc, selector, idRolesSel, toLogicalLocs(currentScope))); + selectorLoc = getLoc(selector); + containerLoc = getLoc(container); + calculators += calc("useViaType `` in ", selectorLoc, [containerLoc], makeGetTypeInType(containerLoc, selector, idRolesSel, currentScope)); } else { throw TypePalUsage("Cannot call `useViaType` on Collector after `run`"); } diff --git a/src/analysis/typepal/Solver.rsc b/src/analysis/typepal/Solver.rsc index 4aefd41..e0c81ce 100644 --- a/src/analysis/typepal/Solver.rsc +++ b/src/analysis/typepal/Solver.rsc @@ -667,9 +667,13 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ } AType solver_getTypeInType(AType containerType, Tree selector, set[IdRole] idRolesSel, loc scope){ - selectorLoc = getLogicalLoc(getLoc(selector)); + if(!solver_isFullyInstantiated(containerType)){ + throw TypeUnavailable(); + } + selectorLoc = getLogicalLoc(selector); selectorOrgName = ""; selectorName = normalizeName(selectorOrgName); + scope = getLogicalLoc(scope); selectorUse = use(selectorName, selectorOrgName, selectorLoc, scope, idRolesSel); if(overloadedAType(rel[loc, IdRole, AType] overloads) := containerType){