Changeset 12366 for src/Pugs/Eval

Show
Ignore:
Timestamp:
08/17/06 13:15:43 (2 years ago)
Author:
audreyt
Message:

* Eval.Var: improve the errmsg a bit by pretending it's

always a multi match failure (which it is.)

Files:
1 modified

Legend:

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

    r12348 r12366  
    159159        -> Eval (Either FindSubFailure VCode) 
    160160findSub var invs args 
    161     | Nothing <- invs = findBuiltinSub NoSuchSub var 
     161    | Nothing <- invs = findBuiltinSub NoMatchingMulti var 
    162162    | not (isQualifiedVar var) = case unwrap inv of 
    163163        Val inv@VV{}     -> withExternalCall callMethodVV inv  
     
    170170        findSuperSub pkg var' 
    171171    | otherwise = do 
    172         findBuiltinSub NoSuchSub var 
     172        findBuiltinSub NoMatchingMulti var 
    173173    where 
    174174    inv = fromJust invs 
     
    567567findSyms :: Var -> Eval [(Var, Val)] 
    568568findSyms var = do 
    569         runMaybeT (findLexical `mplus` findPackage `mplus` findGlobal) >>= \ret -> 
    570             case ret of 
    571                 Nothing -> return [] 
    572                 Just xs -> return xs 
     569    runMaybeT (findLexical `mplus` findPackage `mplus` findGlobal) 
     570        >>= maybe (return []) return 
    573571    where 
    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 
    599597         
    600598arityMatch :: VCode -> Int -> Int -> Maybe VCode