Add a Calling info frame

This commit is contained in:
John Wiegley 2018-05-06 00:35:21 -07:00
parent 888944ebff
commit 11a89d2b40
3 changed files with 10 additions and 3 deletions

View file

@ -99,6 +99,7 @@ type MonadNixEval e v t m =
data EvalFrame m v
= EvaluatingExpr (Scopes m v) NExprLoc
| ForcingExpr (Scopes m v) NExprLoc
| Calling String SrcSpan
deriving (Show, Typeable)
instance (Typeable m, Typeable v) => Exception (EvalFrame m v)

View file

@ -243,14 +243,15 @@ instance MonadNix e m => MonadEval (NValue m) m where
evalError = throwError
infixl 1 `callFunc`
callFunc :: MonadNix e m => NValue m -> m (NValue m) -> m (NValue m)
callFunc :: forall e m. (MonadNix e m, Typeable m)
=> NValue m -> m (NValue m) -> m (NValue m)
callFunc fun arg = case fun of
NVClosure params f -> do
traceM $ "callFunc:NVFunction taking " ++ show params
f arg
NVBuiltin name f -> do
traceM $ "callFunc:NVBuiltin " ++ name
f arg
span <- currentPos
withFrame Info (Calling @m @(NThunk m) name span) $ f arg
s@(NVSet m _) | Just f <- M.lookup "__functor" m -> do
traceM "callFunc:__functor"
force f $ (`callFunc` pure s) >=> (`callFunc` arg)

View file

@ -98,6 +98,11 @@ renderEvalFrame level f = do
fmap (:[]) $ renderLocation ann
=<< renderExpr level "While forcing thunk from"
"Forcing thunk" e
Calling name ann ->
fmap (:[]) $ renderLocation ann $
text "While calling builtins." <> text name
_ -> pure []
renderExpr :: (MonadReader e m, Has e Options, MonadFile m)