Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 6f281fc

Browse files
committed
Make use of getModuleLocation and getModuleName more robust
1 parent 3db7d2c commit 6f281fc

File tree

3 files changed

+39
-14
lines changed

3 files changed

+39
-14
lines changed

src/org/rascalmpl/core/library/lang/rascalcore/check/Checker.rsc

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,17 @@ tuple[TModel, ModuleStatus] rascalTModelComponent(set[str] moduleNames, ModuleSt
394394
for(str nm <- moduleNames){
395395
//ms.status[nm] = {};
396396
ms.messages[nm] = {};
397-
mloc = getModuleLocation(nm, pcfg);
397+
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
398+
try {
399+
mloc = getModuleLocation(nm, pcfg);
400+
} catch e: {
401+
err = error("Cannot get location for <nm>: <e>", mloc);
402+
ms.messages[nm] = { err };
403+
ms.status[nm] += { rsc_not_found() };
404+
tm = tmodel(modelName=nm, messages=[ err ]);
405+
ms = addTModel(nm, tm, ms);
406+
return <tm, ms>;
407+
}
398408
if(mloc.extension != "rsc" || isModuleLocationInLibs(nm, mloc, pcfg)){
399409
continue;
400410
}
@@ -470,8 +480,9 @@ ModuleStatus rascalTModelForNames(list[str] moduleNames,
470480
mlocs += [ getModuleLocation(moduleName, pcfg) ];
471481
} catch value e: {
472482
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
483+
err = error("Cannot get location for <moduleName>: <e>", mloc);
473484
ms = newModuleStatus(compilerConfig);
474-
ms.messages[moduleName] = { error("<e>", mloc) };
485+
ms.messages[moduleName] = { err };
475486
return ms;
476487
}
477488
}

src/org/rascalmpl/core/library/lang/rascalcore/check/CheckerCommon.rsc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,17 @@ datetime getLastModified(str qualifiedModuleName, map[str, datetime] moduleLastM
130130
}
131131

132132
bool tplOutdated(str qualifiedModuleName, PathConfig pcfg){
133-
mloc = getModuleLocation(qualifiedModuleName, pcfg);
134-
<found, tpl> = getTPLReadLoc(qualifiedModuleName, pcfg);
135-
lmMloc = lastModified(mloc);
136-
lmTpl = lastModified(tpl);
137-
res = !found || lmMloc > lmTpl;
138-
//println("tplOutdated <qualifiedModuleName>: <res>; mloc: <lmMloc> \> tpl: <lmTpl>: <lmMloc > lmTpl>, (<mloc>, <tpl>)");
139-
return res;
133+
try {
134+
mloc = getModuleLocation(qualifiedModuleName, pcfg);
135+
<found, tpl> = getTPLReadLoc(qualifiedModuleName, pcfg);
136+
lmMloc = lastModified(mloc);
137+
lmTpl = lastModified(tpl);
138+
res = !found || lmMloc > lmTpl;
139+
//println("tplOutdated <qualifiedModuleName>: <res>; mloc: <lmMloc> \> tpl: <lmTpl>: <lmMloc > lmTpl>, (<mloc>, <tpl>)");
140+
return res;
141+
} catch e: {
142+
return false;
143+
}
140144
}
141145

142146
int parseTreeCacheSize = 20;
@@ -166,7 +170,7 @@ tuple[bool, Module, ModuleStatus] getModuleParseTree(str qualifiedModuleName, Mo
166170
throw "No src or library module";
167171
}
168172
} catch _: {
169-
//ms.messages[qualifiedModuleName] ? [] = [error("Module <qualifiedModuleName> not found", mloc)];
173+
ms.messages[qualifiedModuleName] ? {} += {error("Module <qualifiedModuleName> not found", mloc)};
170174
mpt = [Module] "module <qualifiedModuleName>";
171175
//ms.parseTrees[qualifiedModuleName] = mpt;
172176
ms.moduleLocs[qualifiedModuleName] = mloc;

src/org/rascalmpl/core/library/lang/rascalcore/check/Import.rsc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import util::Reflective;
2929
import util::Benchmark;
3030
import lang::rascalcore::compile::util::Names; // TODO: refactor, this is an undesired dependency on compile
3131

32-
str getModuleName(loc mloc, map[loc,str] moduleStrs, PathConfig pcfg){
32+
private str getModuleName(loc mloc, map[loc,str] moduleStrs, PathConfig pcfg){
3333
if(moduleStrs[mloc]? ){
3434
return moduleStrs[mloc];
3535
}
@@ -138,7 +138,17 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
138138
}
139139
if(!allImportsAndExtendsValid){ // Check that the source code of qualifiedModuleName is available
140140
try {
141-
mloc = getModuleLocation(qualifiedModuleName, pcfg);
141+
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
142+
try {
143+
mloc = getModuleLocation(qualifiedModuleName, pcfg);
144+
} catch e: {
145+
err = error("Cannot get location for <qualifiedModuleName>: <e>", mloc);
146+
ms.messages[qualifiedModuleName] = { err };
147+
tm = tmodel(modelName=qualifiedModuleName, messages=[ err ]);
148+
ms = addTModel(qualifiedModuleName, tm, ms);
149+
ms.status[qualifiedModuleName] += { rsc_not_found() };
150+
return ms;
151+
}
142152
if(mloc.extension != "rsc" || isModuleLocationInLibs(qualifiedModuleName, mloc, pcfg)) throw "No src or library module 1"; //There is only a tpl file available
143153
} catch value _:{
144154
<compatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
@@ -269,9 +279,9 @@ tuple[ModuleStatus, rel[str, PathRole, str]] getModulePathsAsStr(Module m, Modul
269279
ms.status[iname] = ms.status[iname] ? {};
270280
try {
271281
mloc = getModuleLocation(iname, ms.pathConfig);
272-
//if(mloc.extension != "rsc" || isModuleLocationInLibs(iname, mloc, ms.pathConfig)) throw "No src or library module 2";
273282
} catch str msg: {
274-
ms.messages[moduleName] ? {} += { error(msg, imod@\loc) };
283+
err = error("Cannot get location for <iname>: <msg>", imod@\loc);
284+
ms.messages[moduleName] ? {} += { err };
275285
ms.status[iname] += { rsc_not_found() };
276286
}
277287
}

0 commit comments

Comments
 (0)