@@ -873,11 +873,65 @@ data PTerm = PQuote Raw -- ^ Inclusion of a core term into the high-level langua
873873 deriving (Eq, Data, Typeable)
874874
875875data PAltType = ExactlyOne Bool -- ^ flag sets whether delay is allowed
876− | FirstSuccess
876+ | FirstSuccess
877877 deriving (Eq, Data, Typeable)
878878
879+-- | Transform the FCs in a PTerm. The first function transforms the
880+-- general-purpose FCs, and the second transforms those that are used
881+-- for semantic source highlighting, so they can be treated specially.
882+mapPTermFC :: (FC -> FC) -> (FC -> FC) -> PTerm -> PTerm
883+mapPTermFC f g (PQuote q) = PQuote q
884+mapPTermFC f g (PRef fc n) = PRef (g fc) n
885+mapPTermFC f g (PInferRef fc n) = PInferRef (g fc) n
886+mapPTermFC f g (PPatvar fc n) = PPatvar (g fc) n
887+mapPTermFC f g (PLam fc n fc' t1 t2) = PLam (f fc) n (g fc') (mapPTermFC f g t1) (mapPTermFC f g t2)
888+mapPTermFC f g (PPi plic n fc t1 t2) = PPi plic n (g fc) (mapPTermFC f g t1) (mapPTermFC f g t2)
889+mapPTermFC f g (PLet fc n fc' t1 t2 t3) = PLet (f fc) n (g fc') (mapPTermFC f g t1) (mapPTermFC f g t2) (mapPTermFC f g t3)
890+mapPTermFC f g (PTyped t1 t2) = PTyped (mapPTermFC f g t1) (mapPTermFC f g t2)
891+mapPTermFC f g (PApp fc t args) = PApp (f fc) (mapPTermFC f g t) (map (fmap (mapPTermFC f g)) args)
892+mapPTermFC f g (PAppImpl t1 impls) = PAppImpl (mapPTermFC f g t1) impls
893+mapPTermFC f g (PAppBind fc t args) = PAppBind (f fc) (mapPTermFC f g t) (map (fmap (mapPTermFC f g)) args)
894+mapPTermFC f g (PMatchApp fc n) = PMatchApp (f fc) n
895+mapPTermFC f g (PIfThenElse fc t1 t2 t3) = PIfThenElse (f fc) (mapPTermFC f g t1) (mapPTermFC f g t2) (mapPTermFC f g t3)
896+mapPTermFC f g (PCase fc t cases) = PCase (f fc) (mapPTermFC f g t) (map (\(l,r) -> (mapPTermFC f g l, mapPTermFC f g r)) cases)
897+mapPTermFC f g (PTrue fc info) = PTrue (f fc) info
898+mapPTermFC f g (PResolveTC fc) = PResolveTC (f fc)
899+mapPTermFC f g (PRewrite fc t1 t2 t3) = PRewrite (f fc) (mapPTermFC f g t1) (mapPTermFC f g t2) (fmap (mapPTermFC f g) t3)
900+mapPTermFC f g (PPair fc info t1 t2) = PPair (f fc) info (mapPTermFC f g t1) (mapPTermFC f g t2)
901+mapPTermFC f g (PDPair fc info t1 t2 t3) = PDPair (f fc) info (mapPTermFC f g t1) (mapPTermFC f g t2) (mapPTermFC f g t3)
902+mapPTermFC f g (PAs fc n t) = PAs (f fc) n (mapPTermFC f g t)
903+mapPTermFC f g (PAlternative ty ts) = PAlternative ty (map (mapPTermFC f g) ts)
904+mapPTermFC f g (PHidden t) = PHidden (mapPTermFC f g t)
905+mapPTermFC f g (PType fc) = PType (f fc)
906+mapPTermFC f g (PUniverse u) = PUniverse u
907+mapPTermFC f g (PGoal fc t1 n t2) = PGoal (f fc) (mapPTermFC f g t1) n (mapPTermFC f g t2)
908+mapPTermFC f g (PConstant fc c) = PConstant (f fc) c
909+mapPTermFC f g Placeholder = Placeholder
910+mapPTermFC f g (PDoBlock dos) = PDoBlock (map mapPDoFC dos)
911+ where mapPDoFC (DoExp fc t) = DoExp (f fc) (mapPTermFC f g t)
912+ mapPDoFC (DoBind fc n nfc t) = DoBind (f fc) n (g nfc) (mapPTermFC f g t)
913+ mapPDoFC (DoBindP fc t1 t2 alts) =
914+ DoBindP (f fc) (mapPTermFC f g t1) (mapPTermFC f g t2) (map (\(l,r)-> (mapPTermFC f g l, mapPTermFC f g r)) alts)
915+ mapPDoFC (DoLet fc n nfc t1 t2) = DoLet (f fc) n (g nfc) (mapPTermFC f g t1) (mapPTermFC f g t2)
916+ mapPDoFC (DoLetP fc t1 t2) = DoLetP (f fc) (mapPTermFC f g t1) (mapPTermFC f g t2)
917+mapPTermFC f g (PIdiom fc t) = PIdiom (f fc) (mapPTermFC f g t)
918+mapPTermFC f g (PReturn fc) = PReturn (f fc)
919+mapPTermFC f g (PMetavar fc n) = PMetavar (g fc) n
920+mapPTermFC f g (PProof tacs) = PProof (map (fmap (mapPTermFC f g)) tacs)
921+mapPTermFC f g (PTactics tacs) = PTactics (map (fmap (mapPTermFC f g)) tacs)
922+mapPTermFC f g (PElabError err) = PElabError err
923+mapPTermFC f g PImpossible = PImpossible
924+mapPTermFC f g (PCoerced t) = PCoerced (mapPTermFC f g t)
925+mapPTermFC f g (PDisamb msg t) = PDisamb msg (mapPTermFC f g t)
926+mapPTermFC f g (PUnifyLog t) = PUnifyLog (mapPTermFC f g t)
927+mapPTermFC f g (PNoImplicits t) = PNoImplicits (mapPTermFC f g t)
928+mapPTermFC f g (PQuasiquote t1 t2) = PQuasiquote (mapPTermFC f g t1) (fmap (mapPTermFC f g) t2)
929+mapPTermFC f g (PUnquote t) = PUnquote (mapPTermFC f g t)
930+mapPTermFC f g (PRunElab fc tm ns) = PRunElab (f fc) (mapPTermFC f g tm) ns
931+mapPTermFC f g (PQuoteName n) = PQuoteName n
932+
879933{-!
880−deriving instance Binary PTerm
934+dg instance Binary PTerm
881935deriving instance NFData PTerm
882936!-}
883937
@@ -968,6 +1022,14 @@ instance Sized a => Sized (PTactic' a) where
9681022 size Skip = 1
9691023 size (TFail ts) = 1 + size ts
9701024 size SourceFC = 1
1025+ size DoUnify = 1
1026+ size (CaseTac x) = 1 + size x
1027+ size (Equiv t) = 1 + size t
1028+ size (Claim x y) = 1 + size x + size y
1029+ size Unfocus = 1
1030+ size (MatchRefine x) = 1 + size x
1031+ size (LetTacTy x y z) = 1 + size x + size y + size z
1032+ size TCInstance = 1
9711033
9721034type PTactic = PTactic' PTerm
9731035
@@ -1092,6 +1154,8 @@ highestFC (PNoImplicits tm) = highestFC tm
10921154highestFC (PQuasiquote _ _) = Nothing
10931155highestFC (PUnquote tm) = highestFC tm
10941156highestFC (PQuoteName _) = Nothing
1157+highestFC (PRunElab fc _ _) = Just fc
1158+highestFC (PAppImpl t _) = highestFC t
10951159
10961160-- Type class data
10971161
@@ -1429,6 +1493,7 @@ consoleDecorate ist (AnnTextFmt fmt) = Idris.Colours.colourise (colour fmt)
14291493consoleDecorate ist (AnnTerm _ _) = id
14301494consoleDecorate ist (AnnSearchResult _) = id
14311495consoleDecorate ist (AnnErr _) = id
1496+consoleDecorate ist (AnnNamespace _ _) = id
14321497
14331498isPostulateName :: Name -> IState -> Bool
14341499isPostulateName n ist = S.member n (idris_postulates ist)