| 2096 | | Just mpad -> unless (Just mpad == compPad) $ do |
| 2097 | | let outerPads = takeWhile (/= mpad) [ pc | PCompiling pc <- lexPads ] |
| 2098 | | markPad vars pad = Map.insertWith' Set.union pad (Set.singleton var) vars |
| 2099 | | -- traceM $ "Adding: " ++ show (var, outerPads) |
| 2100 | | put state{ s_outerVars = foldl' markPad outerVars outerPads } |
| 2101 | | _ -> put state{ s_freeVars = Set.insert (var, lexPads) freeVars } |
| 2102 | | |
| 2103 | | return (makeVar name) |
| | 2096 | Just mpad -> do |
| | 2097 | unless (Just mpad == compPad) $ do |
| | 2098 | let outerPads = takeWhile (/= mpad) [ pc | PCompiling pc <- lexPads ] |
| | 2099 | markPad vars pad = Map.insertWith' Set.union pad (Set.singleton var) vars |
| | 2100 | -- traceM $ "Adding: " ++ show (var, outerPads) |
| | 2101 | put state{ s_outerVars = foldl' markPad outerVars outerPads } |
| | 2102 | return (makeVar name) |
| | 2103 | _ -> do |
| | 2104 | -- If the variable is already defined as global, resolve it as such here. |
| | 2105 | foundInGlobal <- return $! unsafePerformSTM $! do |
| | 2106 | globPad <- readMPad (envGlobal env) |
| | 2107 | return $ isJust (lookupPad (toGlobalVar var) globPad) |
| | 2108 | when (not foundInGlobal) $ do |
| | 2109 | pos <- getPosition |
| | 2110 | when (sourceName pos /= "-e") $ do |
| | 2111 | fail $ "Global symbol \"" ++ show var ++ "\" requires explicit package name" |
| | 2112 | return (Var $ toGlobalVar var) |
| | 2113 | -- put state{ s_freeVars = Set.insert (var, lexPads) freeVars } |