Changeset 5168
- Timestamp:
- 07/04/05 00:35:11 (4 years ago)
- svk:copy_cache_prev:
- 6965
- Location:
- src/Pugs
- Files:
-
- 2 modified
-
Compile.hs (modified) (2 diffs)
-
Eval/Var.hs (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Compile.hs
r5115 r5168 16 16 import Pugs.Types 17 17 import Pugs.Eval 18 import Pugs.Eval.Var 18 19 import Emit.PIR 19 20 import Text.PrettyPrint … … 428 429 varText x = error $ "invalid name: " ++ x 429 430 430 packageOf :: String -> String431 packageOf name = case isQualified name of432 Just (pkg, _) -> pkg433 _ -> "main"434 435 qualify :: String -> String436 qualify name = case isQualified name of437 Just _ -> name438 _ -> let (sigil, name') = span (not . isAlphaNum) name439 in sigil ++ "main::" ++ name'440 441 isQualified :: String -> Maybe (String, String)442 isQualified name | Just (post, pre) <- breakOnGlue "::" (reverse name) =443 let (sigil, pkg) = span (not . isAlphaNum) preName444 name' = possiblyFixOperatorName (sigil ++ postName)445 preName = reverse pre446 postName = reverse post447 in Just (pkg, name')448 isQualified _ = Nothing449 450 431 initTEnv :: Eval TEnv 451 432 initTEnv = do -
src/Pugs/Eval/Var.hs
r5023 r5168 5 5 findVar, findVarRef, 6 6 evalVar, findSub, evalExpType, 7 isQualified, packageOf, qualify, 8 toPackage, toQualified, 7 9 ) where 8 10 import qualified Data.Map as Map … … 71 73 doFindVarRef name = do 72 74 callCC $ \foundIt -> do 73 lexSym <- fmap (findSym name . envLexical) ask75 lexSym <- fmap (findSym name . envLexical) ask 74 76 when (isJust lexSym) $ foundIt lexSym 75 glob <- liftSTM . readTVar . envGlobal =<< ask 76 let globSym = findSym name glob 77 glob <- liftSTM . readTVar . envGlobal =<< ask 78 name' <- toQualified name 79 -- XXX - find qualified name here 80 let globSym = findSym name' glob 77 81 when (isJust globSym) $ foundIt globSym 78 82 let globSym = findSym (toGlobal name) glob … … 398 402 = Nothing 399 403 404 breakSigil :: String -> (String, String) 405 breakSigil = break (\x -> isAlpha x || x == '_') 406 400 407 toPackage :: String -> String -> String 401 408 toPackage pkg name 402 | (sigil, identifier) <- break (\x -> isAlpha x || x == '_')name409 | (sigil, identifier) <- breakSigil name 403 410 , last sigil /= '*' 404 411 = concat [sigil, pkg, "::", identifier] 405 412 | otherwise = name 406 413 414 packageOf :: String -> String 415 packageOf name = case isQualified name of 416 Just (pkg, _) -> pkg 417 _ -> "main" 418 419 qualify :: String -> String 420 qualify name = case isQualified name of 421 Just _ -> name 422 _ -> let (sigil, name') = breakSigil name 423 in sigil ++ "main::" ++ name' 424 425 isQualified :: String -> Maybe (String, String) 426 isQualified name | Just (post, pre) <- breakOnGlue "::" (reverse name) = 427 let (sigil, pkg) = span (not . isAlphaNum) preName 428 name' = possiblyFixOperatorName (sigil ++ postName) 429 preName = reverse pre 430 postName = reverse post 431 in Just (pkg, name') 432 isQualified _ = Nothing 433 434 toQualified :: String -> Eval String 435 toQualified name@(_:'*':_) = return name 436 toQualified name@(_:'?':_) = return name 437 toQualified name@(_:"!") = return name 438 toQualified name@(_:"/") = return name 439 toQualified name = do 440 case isQualified name of 441 Just _ -> return name 442 _ -> do 443 pkg <- asks envPackage 444 return $ toPackage pkg name
