Skip to content
  • Vladislav Zavialov's avatar
    Fix optSemi type in Parser.y · 071bef18
    Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
    The definition of 'optSemi' claimed it had type
    
    ([Located a],Bool)
    
    Note that its production actually returns ([Located Token],Bool):
    
      : ';' { ([$1],True) }   -- $1 :: Located Token
    
    Due to an infelicity in the implementation of 'happy -c', it effectively
    resulted in 'unsafeCoerce :: Token -> a'.
    See https://github.com/simonmar/happy/pull/134
    
    If any consumer of 'optSemi' tried to instantiate 'a' to something not
    representationally equal to 'Token', they would experience a segfault.
    
    In addition to that, this definition made it impossible to compile Parser.y
    without the -c flag (as it's reliant on this bug to cast 'Token' to 'forall
    a. a').
    071bef18