From f72f6915b09c7432613edcb04eedc49090b78073 Mon Sep 17 00:00:00 2001 From: paulklint Date: Thu, 20 Aug 2026 20:07:09 +0200 Subject: [PATCH 1/3] Added missing "aempty" in various places --- .../compiler/lang/rascalcore/check/AType.rsc | 6 ++++-- .../lang/rascalcore/compile/Examples/Tst4.rsc | 15 +++++---------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc index 8a7ce513151..25336446504 100644 --- a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc +++ b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc @@ -318,6 +318,7 @@ bool asubtype(i:\iter-star-seps(AType s, list[AType] seps), AType b){ fail; } +bool asubtype(\aempty(),aadt(n, [], dataSyntax())) = n == "Tree"; bool asubtype(\opt(AType _),aadt(n, [], dataSyntax())) = n == "Tree"; bool asubtype(\alt(set[AType] _),aadt(n, [], dataSyntax())) = n == "Tree"; bool asubtype(\seq(list[AType] _),aadt(n, [], dataSyntax())) = n == "Tree"; @@ -497,6 +498,7 @@ bool isLayoutAType(\iter-star(AType s)) = isLayoutAType(s); bool isLayoutAType(\iter-seps(AType s,_)) = isLayoutAType(s); bool isLayoutAType(\iter-star-seps(AType s,_)) = isLayoutAType(s); +bool isLayoutAType(\aempty()) = true; bool isLayoutAType(\opt(AType s)) = isLayoutAType(s); bool isLayoutAType(\alt(set[AType] alts)) = any(a <- alts, isLayoutAType(a)); bool isLayoutAType(\seq(list[AType] symbols)) = all(s <- symbols, isLayoutAType(s)); @@ -698,9 +700,9 @@ AType alub(\iter-star-seps(AType l, _), \iter-star-seps(AType r, _)) = aadt("Tre AType alub(\iter-star-seps(AType l, _), \iter-seps(AType r, _)) = aadt("Tree", [], dataSyntax()) when l != r; AType alub(l:aadt("Tree", _, _), AType r) = l - when r is \achar-class || r is seq || r is opt || r is alt || r is iter || r is \iter-star || r is \iter-seps || r is \iter-star-seps; + when r is \achar-class || r is aempty || r is seq || r is opt || r is alt || r is iter || r is \iter-star || r is \iter-seps || r is \iter-star-seps; AType alub(AType l, r:aadt("Tree", _, _)) = r - when l is \achar-class || l is seq || l is opt || l is alt || l is iter || l is \iter-star || l is \iter-seps || l is \iter-star-seps; + when l is \achar-class || r is aempty || l is seq || l is opt || l is alt || l is iter || l is \iter-star || l is \iter-seps || l is \iter-star-seps; AType alub(\start(AType l) , AType r) = alub(l, r); AType alub(AType l, \start(AType r)) = alub(l, r); diff --git a/src/org/rascalmpl/compiler/lang/rascalcore/compile/Examples/Tst4.rsc b/src/org/rascalmpl/compiler/lang/rascalcore/compile/Examples/Tst4.rsc index 595703ac3ec..4de8b8d0b07 100644 --- a/src/org/rascalmpl/compiler/lang/rascalcore/compile/Examples/Tst4.rsc +++ b/src/org/rascalmpl/compiler/lang/rascalcore/compile/Examples/Tst4.rsc @@ -26,14 +26,9 @@ POSSIBILITY OF SUCH DAMAGE. } module lang::rascalcore::compile::Examples::Tst4 -int outer1(int t, int tabSize=4){ - int rec(int t) = t + tabSize when t > 10; - default int rec(int t) = t; - return rec(t); -} +import ParseTree; + +syntax A = "a"; +test bool optEmpty() = value _ := parse(#(A?), ""); -// int outer2(int t, int tabSize=4){ -// int rec(int t, int innerKwp = 5) = t + tabSize + innerKwp when t > 10; -// default int rec(int t) = t; -// return rec(t); -// } \ No newline at end of file +test bool empty() = value _ := parse(#(), ""); \ No newline at end of file From b2dcaba64726af83549ddf7e5f10b3f2a831f9c6 Mon Sep 17 00:00:00 2001 From: paulklint Date: Thu, 20 Aug 2026 23:05:38 +0200 Subject: [PATCH 2/3] Undo change --- src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc index 25336446504..05c7dbcd0c1 100644 --- a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc +++ b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc @@ -498,7 +498,6 @@ bool isLayoutAType(\iter-star(AType s)) = isLayoutAType(s); bool isLayoutAType(\iter-seps(AType s,_)) = isLayoutAType(s); bool isLayoutAType(\iter-star-seps(AType s,_)) = isLayoutAType(s); -bool isLayoutAType(\aempty()) = true; bool isLayoutAType(\opt(AType s)) = isLayoutAType(s); bool isLayoutAType(\alt(set[AType] alts)) = any(a <- alts, isLayoutAType(a)); bool isLayoutAType(\seq(list[AType] symbols)) = all(s <- symbols, isLayoutAType(s)); From 0b27996245971f0113ae132a3592039561ea44a1 Mon Sep 17 00:00:00 2001 From: paulklint Date: Fri, 21 Aug 2026 10:41:09 +0200 Subject: [PATCH 3/3] Fixed error and factored out predicate (ht @toinehartman) --- src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc index 05c7dbcd0c1..2ec6fd344fa 100644 --- a/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc +++ b/src/org/rascalmpl/compiler/lang/rascalcore/check/AType.rsc @@ -698,10 +698,13 @@ AType alub(\iter-seps(AType l,_), \iter-star-seps(AType r,_)) = aadt("Tree", [], AType alub(\iter-star-seps(AType l, _), \iter-star-seps(AType r, _)) = aadt("Tree", [], dataSyntax()) when l != r; AType alub(\iter-star-seps(AType l, _), \iter-seps(AType r, _)) = aadt("Tree", [], dataSyntax()) when l != r; +private bool isSyntaxConstructor(AType l) + = l is \achar-class || l is aempty || l is seq || l is opt || l is alt || l is iter || l is \iter-star || l is \iter-seps || l is \iter-star-seps; + AType alub(l:aadt("Tree", _, _), AType r) = l - when r is \achar-class || r is aempty || r is seq || r is opt || r is alt || r is iter || r is \iter-star || r is \iter-seps || r is \iter-star-seps; + when isSyntaxConstructor(r); AType alub(AType l, r:aadt("Tree", _, _)) = r - when l is \achar-class || r is aempty || l is seq || l is opt || l is alt || l is iter || l is \iter-star || l is \iter-seps || l is \iter-star-seps; + when isSyntaxConstructor(r); AType alub(\start(AType l) , AType r) = alub(l, r); AType alub(AType l, \start(AType r)) = alub(l, r);