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

Commit f0d1f72

Browse files
committed
Changed signature of exception
1 parent 3b1f2dc commit f0d1f72

File tree

4 files changed

+77
-35
lines changed

4 files changed

+77
-35
lines changed
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
eclipse.preferences.version=1
22
encoding//src/org/rascalmpl/core/library=UTF-8
3-
encoding//target/generated-test-sources=UTF-8
43
encoding/<project>=UTF-8
54
encoding/src=UTF-8
65
encoding/test=UTF-8

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

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
150150
}
151151
if(mloc.extension != "rsc" || isModuleLocationInLibs(qualifiedModuleName, mloc, pcfg)) throw "No src or library module 1"; //There is only a tpl file available
152152
} catch value _:{
153-
<incompatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
153+
<incompatible, ms> = isCompatibleBinaryLibrary(tm, ms);
154154
if(!isEmpty(incompatible)){
155-
txt = "Recompilation or reconfiguration needed: binary module `<qualifiedModuleName>` uses incompatible modules <intercalateAnd(incompatible)>";
155+
txt = "Recompilation or reconfiguration needed: binary module `<qualifiedModuleName>` uses incompatible module(s) <intercalateAnd(incompatible)>";
156156
msg = error(txt, mloc);
157157
tm.messages += [msg];
158158
ms.messages[qualifiedModuleName] ? {} += { msg };
159-
throw rascalBinaryNeedsRecompilation(txt);
159+
throw rascalBinaryNeedsRecompilation(qualifiedModuleName, msg);
160160
} else {
161161
allImportsAndExtendsValid = true;
162162
if(ms.compilerConfig.verbose){
@@ -211,39 +211,67 @@ ModuleStatus getInlineImportAndExtendGraph(Tree pt, RascalCompilerConfig ccfg){
211211
return completeModuleStatus(ms);
212212
}
213213

214-
// Example: |rascal+function:///util/Math/round$d80e373d64c01979| ==> util::Math
215-
str getModuleFromLogical(loc l){
216-
i = findLast(l.path[1..], "/");
217-
res = i >= 0 ? l.path[1..i+1] : l.path[1..];
218-
return replaceAll(res, "/", "::");
219-
}
220-
221-
// Is what library module lib provides compatible with all uses in the modules libUsers?
222-
tuple[list[str], ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){
223-
214+
// Is binary library module compatible with its dependencies (originating from imports and extends)?
215+
tuple[list[str], ModuleStatus] isCompatibleBinaryLibrary(TModel lib, ModuleStatus ms){
224216
libName = lib.modelName;
225-
set[loc] libProvides = domain(lib.logical2physical);
226-
set[str] libProvidesModules = { getModuleFromLogical(l) | l <- libProvides };
227-
set[loc] usersRequire = {};
228-
for(m <- libUsers){
217+
set[loc] libLogical = domain(lib.logical2physical);
218+
set[loc] libDefines = { l | l <- libLogical, getModuleFromLogical(l) == libName };
219+
set[loc] libDependsOn = libLogical - libDefines;
220+
set[str] libDependsOnModules = { getModuleFromLogical(l) | l <- libDependsOn };
221+
set[loc] dependentsProvide = {};
222+
for(m <- libDependsOnModules){
229223
<found, tm, ms> = getTModelForModule(m, ms);
230224
if(found){
231-
usersRequire += domain(tm.logical2physical);
225+
dependentsProvide += domain(tm.logical2physical);
232226
}
233227
}
234-
usersRequireFromLib = { l | l <- usersRequire, getModuleFromLogical(l) in libProvidesModules };
235-
236-
if(usersRequireFromLib <= libProvides){
237-
//println("isCompatibleBinaryLibrary <libName>: satisfied");
228+
unsatisfied = libDependsOn - dependentsProvide;
229+
if(isEmpty(unsatisfied)){
230+
println("isCompatibleBinaryLibrary <libName>: satisfied");
238231
return <[], ms>;
239232
} else {
240-
//println("isCompatibleBinaryLibrary, <libName> unsatisfied: <usersRequireFromLib - libProvides>");
241-
unsatisfied = usersRequireFromLib - libProvides;
233+
println("isCompatibleBinaryLibrary, <libName> unsatisfied: <unsatisfied>");
242234
incompatibleModules = { split("/", u.path)[1] | u <- unsatisfied };
243235
return <toList(incompatibleModules), ms>;
244236
}
245237
}
246238

239+
// Example: |rascal+function:///util/Math/round$d80e373d64c01979| ==> util::Math
240+
// Example: |rascal+module:///lang/rascal/syntax/Rascal| -> lang::rascal::syntax::Rascal
241+
str getModuleFromLogical(loc l){
242+
i = findLast(l.path[1..], "/");
243+
res = (l.scheme == "rascal+module" || i < 0) ? l.path[1..] : l.path[1..i+1];
244+
res = replaceAll(res, "/", "::");
245+
//println("getModuleFromLogical: <l> -\> <res>");
246+
return res;
247+
}
248+
249+
// // Is what library module lib provides compatible with all uses in the modules libUsers?
250+
// tuple[list[str], ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){
251+
252+
// libName = lib.modelName;
253+
// set[loc] libProvides = domain(lib.logical2physical);
254+
// set[str] libProvidesModules = { getModuleFromLogical(l) | l <- libProvides };
255+
// set[loc] usersRequire = {};
256+
// for(m <- libUsers){
257+
// <found, tm, ms> = getTModelForModule(m, ms);
258+
// if(found){
259+
// usersRequire += domain(tm.logical2physical);
260+
// }
261+
// }
262+
// usersRequireFromLib = { l | l <- usersRequire, getModuleFromLogical(l) in libProvidesModules };
263+
264+
// if(usersRequireFromLib <= libProvides){
265+
// //println("isCompatibleBinaryLibrary <libName>: satisfied");
266+
// return <[], ms>;
267+
// } else {
268+
// println("isCompatibleBinaryLibrary, <libName> unsatisfied: <usersRequireFromLib - libProvides>");
269+
// unsatisfied = usersRequireFromLib - libProvides;
270+
// incompatibleModules = { split("/", u.path)[1] | u <- unsatisfied };
271+
// return <toList(incompatibleModules), ms>;
272+
// }
273+
// }
274+
247275
tuple[bool, ModuleStatus] importsAndExtendsAreBinaryCompatible(TModel tm, set[str] importsAndExtends, ModuleStatus ms){
248276
moduleName = tm.modelName;
249277
physical2logical = invertUnique(tm.logical2physical);

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

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -213,16 +213,31 @@ public RascalCompilerConfig getPHPCompilerConfig(){
213213
// ---- VSCode-----------------------------------------------------------------
214214

215215
public PathConfig getVSCodePathConfig() {
216+
VS_RASCAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal/0.41.0-RC10/rascal-0.41.0-RC10.jar!/|;
217+
VS_TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.15.1-SNAPSHOT/typepal-0.15.1-SNAPSHOT.jar!/|;
218+
VS_RASCAL_CORE_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal-core/0.12.14-SNAPSHOT/rascal-core-0.12.14-SNAPSHOT.jar!/|;
216219
return
217-
pathConfig(
218-
ignores=[],
219-
javaCompilerPath=[],
220-
bin=|target://rascal-core|,
221-
classloaders=[],
222-
libs=[
223-
|lib://rascal|,
224-
|target://typepal| ],
225-
srcs=[|file:///Users/paulklint/git/rascal-core/src/org/rascalmpl/core/library|]);
220+
pathConfig(
221+
ignores=[],
222+
resources=|file:///Users/paulklint/git/rascal-language-servers/rascal-lsp/target/classes/|,
223+
javaCompilerPath=[],
224+
bin=|file:///Users/paulklint/git/rascal-language-servers/rascal-lsp/target/classes/|,
225+
classloaders=[],
226+
generatedSources=|file:///Users/paulklint/git/rascal-language-servers/rascal-lsp/generated-sources|,
227+
libs=[
228+
|jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal/0.41.0-RC10/rascal-0.41.0-RC10.jar!/|,
229+
|jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal-core/0.12.13/rascal-core-0.12.13.jar!/|,
230+
|jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.15.0/typepal-0.15.0.jar!/|
231+
],
232+
srcs=[|file:///Users/paulklint/git/rascal-language-servers/rascal-lsp/src/main/rascal/|]);
233+
// pathConfig(
234+
// bin = REPO + "compiled-rascal/target/classes",
235+
// generatedSources = REPO + "compiled-rascal/src/main/java",
236+
// generatedTestSources = REPO + "compiled-rascal/src/test/java/",
237+
// resources = REPO + "compiled-rascal/src/main/java",
238+
// testResources = REPO + "compiled-rascal/src/test/java",
239+
// libs=[VS_RASCAL_JAR, VS_TYPEPAL_JAR, VS_RASCAL_CORE_JAR],
240+
// srcs=[|file:///Users/paulklint/git/rascal-language-servers/rascal-lsp/src/main/rascal|]);
226241
}
227242

228243
public RascalCompilerConfig getVSCodeCompilerConfig(){

src/org/rascalmpl/core/library/lang/rascalcore/compile/CompileTimeError.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ data Exception
66
= CompileTimeError(Message msg)
77
| InternalCompilerError(Message msg)
88
| rascalTplVersionError(str txt)
9-
| rascalBinaryNeedsRecompilation(str txt)
9+
| rascalBinaryNeedsRecompilation(str moduleName, Message msg)
1010
;

0 commit comments

Comments
 (0)