diff --git a/pom.xml b/pom.xml index 9fc19714997..feba2b5d1c5 100644 --- a/pom.xml +++ b/pom.xml @@ -365,7 +365,7 @@ io.usethesource vallang - 1.0.0-RC2 + 1.0.0-RC3 org.ow2.asm diff --git a/src/org/rascalmpl/library/lang/rascal/matching/Fingerprint.rsc b/src/org/rascalmpl/library/lang/rascal/matching/Fingerprint.rsc index 4f7afe99d87..002f9e78063 100644 --- a/src/org/rascalmpl/library/lang/rascal/matching/Fingerprint.rsc +++ b/src/org/rascalmpl/library/lang/rascal/matching/Fingerprint.rsc @@ -14,7 +14,11 @@ fingerprints, with compile-time information for generating switch cases that use There are several explicit contracts implemented here: * a fingerprint is (almost) never `0`. * the fingerprint functions in this module implement exactly the fingerprinting of the run-time that the generated code will be linked against. - This contract is tested with internal tests in this module. + This contract is tested with internal tests in this module: fingerprintAlignment and concreteFingerprintAlignment. + If these tests fail, it is possible that during a bootstrap cycle of 3 steps, + the contract is temporarily not satisfied in the first and second steps. To break the impasse, the code below allows us to generate fingerprints for + the _next_ run-time version, while the current run-time still runs the _previous_ version of the compiler. We have to disable the `concreteFingerprintAlignment` + and `fingerprintAlignment` tests temporarily during the first and second run. * `value matches pattern ==> fingerprint(pattern) == fingerprint(value)` such that a fingerprint is always an over-approximation of matching. It may never be the case that a value should match a pattern and the fingerprint contradicts this. This contract is tested by the pattern matching tests for the interpreter and the compiler. diff --git a/test/org/rascalmpl/MatchFingerprintTest.java b/test/org/rascalmpl/MatchFingerprintTest.java index 93283cd5b1e..41614b94b05 100644 --- a/test/org/rascalmpl/MatchFingerprintTest.java +++ b/test/org/rascalmpl/MatchFingerprintTest.java @@ -70,13 +70,13 @@ public void testTreeApplFingerPrintStability() { ITree tree = VF.appl(prod, VF.list()); assertEquals(tree.getMatchFingerprint(), "appl".hashCode() + 131 * 2); - assertEquals(tree.getConcreteMatchFingerprint(), "tree".hashCode() + 41 * prod.hashCode()); + assertEquals(tree.getConcreteMatchFingerprint(), "appl".hashCode() + 41 * prod.hashCode()); // and now WITH a keyword parameter tree = (ITree) tree.asWithKeywordParameters().setParameter("src", loc); assertEquals(tree.getMatchFingerprint(), "appl".hashCode() + 131 * 2); - assertEquals(tree.getConcreteMatchFingerprint(), "tree".hashCode() + 41 * prod.hashCode()); + assertEquals(tree.getConcreteMatchFingerprint(), "appl".hashCode() + 41 * prod.hashCode()); } catch (FactTypeUseException | IOException e) { fail(e.getMessage());