diff options
author | Edsko de Vries <edsko@well-typed.com> | 2014-01-08 15:48:32 +0000 |
---|---|---|
committer | Edsko de Vries <edsko@well-typed.com> | 2014-01-08 17:04:04 +0000 |
commit | a93f85718cdfd36239095365f7b5efc7f2ecc4de (patch) | |
tree | 031697f56c11d147c34cc54b7d52bd21070580ef /compiler/rename/RnSplice.lhs | |
parent | ec4af3fbcd47ca3af1727e70fa20e7cb8db0fb41 (diff) | |
download | haskell-a93f85718cdfd36239095365f7b5efc7f2ecc4de.tar.gz |
Extend runRnSpliceHook to decls and patterns
Diffstat (limited to 'compiler/rename/RnSplice.lhs')
-rw-r--r-- | compiler/rename/RnSplice.lhs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/compiler/rename/RnSplice.lhs b/compiler/rename/RnSplice.lhs index bc47fe8176..e0614d4248 100644 --- a/compiler/rename/RnSplice.lhs +++ b/compiler/rename/RnSplice.lhs @@ -137,7 +137,7 @@ rnSpliceExpr is_typed splice = (PendingRnExpSplice rn_splice, HsSpliceE is_typed rn_splice) run_expr_splice :: HsSplice Name -> RnM (HsExpr Name, FreeVars) - run_expr_splice rn_splice + run_expr_splice rn_splice@(HsSplice _ expr') | is_typed -- Run it later, in the type checker = do { -- Ugh! See Note [Splices] above lcl_rdr <- getLocalRdrEnv @@ -149,7 +149,7 @@ rnSpliceExpr is_typed splice ; return (HsSpliceE is_typed rn_splice, lcl_names `plusFV` gbl_names) } | otherwise -- Run it here - = do { HsSplice _ expr <- getHooked runRnSpliceHook return >>= ($ rn_splice) + = do { expr <- getHooked runRnSpliceHook return >>= ($ expr') -- The splice must have type ExpQ ; meta_exp_ty <- tcMetaTy expQTyConName @@ -174,8 +174,8 @@ rnSpliceType splice k pend_type_splice rn_splice = (PendingRnTypeSplice rn_splice, HsSpliceTy rn_splice k) - run_type_splice rn_splice - = do { HsSplice _ expr <- getHooked runRnSpliceHook return >>= ($ rn_splice) + run_type_splice (HsSplice _ expr') + = do { expr <- getHooked runRnSpliceHook return >>= ($ expr') ; meta_exp_ty <- tcMetaTy typeQTyConName @@ -195,15 +195,16 @@ rnSpliceType splice k ---------------------- rnSplicePat :: HsSplice RdrName -> RnM (Pat Name, FreeVars) --- TODO: Run runHsSpliceHook (see runSpliceExpr) rnSplicePat splice = rnSpliceGen False run_pat_splice pend_pat_splice splice where pend_pat_splice rn_splice = (PendingRnPatSplice rn_splice, SplicePat rn_splice) - run_pat_splice (HsSplice _ expr) - = do { meta_exp_ty <- tcMetaTy patQTyConName + run_pat_splice (HsSplice _ expr') + = do { expr <- getHooked runRnSpliceHook return >>= ($ expr') + + ; meta_exp_ty <- tcMetaTy patQTyConName -- Typecheck the expression ; zonked_q_expr <- tcTopSpliceExpr False $ @@ -232,10 +233,11 @@ rnSpliceDecl (SpliceDecl (L loc splice) flg) \begin{code} rnTopSpliceDecls :: HsSplice RdrName -> RnM ([LHsDecl RdrName], FreeVars) -- Declaration splice at the very top level of the module --- TODO: Run runHsSpliceHook (see runSpliceExpr) -rnTopSpliceDecls (HsSplice _ expr) - = do { (expr', fvs) <- setStage (Splice False) $ - rnLExpr expr +rnTopSpliceDecls (HsSplice _ expr'') + = do { (expr, fvs) <- setStage (Splice False) $ + rnLExpr expr'' + + ; expr' <- getHooked runRnSpliceHook return >>= ($ expr) ; list_q <- tcMetaTy decsQTyConName -- Q [Dec] ; zonked_q_expr <- tcTopSpliceExpr False (tcMonoExpr expr' list_q) |