Changeset 12424 for src/Pugs/Eval

Show
Ignore:
Timestamp:
08/18/06 20:49:06 (2 years ago)
Author:
audreyt
Message:

* Fix the regression on invoking OUTER subs held in

non-& references.

Files:
1 modified

Legend:

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

    r12382 r12424  
    396396                { subName     = buf 
    397397                , subType     = SubPrim 
    398                 , subAssoc    = "spre" 
     398                , subAssoc    = ANil 
    399399                , subParams   = makeParams $ 
    400400                    if any isLValue (subParams code) 
     
    412412 
    413413metaVar :: Pkg -> Var 
    414 -- metaVar = MkVar SType TNone globalPkg CNone . cast 
     414-- metaVar = MkVar SType TNil globalPkg CNil . cast 
    415415metaVar pkg = cast (':':'*':cast pkg) 
    416416    {- 
     
    419419    , v_twigil  = TGlobal 
    420420    , v_package = emptyPkg 
    421     , v_categ   = CNone 
     421    , v_categ   = CNil 
    422422    , v_name    = cast pkg 
    423423    } 
     
    587587 
    588588findSyms :: Var -> Eval [(Var, Val)] 
     589findSyms var 
     590    | Just var' <- dropVarPkg (__"OUTER") var = do 
     591        maybeOuter <- asks envOuter 
     592        case maybeOuter of 
     593            Just env -> local (const env) $ findSyms var' 
     594            Nothing  -> return [] 
    589595findSyms var = do 
    590596    runMaybeT findAll >>= maybe (return []) return 
     
    635641arityMatch :: VCode -> Int -> Int -> Maybe VCode 
    636642arityMatch sub@MkCode{ subAssoc = assoc, subParams = prms } argLen argSlurpLen 
    637     | assoc == "list" || assoc == "chain" 
    638     = Just sub 
     643    | A_list <- assoc = Just sub 
     644    | A_chain <- assoc = Just sub 
    639645    | isNothing $ find (not . isSlurpy) prms -- XXX - what about empty ones? 
    640     , assoc == "pre" 
    641646    , slurpLen <- length $ filter (\p -> isSlurpy p && v_sigil (paramName p) == SScalar) prms 
    642647    , hasArray <- isJust $ find (\p -> isSlurpy p && v_sigil (paramName p) /= SScalar) prms 
     
    660665 
    661666toQualified :: Var -> Eval Var 
    662 toQualified var 
    663     | TNone /= v_twigil var     = return var 
    664     | emptyPkg /= v_package var = return var 
    665     | otherwise                 = do 
    666         pkg <- asks envPackage 
    667         return var{ v_package = pkg } 
     667toQualified var@MkVar{ v_twigil = TNil, v_package = pkg } 
     668    | pkg == emptyPkg = do 
     669        currentPkg <- asks envPackage 
     670        return var{ v_package = currentPkg } 
     671toQualified var = return var