From 5bb792be5e3416a2229d549d57f02b54829c470b Mon Sep 17 00:00:00 2001 From: hallgren Date: Tue, 1 Dec 2015 15:14:27 +0000 Subject: [PATCH] GF.Data.Str: change matchPrefix to agree with the GF book and the run-time system The matchPrefix function is used in str2strings and the partial evaluator to compute pre{...} tokens. But unlike the description in the GF book and the implementation in the run-time system, matchPrefix looked at the concatenation(!) of all following tokens and not just the next token when deciding how to compute a pre{...} token. This is a backwards incompatible change, but it is subtle and probably won't cause any problems. In particular, the example grammars are unaffected. --- src/compiler/GF/Data/Str.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/GF/Data/Str.hs b/src/compiler/GF/Data/Str.hs index 7b79add0a..7f1f4db75 100644 --- a/src/compiler/GF/Data/Str.hs +++ b/src/compiler/GF/Data/Str.hs @@ -44,8 +44,8 @@ type Ss = [String] -- matching functions in both ways matchPrefix :: Ss -> [(Ss,[String])] -> [String] -> Ss -matchPrefix s vs t = - head $ [u | let t' = concat (unmarkup t), +matchPrefix s vs t = + head $ [u | t':_ <- [unmarkup t], (u,as) <- vs, any (`isPrefixOf` t') as] ++ [s]