| 574 | | findLexical :: MaybeT Eval [(Var, Val)] |
| 575 | | findLexical = do |
| 576 | | lex <- lift $ asks envLexical |
| 577 | | padSym lex var |
| 578 | | |
| 579 | | findPackage :: MaybeT Eval [(Var, Val)] |
| 580 | | findPackage = do |
| 581 | | glob <- lift $ askGlobal |
| 582 | | pkg <- lift $ asks envPackage |
| 583 | | padSym glob var `mplus` padSym glob (toPackage pkg var) |
| 584 | | |
| 585 | | findGlobal :: MaybeT Eval [(Var, Val)] |
| 586 | | findGlobal = do |
| 587 | | glob <- lift $ askGlobal |
| 588 | | padSym glob (toGlobalVar var) |
| 589 | | |
| 590 | | padSym :: Pad -> Var -> MaybeT Eval [(Var, Val)] |
| 591 | | padSym pad var = do |
| 592 | | case lookupPad var pad of |
| 593 | | Just tvar -> lift $ do |
| 594 | | refs <- liftSTM $ mapM readTVar tvar |
| 595 | | forM refs $ \ref -> do |
| 596 | | val <- readRef ref |
| 597 | | return (var, val) |
| 598 | | Nothing -> mzero |
| | 572 | findLexical :: MaybeT Eval [(Var, Val)] |
| | 573 | findLexical = do |
| | 574 | lex <- lift $ asks envLexical |
| | 575 | padSym lex var{ v_package = emptyPkg } |
| | 576 | |
| | 577 | findPackage :: MaybeT Eval [(Var, Val)] |
| | 578 | findPackage = do |
| | 579 | glob <- lift $ askGlobal |
| | 580 | pkg <- lift $ asks envPackage |
| | 581 | padSym glob var `mplus` padSym glob (toPackage pkg var) |
| | 582 | |
| | 583 | findGlobal :: MaybeT Eval [(Var, Val)] |
| | 584 | findGlobal = do |
| | 585 | glob <- lift $ askGlobal |
| | 586 | padSym glob (toGlobalVar var) |
| | 587 | |
| | 588 | padSym :: Pad -> Var -> MaybeT Eval [(Var, Val)] |
| | 589 | padSym pad var = do |
| | 590 | case lookupPad var pad of |
| | 591 | Just tvar -> lift $ do |
| | 592 | refs <- liftSTM $ mapM readTVar tvar |
| | 593 | forM refs $ \ref -> do |
| | 594 | val <- readRef ref |
| | 595 | return (var, val) |
| | 596 | Nothing -> mzero |