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

Commits:

5 changed files:

Changes:

  • compiler/GHC/Tc/Gen/App.hs
    ... ... @@ -410,7 +410,6 @@ tcApp rn_expr exp_res_ty
    410 410
                vcat [ text "rn_expr:" <+> ppr rn_expr
    
    411 411
                     , text "rn_fun:" <+> ppr rn_fun
    
    412 412
                     , text "fun_loc:" <+> ppr fun_loc
    
    413
    -                , text "orig:" <+> ppr fun_orig
    
    414 413
                     , text "rn_args:" <+> ppr rn_args ]
    
    415 414
     
    
    416 415
            -- Step 2: Infer the type of `fun`, the head of the application
    
    ... ... @@ -418,12 +417,13 @@ tcApp rn_expr exp_res_ty
    418 417
            ; let tc_head = (tc_fun, fun_loc)
    
    419 418
            -- Step 3: Instantiate the function type (taking a quick look at args)
    
    420 419
            ; do_ql <- wantQuickLook rn_fun
    
    420
    +       ; code_ctxt <- getSrcCodeCtxt
    
    421
    +       ; let fun_orig = srcCodeCtxtCtOrigin rn_fun code_ctxt
    
    421 422
            ; traceTc "tcApp:inferAppHead" $
    
    422 423
              vcat [ text "tc_fun:" <+> ppr tc_fun
    
    423 424
                   , text "fun_sigma:" <+> ppr fun_sigma
    
    425
    +              , text "fun_origin" <+> ppr fun_orig
    
    424 426
                   , text "do_ql:" <+> ppr do_ql]
    
    425
    -       ; code_ctxt <- getSrcCodeCtxt
    
    426
    -       ; let fun_orig = srcCodeCtxtCtOrigin rn_fun code_ctxt
    
    427 427
            ; (inst_args, app_res_rho)
    
    428 428
                   <- tcInstFun do_ql True fun_orig (tc_fun, rn_fun, fun_loc) fun_sigma rn_args
    
    429 429
     
    
    ... ... @@ -857,7 +857,7 @@ tcInstFun do_ql inst_final fun_orig (tc_fun, rn_fun, fun_ctxt) fun_sigma rn_args
    857 857
         -- Rule IARG from Fig 4 of the QL paper:
    
    858 858
         go1 pos acc fun_ty
    
    859 859
             (EValArg { ea_arg = arg, ea_ctxt = ctxt } : rest_args)
    
    860
    -      = do { let herald | DoOrigin <- fun_orig = ExpectedFunTySyntaxOp fun_orig tc_fun -- cf. RepPolyDoBind.hs
    
    860
    +      = do { let herald | DoStmtOrigin <- fun_orig = ExpectedFunTySyntaxOp fun_orig tc_fun -- cf. RepPolyDoBind.hs
    
    861 861
                             | otherwise = ExpectedFunTyArg (HsExprTcThing tc_fun) (unLoc arg)
    
    862 862
                ; (wrap, arg_ty, res_ty) <-
    
    863 863
                     -- NB: matchActualFunTy does the rep-poly check.
    

  • compiler/GHC/Tc/Gen/App.hs-boot
    ... ... @@ -2,10 +2,9 @@ module GHC.Tc.Gen.App where
    2 2
     
    
    3 3
     import GHC.Hs ( HsExpr )
    
    4 4
     import GHC.Tc.Types  ( TcM )
    
    5
    -import GHC.Tc.Types.Origin  ( CtOrigin )
    
    6 5
     import GHC.Tc.Utils.TcType ( TcSigmaType )
    
    7 6
     import GHC.Hs.Extension ( GhcRn, GhcTc )
    
    8 7
     
    
    9 8
     import GHC.Prelude (Bool)
    
    10 9
     
    
    11
    -tcExprSigma :: Bool -> CtOrigin -> HsExpr GhcRn -> TcM (HsExpr GhcTc, TcSigmaType)
    \ No newline at end of file
    10
    +tcExprSigma :: Bool -> HsExpr GhcRn -> TcM (HsExpr GhcTc, TcSigmaType)
    \ No newline at end of file

  • compiler/GHC/Tc/Gen/Expr.hs
    ... ... @@ -114,10 +114,9 @@ tcCheckPolyExprNC expr res_ty = tcPolyLExprNC expr (mkCheckExpType res_ty)
    114 114
     tcPolyLExpr, tcPolyLExprNC :: LHsExpr GhcRn -> ExpSigmaType
    
    115 115
                                -> TcM (LHsExpr GhcTc)
    
    116 116
     
    
    117
    -tcPolyLExpr e@(L loc expr) res_ty
    
    118
    -  = setUserCodeCtxt (ExprThing e) $
    
    119
    -    -- setSrcSpanA loc  $  -- Set location /first/; see GHC.Tc.Utils.Monad
    
    120
    -    -- addExprCtxt expr $  -- Note [Error contexts in generated code]
    
    117
    +tcPolyLExpr (L loc expr) res_ty
    
    118
    +  = setSrcSpanA loc  $  -- Set location /first/; see GHC.Tc.Utils.Monad
    
    119
    +    addExprCtxt expr $  -- Note [Error contexts in generated code]
    
    121 120
         do { expr' <- tcPolyExpr expr res_ty
    
    122 121
            ; return (L loc expr') }
    
    123 122
     
    
    ... ... @@ -747,7 +746,7 @@ tcXExpr (PopErrCtxt e) res_ty
    747 746
              addExprCtxt e $
    
    748 747
              tcExpr e res_ty
    
    749 748
     
    
    750
    -tcXExpr xe@(ExpandedThingRn o e) res_ty
    
    749
    +tcXExpr (ExpandedThingRn o e) res_ty
    
    751 750
        = mkExpandedTc o <$> -- necessary for breakpoints
    
    752 751
           do setInGeneratedCode o $
    
    753 752
                tcExpr e res_ty
    

  • compiler/GHC/Tc/Gen/Match.hs
    ... ... @@ -980,7 +980,7 @@ tcDoStmt ctxt (BindStmt xbsrn pat rhs) res_ty thing_inside
    980 980
                     -- in full generality; see #1537
    
    981 981
     
    
    982 982
               ((rhs_ty, rhs', pat_mult, pat', new_res_ty, thing), bind_op')
    
    983
    -            <- tcSyntaxOp DoOrigin (xbsrn_bindOp xbsrn) [SynRho, SynFun SynAny SynRho] res_ty $
    
    983
    +            <- tcSyntaxOp DoStmtOrigin (xbsrn_bindOp xbsrn) [SynRho, SynFun SynAny SynRho] res_ty $
    
    984 984
                     \ [rhs_ty, pat_ty, new_res_ty] [rhs_mult,fun_mult,pat_mult] ->
    
    985 985
                     do { rhs' <-tcScalingUsage rhs_mult $ tcCheckMonoExprNC rhs rhs_ty
    
    986 986
                        ; (pat', thing) <- tcScalingUsage fun_mult $ tcCheckPat (StmtCtxt ctxt) pat (Scaled pat_mult pat_ty) $
    
    ... ... @@ -1004,7 +1004,7 @@ tcDoStmt _ (BodyStmt _ rhs then_op _) res_ty thing_inside
    1004 1004
       = do  {       -- Deal with rebindable syntax;
    
    1005 1005
                     --   (>>) :: rhs_ty -> new_res_ty -> res_ty
    
    1006 1006
             ; ((rhs', rhs_ty, new_res_ty, thing), then_op')
    
    1007
    -            <- tcSyntaxOp DoOrigin then_op [SynRho, SynRho] res_ty $
    
    1007
    +            <- tcSyntaxOp DoStmtOrigin then_op [SynRho, SynRho] res_ty $
    
    1008 1008
                    \ [rhs_ty, new_res_ty] [rhs_mult,fun_mult] ->
    
    1009 1009
                    do { rhs' <- tcScalingUsage rhs_mult $ tcCheckMonoExprNC rhs rhs_ty
    
    1010 1010
                       ; thing <- tcScalingUsage fun_mult $ thing_inside (mkCheckExpType new_res_ty)
    
    ... ... @@ -1031,18 +1031,18 @@ tcDoStmt ctxt (RecStmt { recS_stmts = L l stmts, recS_later_ids = later_names
    1031 1031
                                  -- Unify the types of the "final" Ids (which may
    
    1032 1032
                                  -- be polymorphic) with those of "knot-tied" Ids
    
    1033 1033
                           ; (_, ret_op')
    
    1034
    -                          <- tcSyntaxOp DoOrigin ret_op [synKnownType tup_ty]
    
    1034
    +                          <- tcSyntaxOp DoStmtOrigin ret_op [synKnownType tup_ty]
    
    1035 1035
                                             inner_res_ty $ \_ _ -> return ()
    
    1036 1036
                           ; return (ret_op', tup_rets) }
    
    1037 1037
     
    
    1038 1038
             ; ((_, mfix_op'), mfix_res_ty)
    
    1039 1039
                 <- tcInfer $ \ exp_ty ->
    
    1040
    -               tcSyntaxOp DoOrigin mfix_op
    
    1040
    +               tcSyntaxOp DoStmtOrigin mfix_op
    
    1041 1041
                               [synKnownType (mkVisFunTyMany tup_ty stmts_ty)] exp_ty $
    
    1042 1042
                    \ _ _ -> return ()
    
    1043 1043
     
    
    1044 1044
             ; ((thing, new_res_ty), bind_op')
    
    1045
    -            <- tcSyntaxOp DoOrigin bind_op
    
    1045
    +            <- tcSyntaxOp DoStmtOrigin bind_op
    
    1046 1046
                               [ synKnownType mfix_res_ty
    
    1047 1047
                               , SynFun (synKnownType tup_ty) SynRho ]
    
    1048 1048
                               res_ty $
    
    ... ... @@ -1071,7 +1071,7 @@ tcDoStmt ctxt (XStmtLR (ApplicativeStmt _ pairs mb_join)) res_ty thing_inside
    1071 1071
                 Nothing -> (, Nothing) <$> tc_app_stmts res_ty
    
    1072 1072
                 Just join_op ->
    
    1073 1073
                   second Just <$>
    
    1074
    -              (tcSyntaxOp DoOrigin join_op [SynRho] res_ty $
    
    1074
    +              (tcSyntaxOp DoStmtOrigin join_op [SynRho] res_ty $
    
    1075 1075
                    \ [rhs_ty] [rhs_mult] -> tcScalingUsage rhs_mult $ tc_app_stmts (mkCheckExpType rhs_ty))
    
    1076 1076
     
    
    1077 1077
             ; return (XStmtLR $ ApplicativeStmt body_ty pairs' mb_join', thing) }
    
    ... ... @@ -1188,7 +1188,7 @@ tcApplicativeStmts ctxt pairs rhs_ty thing_inside
    1188 1188
         goOps _ [] = return []
    
    1189 1189
         goOps t_left ((op,t_i,exp_ty) : ops)
    
    1190 1190
           = do { (_, op')
    
    1191
    -               <- tcSyntaxOp DoOrigin op
    
    1191
    +               <- tcSyntaxOp DoStmtOrigin op
    
    1192 1192
                                  [synKnownType t_left, synKnownType exp_ty] t_i $
    
    1193 1193
                        \ _ _ -> return ()
    
    1194 1194
                ; t_i <- readExpType t_i
    

  • compiler/GHC/Tc/Types/Origin.hs
    ... ... @@ -588,7 +588,7 @@ data CtOrigin
    588 588
                               -- See Note [Inferring the instance context]
    
    589 589
                               -- in GHC.Tc.Deriv.Infer
    
    590 590
       | DefaultOrigin       -- Typechecking a default decl
    
    591
    -  | DoOrigin            -- Arising from a do expression
    
    591
    +  | DoStmtOrigin            -- Arising from a do expression
    
    592 592
       | DoPatOrigin (LPat GhcRn) -- Arising from a failable pattern in
    
    593 593
                                  -- a do expression
    
    594 594
       | MCompOrigin         -- Arising from a monad comprehension
    
    ... ... @@ -746,7 +746,7 @@ exprCtOrigin (HsCase _ _ matches) = matchesCtOrigin matches
    746 746
     exprCtOrigin (HsIf {})           = IfThenElseOrigin
    
    747 747
     exprCtOrigin (HsMultiIf _ rhs)   = lGRHSCtOrigin rhs
    
    748 748
     exprCtOrigin (HsLet _ _ e)       = lexprCtOrigin e
    
    749
    -exprCtOrigin (HsDo {})           = DoOrigin
    
    749
    +exprCtOrigin (HsDo {})           = DoStmtOrigin
    
    750 750
     exprCtOrigin (RecordCon {})      = Shouldn'tHappenOrigin "record construction"
    
    751 751
     exprCtOrigin (RecordUpd {})      = RecordUpdOrigin
    
    752 752
     exprCtOrigin (ExprWithTySig {})  = ExprSigOrigin
    
    ... ... @@ -769,7 +769,7 @@ exprCtOrigin (XExpr (HsRecSelRn f)) = OccurrenceOfRecSel (foExt f)
    769 769
     
    
    770 770
     hsThingCtOrigin :: HsThingRn -> CtOrigin
    
    771 771
     hsThingCtOrigin (OrigExpr e) = exprCtOrigin e
    
    772
    -hsThingCtOrigin (OrigStmt{}) = DoOrigin
    
    772
    +hsThingCtOrigin (OrigStmt{}) = DoStmtOrigin
    
    773 773
     hsThingCtOrigin (OrigPat p) = DoPatOrigin p
    
    774 774
     
    
    775 775
     srcCodeCtxtCtOrigin :: HsExpr GhcRn -> SrcCodeCtxt -> CtOrigin
    
    ... ... @@ -940,7 +940,7 @@ pprCtO (ScOrigin (IsQC {}) _) = text "the head of a quantified constraint"
    940 940
     pprCtO DerivClauseOrigin     = text "the 'deriving' clause of a data type declaration"
    
    941 941
     pprCtO StandAloneDerivOrigin = text "a 'deriving' declaration"
    
    942 942
     pprCtO DefaultOrigin         = text "a 'default' declaration"
    
    943
    -pprCtO DoOrigin              = text "a do statement"
    
    943
    +pprCtO DoStmtOrigin              = text "a do statement"
    
    944 944
     pprCtO MCompOrigin           = text "a statement in a monad comprehension"
    
    945 945
     pprCtO ProcOrigin            = text "a proc expression"
    
    946 946
     pprCtO ArrowCmdOrigin        = text "an arrow command"