Changeset 16436

Show
Ignore:
Timestamp:
05/18/07 22:03:36 (18 months ago)
Author:
audreyt
Message:

* Pugs.Parser: This error is finally a compile-time one, instead

of a runtime one:

Global symbol "$foo" requires explicit package name

As a result, a lot of ext/ code broke -- but they were really
broken already. Fixes welcome!

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Parser.hs

    r16416 r16436  
    20942094 
    20952095            case Map.lookup var knownVars of 
    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 } 
    21042114 
    21052115ruleVar :: RuleParser Exp