mirror of https://github.com/voidlizard/hbs2
suckless: recursive imports, primitive import loop detection
This commit is contained in:
parent
46b02d458f
commit
29c59994e1
|
@ -675,29 +675,26 @@ eval' dict0 syn' = handle (handleForm syn') $ do
|
||||||
_ -> throwIO (RuntimeError (mkStr @c $ show $ pretty importsName <> "misteriously disappeared"))
|
_ -> throwIO (RuntimeError (mkStr @c $ show $ pretty importsName <> "misteriously disappeared"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
seen <- atomically $ stateTVar imp_ (\e -> (HM.lookup (mkId fn) e, HM.insert (mkId fn) mempty e))
|
seen <- atomically $ stateTVar imp_ (\e -> (HM.lookup (mkId fn) e, HM.insert (mkId fn) mempty e))
|
||||||
|
|
||||||
-- liftIO $ print $ pretty "import" <+> pretty fn
|
-- liftIO $ print $ pretty "import" <+> pretty fn
|
||||||
|
|
||||||
unless (isNothing seen) $ throwIO alreadyError
|
-- TODO: maybe-should-be-error
|
||||||
|
case seen of
|
||||||
|
Just{} -> pure nil
|
||||||
|
Nothing{} -> do
|
||||||
|
|
||||||
-- FIXME: fancy-error-handling
|
-- FIXME: fancy-error-handling
|
||||||
syn <- liftIO (TIO.readFile fn) <&> parseTop >>= either(error.show) pure
|
syn <- liftIO (TIO.readFile fn) <&> parseTop >>= either(error.show) pure
|
||||||
|
|
||||||
let decls = [ fixContext d
|
let decls = [ fixContext d
|
||||||
| d@(ListVal (SymbolVal what : rest)) <- syn
|
| d@(ListVal (SymbolVal what : rest)) <- syn
|
||||||
, what `HS.member` importDecls
|
, what `HS.member` importDecls
|
||||||
]
|
]
|
||||||
|
|
||||||
-- liftIO $ mapM_ (print . pretty) decls
|
void $ evalTop decls
|
||||||
|
|
||||||
evalTop decls
|
pure nil
|
||||||
|
|
||||||
pure nil
|
|
||||||
|
|
||||||
-- error $ show $ "fucked!" <+> pretty fn
|
|
||||||
--
|
|
||||||
|
|
||||||
ListVal [SymbolVal "define", SymbolVal what, e] -> do
|
ListVal [SymbolVal "define", SymbolVal what, e] -> do
|
||||||
ev <- eval e
|
ev <- eval e
|
||||||
|
|
Loading…
Reference in New Issue