suckless: recursive imports, primitive import loop detection

This commit is contained in:
voidlizard 2025-02-04 09:09:43 +03:00
parent 46b02d458f
commit 29c59994e1
1 changed files with 12 additions and 15 deletions

View File

@ -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