From: Ian Lynagh Date: Wed, 25 Nov 2009 23:06:16 +0000 (+0000) Subject: Fix a bug in alternative layout X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=9568347eb0ae5d11354e0e4744c0f6af8b65b0be;ds=sidebyside Fix a bug in alternative layout And make the code simpler in the process! --- diff --git a/compiler/parser/Lexer.x b/compiler/parser/Lexer.x index 5083470..1bb8a63 100644 --- a/compiler/parser/Lexer.x +++ b/compiler/parser/Lexer.x @@ -2012,22 +2012,15 @@ alternativeLayoutRuleToken t do setPendingImplicitTokens [t] setALRContext ls return (L thisLoc ITccurly) - (_, ls@(ALRLayout _ col : _), _) - | newLine && thisCol <= col -> - do let f ls'@(ALRLayout _ col' : ls'') - | thisCol < col' = case f ls'' of - (ts, ls''') -> - (L thisLoc ITccurly : ts, ls''') - | thisCol == col' = ([L thisLoc ITsemi], ls') - | otherwise = ([], ls') - f ls' = ([], ls') - case f ls of - (t' : ts, ls') -> - do setALRContext ls' - setPendingImplicitTokens ts - setNextToken t - return t' - _ -> panic "Layout rule: [] when considering newline" + (_, ALRLayout _ col : ls, _) + | newLine && thisCol == col -> + do setNextToken t + return (L thisLoc ITsemi) + | newLine && thisCol < col -> + do setALRContext ls + -- Note that we use lastLoc, as we may need to close + -- more layouts, or give a semicolon + return (L lastLoc ITccurly) (u, _, _) | isALRopen u -> do setALRContext (ALRNoLayout (containsCommas u) : context)