Apoorv Ingle pushed to branch wip/spj-apporv-Oct24 at Glasgow Haskell Compiler / GHC

Commits:

7 changed files:

Changes:

  • compiler/GHC/Hs.hs
    ... ... @@ -150,16 +150,8 @@ data HsParsedModule = HsParsedModule {
    150 150
            -- them change (#3589)
    
    151 151
       }
    
    152 152
     
    
    153
    --- All the various located syntax things that sets the user context code in TcLclEnv
    
    154
    --- data SrcCodeOrigin  =
    
    155
    ---     ExprThing (HsExpr GhcRn)
    
    156
    ---   | PatThing (LPat GhcRn)
    
    157
    ---   | StmtThing (ExprLStmt GhcRn) HsDoFlavour
    
    158
    -
    
    159
    --- I'm a looking at a generated thing or am I a user written thing?
    
    160
    -data SrcCodeCtxt = UserCode | GeneratedCode HsThingRn
    
    161
    -
    
    162
    --- mkSrcCodeOrigin :: HsThingRn -> SrcCodeOrigin
    
    163
    --- mkSrcCodeOrigin (OrigExpr e) = ExprThing e
    
    164
    --- mkSrcCodeOrigin (OrigPat p) = PatThing p
    
    165
    --- mkSrcCodeOrigin (OrigStmt s f) = StmtThing e f
    153
    +-- Used in TcLclCtxt.tcl_in_gen_code to mark if the current expression
    
    154
    +-- is a user generated code or a compiler generated expansion of some user written code
    
    155
    +data SrcCodeCtxt
    
    156
    +  = UserCode
    
    157
    +  | GeneratedCode SrcCodeOrigin

  • compiler/GHC/Hs/Expr.hs
    ... ... @@ -672,12 +672,13 @@ type instance XXExpr GhcTc = XXExprGhcTc
    672 672
     -- | The different source constructs that we use to instantiate the "original" field
    
    673 673
     --   in an `XXExprGhcRn original expansion`
    
    674 674
     --   See Note [Handling overloaded and rebindable constructs] in `GHC.Rename.Expr`
    
    675
    -data HsThingRn = OrigExpr (HsExpr GhcRn)                -- ^ The source, user written, expression
    
    676
    -               | OrigStmt (ExprLStmt GhcRn) HsDoFlavour -- ^ which kind of do-block did this statement come from
    
    677
    -               | OrigPat  (LPat GhcRn)                  -- ^ Used for failable patterns that trigger MonadFail constraints
    
    675
    +data SrcCodeOrigin
    
    676
    +  = OrigExpr (HsExpr GhcRn)                -- ^ The source, user written, expression
    
    677
    +  | OrigStmt (ExprLStmt GhcRn) HsDoFlavour -- ^ which kind of do-block did this statement come from
    
    678
    +  | OrigPat  (LPat GhcRn)                  -- ^ Used for failable patterns that trigger MonadFail constraints
    
    678 679
     
    
    679 680
     data XXExprGhcRn
    
    680
    -  = ExpandedThingRn { xrn_orig     :: HsThingRn       -- The original source thing to be used for error messages
    
    681
    +  = ExpandedThingRn { xrn_orig     :: SrcCodeOrigin       -- The original source thing to be used for error messages
    
    681 682
                         , xrn_expanded :: HsExpr GhcRn    -- The compiler generated expanded thing
    
    682 683
                         }
    
    683 684
     
    
    ... ... @@ -718,7 +719,7 @@ data XXExprGhcTc
    718 719
     
    
    719 720
       | ExpandedThingTc                         -- See Note [Rebindable syntax and XXExprGhcRn]
    
    720 721
                                                 -- See Note [Expanding HsDo with XXExprGhcRn] in `GHC.Tc.Gen.Do`
    
    721
    -         { xtc_orig     :: HsThingRn        -- The original user written thing
    
    722
    +         { xtc_orig     :: SrcCodeOrigin        -- The original user written thing
    
    722 723
              , xtc_expanded :: HsExpr GhcTc }   -- The expanded typechecked expression
    
    723 724
     
    
    724 725
       | ConLikeTc      -- Result of typechecking a data-con
    
    ... ... @@ -752,10 +753,10 @@ mkExpandedExprTc
    752 753
       :: HsExpr GhcRn           -- ^ source expression
    
    753 754
       -> HsExpr GhcTc           -- ^ expanded typechecked expression
    
    754 755
       -> HsExpr GhcTc           -- ^ suitably wrapped 'XXExprGhcRn'
    
    755
    -mkExpandedExprTc oExpr eExpr = XExpr (ExpandedThingTc (OrigExpr oExpr) eExpr)
    
    756
    +mkExpandedExprTc oExpr eExpr = mkExpandedTc (OrigExpr oExpr) eExpr
    
    756 757
     
    
    757 758
     mkExpandedTc
    
    758
    -  :: HsThingRn        -- ^ source do statement
    
    759
    +  :: SrcCodeOrigin          -- ^ source, user written do statement/expression
    
    759 760
       -> HsExpr GhcTc           -- ^ expanded typechecked expression
    
    760 761
       -> HsExpr GhcTc           -- ^ suitably wrapped 'XXExprGhcRn'
    
    761 762
     mkExpandedTc o e = XExpr (ExpandedThingTc o e)
    
    ... ... @@ -1020,7 +1021,7 @@ ppr_expr (XExpr x) = case ghcPass @p of
    1020 1021
       GhcRn -> ppr x
    
    1021 1022
       GhcTc -> ppr x
    
    1022 1023
     
    
    1023
    -instance Outputable HsThingRn where
    
    1024
    +instance Outputable SrcCodeOrigin where
    
    1024 1025
       ppr thing
    
    1025 1026
         = case thing of
    
    1026 1027
             OrigExpr x    -> ppr_builder "<OrigExpr>:" x
    
    ... ... @@ -1087,7 +1088,7 @@ ppr_infix_expr_tc (HsTick {}) = Nothing
    1087 1088
     ppr_infix_expr_tc (HsBinTick {})             = Nothing
    
    1088 1089
     ppr_infix_expr_tc (HsRecSelTc f)            = Just (pprInfixOcc f)
    
    1089 1090
     
    
    1090
    -ppr_infix_hs_expansion :: HsThingRn -> Maybe SDoc
    
    1091
    +ppr_infix_hs_expansion :: SrcCodeOrigin -> Maybe SDoc
    
    1091 1092
     ppr_infix_hs_expansion (OrigExpr e) = ppr_infix_expr e
    
    1092 1093
     ppr_infix_hs_expansion _            = Nothing
    
    1093 1094
     
    
    ... ... @@ -1195,7 +1196,7 @@ hsExprNeedsParens prec = go
    1195 1196
         go_x_rn (PopErrCtxt a)               = hsExprNeedsParens prec a
    
    1196 1197
         go_x_rn (HsRecSelRn{})               = False
    
    1197 1198
     
    
    1198
    -    hsExpandedNeedsParens :: HsThingRn -> Bool
    
    1199
    +    hsExpandedNeedsParens :: SrcCodeOrigin -> Bool
    
    1199 1200
         hsExpandedNeedsParens (OrigExpr e) = hsExprNeedsParens prec e
    
    1200 1201
         hsExpandedNeedsParens _            = False
    
    1201 1202
     
    
    ... ... @@ -1248,7 +1249,7 @@ isAtomicHsExpr (XExpr x)
    1248 1249
         go_x_rn (PopErrCtxt a)              = isAtomicHsExpr a
    
    1249 1250
         go_x_rn (HsRecSelRn{})              = True
    
    1250 1251
     
    
    1251
    -    isAtomicExpandedThingRn :: HsThingRn -> Bool
    
    1252
    +    isAtomicExpandedThingRn :: SrcCodeOrigin -> Bool
    
    1252 1253
         isAtomicExpandedThingRn (OrigExpr e) = isAtomicHsExpr e
    
    1253 1254
         isAtomicExpandedThingRn _            = False
    
    1254 1255
     
    

  • compiler/GHC/Hs/Instances.hs
    ... ... @@ -591,7 +591,7 @@ deriving instance Eq (IE GhcTc)
    591 591
     
    
    592 592
     -- ---------------------------------------------------------------------
    
    593 593
     
    
    594
    -deriving instance Data HsThingRn
    
    594
    +deriving instance Data SrcCodeOrigin
    
    595 595
     deriving instance Data XXExprGhcRn
    
    596 596
     deriving instance Data a => Data (WithUserRdr a)
    
    597 597
     
    

  • compiler/GHC/HsToCore/Ticks.hs
    ... ... @@ -611,7 +611,7 @@ addTickHsExpr (HsDo srcloc cxt (L l stmts))
    611 611
                         ListComp -> Just $ BinBox QualBinBox
    
    612 612
                         _        -> Nothing
    
    613 613
     
    
    614
    +-- addTickHsExpanded :: SrcCodeOrigin -> HsExpr GhcTc -> TM (HsExpr GhcTc)
    
    614 615
     -- addTickHsExpanded o e = liftM (XExpr . ExpandedThingTc o) $ case o of
    
    615 616
     --   -- We always want statements to get a tick, so we can step over each one.
    
    616 617
     --   -- To avoid duplicates we blacklist SrcSpans we already inserted here.
    

  • compiler/GHC/Tc/Errors/Ppr.hs
    ... ... @@ -5306,11 +5306,9 @@ pprArising :: CtLoc -> SDoc
    5306 5306
     -- We've done special processing for TypeEq, KindEq, givens
    
    5307 5307
     pprArising ct_loc
    
    5308 5308
       | suppress_origin   = empty
    
    5309
    -  | in_generated_code = pprCtOrigin orig -- TODO ANI: maybe should go way
    
    5310 5309
       | otherwise         = pprCtOrigin orig
    
    5311 5310
       where
    
    5312 5311
         orig = ctLocOrigin ct_loc
    
    5313
    -    in_generated_code = ctLocEnvInGeneratedCode (ctLocEnv ct_loc)
    
    5314 5312
         suppress_origin
    
    5315 5313
           | isGivenOrigin orig = True
    
    5316 5314
           | otherwise          = case orig of
    

  • compiler/GHC/Tc/Types/Origin.hs
    ... ... @@ -763,18 +763,18 @@ exprCtOrigin (HsHole _) = Shouldn'tHappenOrigin "hole expression"
    763 763
     exprCtOrigin (HsForAll {})       = Shouldn'tHappenOrigin "forall telescope"    -- See Note [Types in terms]
    
    764 764
     exprCtOrigin (HsQual {})         = Shouldn'tHappenOrigin "constraint context"  -- See Note [Types in terms]
    
    765 765
     exprCtOrigin (HsFunArr {})       = Shouldn'tHappenOrigin "function arrow"      -- See Note [Types in terms]
    
    766
    -exprCtOrigin (XExpr (ExpandedThingRn {})) = Shouldn'tHappenOrigin "XExpr ExpandedThingRn"
    
    766
    +exprCtOrigin (XExpr (ExpandedThingRn o _)) = srcCodeOriginCtOrigin o
    
    767 767
     exprCtOrigin (XExpr (PopErrCtxt e)) = exprCtOrigin e
    
    768 768
     exprCtOrigin (XExpr (HsRecSelRn f))  = OccurrenceOfRecSel (foExt f)
    
    769 769
     
    
    770
    -hsThingCtOrigin :: HsThingRn -> CtOrigin
    
    771
    -hsThingCtOrigin (OrigExpr e) = exprCtOrigin e
    
    772
    -hsThingCtOrigin (OrigStmt{}) = DoStmtOrigin
    
    773
    -hsThingCtOrigin (OrigPat p) = DoPatOrigin p
    
    770
    +srcCodeOriginCtOrigin :: SrcCodeOrigin -> CtOrigin
    
    771
    +srcCodeOriginCtOrigin (OrigExpr e) = exprCtOrigin e
    
    772
    +srcCodeOriginCtOrigin (OrigStmt{}) = DoStmtOrigin
    
    773
    +srcCodeOriginCtOrigin (OrigPat p) = DoPatOrigin p
    
    774 774
     
    
    775 775
     srcCodeCtxtCtOrigin :: HsExpr GhcRn -> SrcCodeCtxt -> CtOrigin
    
    776 776
     srcCodeCtxtCtOrigin e UserCode = exprCtOrigin e
    
    777
    -srcCodeCtxtCtOrigin _ (GeneratedCode e) = hsThingCtOrigin e
    
    777
    +srcCodeCtxtCtOrigin _ (GeneratedCode e) = srcCodeOriginCtOrigin e
    
    778 778
     
    
    779 779
     -- | Extract a suitable CtOrigin from a MatchGroup
    
    780 780
     matchesCtOrigin :: MatchGroup GhcRn (LHsExpr GhcRn) -> CtOrigin
    

  • compiler/GHC/Tc/Utils/Monad.hs
    ... ... @@ -990,9 +990,9 @@ getSrcCodeCtxt = getLclEnvSrcCodeCtxt <$> getLclEnv
    990 990
     -- | Mark the inner computation as being done inside generated code.
    
    991 991
     --
    
    992 992
     -- See Note [Error contexts in generated code]
    
    993
    -setInGeneratedCode :: HsThingRn -> TcRn a -> TcRn a
    
    994
    -setInGeneratedCode syntax_thing thing_inside =
    
    995
    -  updLclCtxt (setLclCtxtSrcCodeCtxt (GeneratedCode syntax_thing)) thing_inside
    
    993
    +setInGeneratedCode :: SrcCodeOrigin -> TcRn a -> TcRn a
    
    994
    +setInGeneratedCode scOrig thing_inside =
    
    995
    +  updLclCtxt (setLclCtxtSrcCodeCtxt (GeneratedCode scOrig)) thing_inside
    
    996 996
     
    
    997 997
     setSrcSpanA :: EpAnn ann -> TcRn a -> TcRn a
    
    998 998
     setSrcSpanA l = setSrcSpan (locA l)