move idris version to orig and newt version to src.
Development is being done on the newt version now.
This commit is contained in:
54
orig/Lib/TopContext.idr
Normal file
54
orig/Lib/TopContext.idr
Normal file
@@ -0,0 +1,54 @@
|
||||
module Lib.TopContext
|
||||
|
||||
import Data.IORef
|
||||
import Data.SortedMap
|
||||
import Data.String
|
||||
import Lib.Types
|
||||
|
||||
-- I want unique ids, to be able to lookup, update, and a Ref so
|
||||
-- I don't need good Context discipline. (I seem to have made mistakes already.)
|
||||
|
||||
export
|
||||
lookup : QName -> TopContext -> Maybe TopEntry
|
||||
lookup nm top = lookup nm top.defs
|
||||
|
||||
-- TODO - look at imported namespaces, and either have a map of imported names or search imported namespaces..
|
||||
export
|
||||
lookupRaw : String -> TopContext -> Maybe TopEntry
|
||||
lookupRaw raw top = go $ toList top.defs
|
||||
where
|
||||
go : List (QName, TopEntry) -> Maybe TopEntry
|
||||
go Nil = Nothing
|
||||
go (((QN ns nm), entry) :: rest) = if nm == raw then Just entry else go rest
|
||||
|
||||
-- Maybe pretty print?
|
||||
export
|
||||
covering
|
||||
Show TopContext where
|
||||
show (MkTop defs metas _ _ _ _) = "\nContext:\n [\{ joinBy "\n" $ map (show . snd) $ toList defs}]"
|
||||
|
||||
public export
|
||||
empty : HasIO m => m TopContext
|
||||
empty = pure $ MkTop empty !(newIORef (MC [] 0 CheckAll)) False !(newIORef []) [] empty
|
||||
|
||||
public export
|
||||
setDef : QName -> FC -> Tm -> Def -> M ()
|
||||
setDef name fc ty def = do
|
||||
top <- get
|
||||
let Nothing = lookup name top.defs
|
||||
| Just (MkEntry fc' nm' ty' def') => error fc "\{name} is already defined at \{show fc'}"
|
||||
put $ { defs $= (insert name (MkEntry fc name ty def)) } top
|
||||
|
||||
public export
|
||||
updateDef : QName -> FC -> Tm -> Def -> M ()
|
||||
updateDef name fc ty def = do
|
||||
top <- get
|
||||
let Just (MkEntry fc' nm' ty' def') = lookup name top.defs
|
||||
| Nothing => error fc "\{name} not declared"
|
||||
put $ { defs $= (insert name (MkEntry fc' name ty def)) } top
|
||||
|
||||
public export
|
||||
addError : Error -> M ()
|
||||
addError err = do
|
||||
top <- get
|
||||
modifyIORef top.errors (err ::)
|
||||
Reference in New Issue
Block a user