Add a Calling info frame
This commit is contained in:
parent
7c0ba49ab1
commit
6b34ea3ee5
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue