Changeset 13827 for src/Pugs/Eval
- Timestamp:
- 10/03/06 16:24:40 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Eval/Var.hs (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval/Var.hs
r13823 r13827 290 290 subSyms <- findSyms var 291 291 lens <- mapM argSlurpLen _invs_args 292 doFindSub (sum lens)subSyms292 doFindSub lens subSyms 293 293 294 294 argSlurpLen :: Exp -> Eval Int … … 309 309 -- doFindSub :: (_var :: Var, _invs :: Maybe Exp, _args :: [Exp]) 310 310 -- => Int -> [(Var, Val)] -> Eval (Maybe VCode) 311 doFindSub slurpLen subSyms = do312 subs' <- subs slurpLen subSyms311 doFindSub slurpLens subSyms = do 312 subs' <- subs slurpLens subSyms 313 313 -- let foo (x, sub) = show x ++ show (map paramContext $ subParams sub) 314 314 -- trace (unlines $ map foo $ sort subs') return () … … 321 321 -- subs :: (_invs :: Maybe Exp, _args :: [Exp]) 322 322 -- => Int -> [(Var, Val)] -> Eval [((Bool, Bool, Int, Int), VCode)] 323 subs slurpLen subSyms = fmap catMaybes . forM subSyms $ \(_, val) -> do323 subs slurpLens subSyms = fmap catMaybes . forM subSyms $ \(_, val) -> do 324 324 sub@(MkCode{ subReturns = ret, subParams = prms }) <- fromVal val 325 325 let (named, positional) = partition isNamedArg _invs_args 326 326 isNamedArg (Syn "named" _) = True 327 327 isNamedArg _ = False 328 rv = return $ arityMatch sub (length positional) (length named) slurpLen 328 rv = return $ arityMatch sub (length positional) (length named) slurpLens 329 329 330 330 maybeM rv $ \fun -> do … … 655 655 Nothing -> mzero 656 656 657 arityMatch :: VCode -> Int -> Int -> Int-> Maybe VCode658 arityMatch sub@MkCode{ subAssoc = assoc, subParams = prms } posLen namLen argSlurpLen 657 arityMatch :: VCode -> Int -> Int -> [Int] -> Maybe VCode 658 arityMatch sub@MkCode{ subAssoc = assoc, subParams = prms } posLen namLen argSlurpLens 659 659 | A_list <- assoc = Just sub 660 660 | A_chain <- assoc = Just sub 661 661 662 {- 662 663 | isNothing $ find (not . isSlurpy) prms -- XXX - what about empty ones? 663 664 , slurpLen <- length $ filter (\p -> isSlurpy p && v_sigil (paramName p) == SScalar) prms … … 665 666 , if hasArray then slurpLen <= argSlurpLen else slurpLen == argSlurpLen 666 667 = Just sub 667 668 | reqLen <- length $ filter (\p -> not (isOptional p || (isSlurpy p && v_sigil (paramName p) /= SScalar))) prms 668 -} 669 670 | reqLen <- length $ filter (\p -> not (isOptional p || isSlurpy p)) prms 669 671 , optLen <- length $ filter (\p -> isOptional p) prms 670 672 , hasArray <- isJust $ find (\p -> isSlurpy p && v_sigil (paramName p) == SArray) prms 671 673 , hasHash <- isJust $ find (\p -> isSlurpy p && v_sigil (paramName p) == SHash) prms 674 , slurpLen <- length $ filter (\p -> isSlurpy p && v_sigil (paramName p) == SScalar) prms 672 675 , argLen >= reqLen && (hasArray || (if hasHash then posLen else argLen) <= (reqLen + optLen)) 676 , if hasArray then slurpLen <= sum (drop reqLen argSlurpLens) else slurpLen == sum (drop argLen argSlurpLens) 673 677 = Just sub 674 678
