1. 22 Sep, 2019 35 commits
  2. 21 Sep, 2019 3 commits
    • Sebastian Graf's avatar
      Get rid of PmFake · a7867c79
      Sebastian Graf authored
      The pattern match oracle can now cope with the abundance of information
      that ViewPatterns, NPlusKPats, overloaded lists, etc. provide.
      
      No need to have PmFake anymore!
      
      Also got rid of a spurious call to `allCompleteMatches`, which we used to call
      *for every constructor* match. Naturally this blows up quadratically for
      programs like `ManyAlternatives`.
      
      -------------------------
      Metric Decrease:
          ManyAlternatives
      
      Metric Increase:
          T11822
      -------------------------
      a7867c79
    • Ömer Sinan Ağacan's avatar
      Document MIN_PAYLOAD_SIZE and mark-compact GC mark bits · ded96fb3
      Ömer Sinan Ağacan authored
      This updates the documentation of the MIN_PAYLOAD_SIZE constant and adds
      a new Note [Mark bits in mark-compact collector] explaning why the
      mark-compact collector uses two bits per objet and why we need
      MIN_PAYLOAD_SIZE.
      ded96fb3
    • Sebastian Graf's avatar
      PredType for type constraints in the pattern match checker instead of EvVar · 1ea8c451
      Sebastian Graf authored
      Using EvVars for capturing type constraints implied side-effects in DsM
      when we just wanted to *construct* type constraints.
      
      But giving names to type constraints is only necessary when passing
      Givens to the type checker, of which the majority of the pattern match
      checker should be unaware.
      
      Thus, we simply generate `newtype TyCt = TyCt PredType`, which are
      nicely stateless. But at the same time this means we have to allocate
      EvVars when we want to query the type oracle! So we keep the type oracle
      state as `newtype TyState = TySt (Bag EvVar)`, which nicely makes a
      distinction between new, unchecked `TyCt`s and the inert set in
      `TyState`.
      1ea8c451
  3. 20 Sep, 2019 2 commits
    • Simon Peyton Jones's avatar
      Fix bogus type of case expression · 0dad81ca
      Simon Peyton Jones authored
      Issue #17056 revealed that we were sometimes building a case
      expression whose type field (in the Case constructor) was bogus.
      
      Consider a phantom type synonym
         type S a = Int
      and we want to form the case expression
         case x of K (a::*) -> (e :: S a)
      We must not make the type field of the Case constructor be (S a)
      because 'a' isn't in scope.  We must instead expand the synonym.
      
      Changes in this patch:
      
      * Expand synonyms in the new function CoreUtils.mkSingleAltCase.
      
      * Use mkSingleAltCase in MkCore.wrapFloat, which was the proximate
        source of the bug (when called by exprIsConApp_maybe)
      
      * Use mkSingleAltCase elsewhere
      
      * Documentation
          CoreSyn   new invariant (6) in Note [Case expression invariants]
          CoreSyn   Note [Why does Case have a 'Type' field?]
          CoreUtils Note [Care with the type of a case expression]
      
      * I improved Core Lint's error reporting, which was pretty
        confusing in this case, because it didn't mention that the offending
        type was the return type of a case expression.
      
      * A little bit of cosmetic refactoring in CoreUtils
      0dad81ca
    • Simon Peyton Jones's avatar
      Fix PmOracle.addVarCoreCt in-scope set · 17554248
      Simon Peyton Jones authored
      PmOracle.addVarCoreCt was giving a bogus (empty) in-scope set to
      exprIsConApp_maybe, which resulted in a substitution-invariant
      failure (see MR !1647 discussion).
      
      This patch fixes it, by taking the free vars of the expression.
      17554248