Changeset 8705 for src/Pugs/Eval/Var.hs

Show
Ignore:
Timestamp:
01/16/06 18:57:28 (3 years ago)
Author:
audreyt
Message:

* Support for $+var as shorthand for $CALLER::var.
* CALLER now only sees lexical variables in the outer dynamic

scope declared with the "env" scope specifier.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval/Var.hs

    r8267 r8705  
    3838        case maybeCaller of 
    3939            Just env -> local (const env) $ do 
    40                 findVarRef (sig ++ name') 
     40                rv <- findVarRef (sig ++ name') 
     41                return rv 
    4142            Nothing -> retError "cannot access CALLER:: in top level" name 
    4243    | Just (package, name') <- breakOnGlue "::" name 
     
    4748                findVarRef (sig ++ name') 
    4849            Nothing -> retError "cannot access OUTER:: in top level" name 
     50    | (sig:'+':name') <- name = findVarRef (sig:("CALLER::"++name')) 
    4951    | (_:'?':_) <- name = do 
    5052        rv  <- getMagical name 
     
    489491 
    490492isQualified :: String -> Maybe (String, String) 
    491 isQualified name | Just (post, pre) <- breakOnGlue "::" (reverse name) = 
     493isQualified name 
     494    | Just (post, pre) <- breakOnGlue "::" (reverse name) = 
    492495    let (sigil, pkg) = span (not . isAlphaNum) preName 
    493496        name'       = possiblyFixOperatorName (sigil ++ postName) 
    494497        preName     = reverse pre 
    495498        postName    = reverse post 
    496     in Just (pkg, name') 
     499    in case takeWhile isAlphaNum pkg of 
     500        "OUTER"     -> Nothing 
     501        "CALLER"    -> Nothing 
     502        _           -> Just (pkg, name') 
    497503isQualified _ = Nothing 
    498504 
     
    500506toQualified name@(_:'*':_) = return name 
    501507toQualified name@(_:'?':_) = return name 
     508toQualified name@(_:'+':_) = return name 
    502509toQualified name@(_:"!") = return name 
    503510toQualified name@(_:"/") = return name