From 8ab350726ecd93d5c9419d342f742c405bf60fa2 Mon Sep 17 00:00:00 2001 From: paulklint Date: Thu, 5 Feb 2026 19:50:14 +0100 Subject: [PATCH 1/4] Convert locations in a closure to logical locations --- src/analysis/typepal/Collector.rsc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/analysis/typepal/Collector.rsc b/src/analysis/typepal/Collector.rsc index 36af9a5..83cceff 100644 --- a/src/analysis/typepal/Collector.rsc +++ b/src/analysis/typepal/Collector.rsc @@ -378,7 +378,9 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co AType(Solver) makeGetTypeInType(Tree container, Tree selector, set[IdRole] idRolesSel, loc scope){ return AType(Solver s) { - return s.getTypeInType(s.getType(container), selector, idRolesSel, scope); + container1 = getLogicalLoc(container); + scope1 = toLogicalLocs(scope); + return s.getTypeInType(s.getType(container1), selector, idRolesSel, scope1); }; } From cdf6880040cfd5a67f2acbeaa83b244d94308be7 Mon Sep 17 00:00:00 2001 From: paulklint Date: Thu, 5 Feb 2026 19:51:26 +0100 Subject: [PATCH 2/4] Filter usedef additions --- src/analysis/typepal/Solver.rsc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/analysis/typepal/Solver.rsc b/src/analysis/typepal/Solver.rsc index da101e3..8c0d93e 100644 --- a/src/analysis/typepal/Solver.rsc +++ b/src/analysis/typepal/Solver.rsc @@ -684,13 +684,15 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ } if(isEmpty(valid_overloads)){ solver_report(error(selector, "Cannot access field on overloaded type %t", containerType)); - } else if({} := valid_overloads){ - addUse({key}, selectorUse); + } else if({} := valid_overloads){ + if(idr in idRolesSel) addUse({key}, selectorUse); addFact(selectorLoc, tp); return tp; } else { + for( <- valid_overloads){ + if(idr in idRolesSel) addUse({key}, selectorUse); + } tp2 = overloadedAType(valid_overloads); - addUse(valid_overloads<0>, selectorUse); addFact(selectorLoc, tp2); return tp2; @@ -731,13 +733,16 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ else solver_report(error(selector, "No definition for type %t is available here", containerType)); } - } else if({} := valid_overloads){ - addUse({key}, selectorUse); + } else if({} := valid_overloads){ + if(idr in idRolesSel) addUse({key}, selectorUse); addFact(selectorLoc, tp); return tp; } else { + for( <- valid_overloads){ + if(idr in idRolesSel) addUse({key}, selectorUse); + } tp2 = overloadedAType(valid_overloads); - addUse(valid_overloads<0>, selectorUse); + // addUse(valid_overloads<0>, selectorUse); addFact(selectorLoc, tp2); return tp2; } From b572a6a258938d21039efb932c07e1706f0a9930 Mon Sep 17 00:00:00 2001 From: paulklint Date: Fri, 6 Feb 2026 10:25:14 +0100 Subject: [PATCH 3/4] Some polishing --- src/analysis/typepal/Collector.rsc | 11 +++++------ src/analysis/typepal/Solver.rsc | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/analysis/typepal/Collector.rsc b/src/analysis/typepal/Collector.rsc index 83cceff..6861ec8 100644 --- a/src/analysis/typepal/Collector.rsc +++ b/src/analysis/typepal/Collector.rsc @@ -376,19 +376,18 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co } } - AType(Solver) makeGetTypeInType(Tree container, Tree selector, set[IdRole] idRolesSel, loc scope){ + AType(Solver) makeGetTypeInType(loc containerLoc, Tree selector, set[IdRole] idRolesSel, loc scope){ return AType(Solver s) { - container1 = getLogicalLoc(container); - scope1 = toLogicalLocs(scope); - return s.getTypeInType(s.getType(container1), selector, idRolesSel, scope1); + return s.getTypeInType(s.getType(containerLoc), selector, idRolesSel, scope); }; } void collector_useViaType(Tree container, Tree selector, set[IdRole] idRolesSel){ if(building){ name = normalizeName(""); - sloc = getLoc(selector); - calculators += calc("useViaType `` in ", sloc, [getLoc(container)], makeGetTypeInType(container, selector, idRolesSel, currentScope)); + selectorLoc = getLogicalLoc(selector); + containerLoc = getLogicalLoc(container); + calculators += calc("useViaType `` in ", selectorLoc, [containerLoc], makeGetTypeInType(containerLoc, selector, idRolesSel, toLogicalLocs(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 8c0d93e..cd5fe47 100644 --- a/src/analysis/typepal/Solver.rsc +++ b/src/analysis/typepal/Solver.rsc @@ -668,7 +668,6 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ AType solver_getTypeInType(AType containerType, Tree selector, set[IdRole] idRolesSel, loc scope){ selectorLoc = getLogicalLoc(getLoc(selector)); - scope = getLogicalLoc(scope); selectorOrgName = ""; selectorName = normalizeName(selectorOrgName); From 887bc1055b3d121c06b9b9bf89575be0f56c320d Mon Sep 17 00:00:00 2001 From: paulklint Date: Fri, 6 Feb 2026 10:38:29 +0100 Subject: [PATCH 4/4] Removed commented line --- src/analysis/typepal/Solver.rsc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/analysis/typepal/Solver.rsc b/src/analysis/typepal/Solver.rsc index cd5fe47..4aefd41 100644 --- a/src/analysis/typepal/Solver.rsc +++ b/src/analysis/typepal/Solver.rsc @@ -741,7 +741,6 @@ Solver newSolver(map[str,Tree] namedTrees, TModel tm){ if(idr in idRolesSel) addUse({key}, selectorUse); } tp2 = overloadedAType(valid_overloads); - // addUse(valid_overloads<0>, selectorUse); addFact(selectorLoc, tp2); return tp2; }