GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Alias arguments are substituted one at a time: Below(b, a) is expanded as a < a, giving a false "can never be true" warning · Issue #491 · liquid-java/liquidjava Open Labels bugSomething isn't workingSomething isn't working DescriptionImpact: an alias whose arguments reuse its own parameter names in a different order is expanded wrongly, because the arguments are substituted one at a time. At the declaration this gives a false "This refinement can never be true" warning. Call sites look right in this repro, because their arguments are renamed to fresh variables before the alias is expanded. Any other path that expands an alias over unrenamed names would check the wrong formula. Minimal reproducer import liquidjava.specification.Refinement; import liquidjava.specification.RefinementAlias; @RefinementAlias("Below(int a, int b) { a < b }") public class Probe { static void need(int a, int b, @Refinement("Below(b, a)") int unused) {} static void run() { need(5, 3, 0); // Below(3, 5) = 3 < 5: holds } static void run2() { need(3, 5, 0); // Below(5, 3) = 5 < 3: must be rejected } } Actual (main @ cd49fea):
Cause. Expected: substitute all arguments at once, i.e. a simultaneous substitution, or rename the alias parameters to fresh names first. Then the declaration gets no warning. Found while working on #295 (PR #489 builds its expansions with a simultaneous substitution for the ActivityMetadataMetadataAssigneesLabelsbugSomething isn't workingSomething isn't working TypeProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |