projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Breakpoints: get the names of the free variables right
[ghc-hetmet.git]
/
compiler
/
hsSyn
/
HsBinds.lhs
diff --git
a/compiler/hsSyn/HsBinds.lhs
b/compiler/hsSyn/HsBinds.lhs
index
0942703
..
f2da8bf
100644
(file)
--- a/
compiler/hsSyn/HsBinds.lhs
+++ b/
compiler/hsSyn/HsBinds.lhs
@@
-52,7
+52,9
@@
data HsValBinds id -- Value bindings (not implicit parameters)
-- Recursive by default
| ValBindsOut -- After renaming
-- Recursive by default
| ValBindsOut -- After renaming
- [(RecFlag, LHsBinds id)] -- Dependency analysed
+ [(RecFlag, LHsBinds id)] -- Dependency analysed, later bindings
+ -- in the list may depend on earlier
+ -- ones.
[LSig Name]
type LHsBinds id = Bag (LHsBind id)
[LSig Name]
type LHsBinds id = Bag (LHsBind id)
@@
-93,7
+95,7
@@
data HsBind id
-- Before renaming, and after typechecking,
-- the field is unused; it's just an error thunk
-- Before renaming, and after typechecking,
-- the field is unused; it's just an error thunk
- fun_tick :: Maybe Int -- This is the (optional) module-local tick number.
+ fun_tick :: Maybe (Int,[id]) -- This is the (optional) module-local tick number.
}
| PatBind { -- The pattern is never a simple variable;
}
| PatBind { -- The pattern is never a simple variable;
@@
-112,7
+114,7
@@
data HsBind id
| AbsBinds { -- Binds abstraction; TRANSLATION
abs_tvs :: [TyVar],
abs_dicts :: [DictId],
| AbsBinds { -- Binds abstraction; TRANSLATION
abs_tvs :: [TyVar],
abs_dicts :: [DictId],
- abs_exports :: [([TyVar], id, id, [Prag])], -- (tvs, poly_id, mono_id, prags)
+ abs_exports :: [([TyVar], id, id, [LPrag])], -- (tvs, poly_id, mono_id, prags)
abs_binds :: LHsBinds id -- The dictionary bindings and typechecked user bindings
-- mixed up together; you can tell the dict bindings because
-- they are all VarBinds
abs_binds :: LHsBinds id -- The dictionary bindings and typechecked user bindings
-- mixed up together; you can tell the dict bindings because
-- they are all VarBinds
@@
-414,6
+416,7
@@
type LFixitySig name = Located (FixitySig name)
data FixitySig name = FixitySig (Located name) Fixity
-- A Prag conveys pragmas from the type checker to the desugarer
data FixitySig name = FixitySig (Located name) Fixity
-- A Prag conveys pragmas from the type checker to the desugarer
+type LPrag = Located Prag
data Prag
= InlinePrag
InlineSpec
data Prag
= InlinePrag
InlineSpec
@@
-422,13
+425,15
@@
data Prag
(HsExpr Id) -- An expression, of the given specialised type, which
PostTcType -- specialises the polymorphic function
[Id] -- Dicts mentioned free in the expression
(HsExpr Id) -- An expression, of the given specialised type, which
PostTcType -- specialises the polymorphic function
[Id] -- Dicts mentioned free in the expression
+ -- Apr07: I think this is pretty useless
+ -- see Note [Const rule dicts] in DsBinds
InlineSpec -- Inlining spec for the specialised function
isInlinePrag (InlinePrag _) = True
isInlinePrag prag = False
InlineSpec -- Inlining spec for the specialised function
isInlinePrag (InlinePrag _) = True
isInlinePrag prag = False
-isSpecPrag (SpecPrag _ _ _ _) = True
-isSpecPrag prag = False
+isSpecPrag (SpecPrag {}) = True
+isSpecPrag prag = False
\end{code}
\begin{code}
\end{code}
\begin{code}
@@
-537,7
+542,7
@@
pprVarSig var ty = sep [ppr var <+> dcolon, nest 2 (ppr ty)]
pprSpec :: (Outputable id, Outputable ty) => id -> ty -> InlineSpec -> SDoc
pprSpec var ty inl = sep [ptext SLIT("SPECIALIZE") <+> ppr inl <+> pprVarSig var ty]
pprSpec :: (Outputable id, Outputable ty) => id -> ty -> InlineSpec -> SDoc
pprSpec var ty inl = sep [ptext SLIT("SPECIALIZE") <+> ppr inl <+> pprVarSig var ty]
-pprPrag :: Outputable id => id -> Prag -> SDoc
-pprPrag var (InlinePrag inl) = ppr inl <+> ppr var
-pprPrag var (SpecPrag expr ty _ inl) = pprSpec var ty inl
+pprPrag :: Outputable id => id -> LPrag -> SDoc
+pprPrag var (L _ (InlinePrag inl)) = ppr inl <+> ppr var
+pprPrag var (L _ (SpecPrag expr ty _ inl)) = pprSpec var ty inl
\end{code}
\end{code}