Changeset 14176 for src/Pugs/Eval
- Timestamp:
- 10/09/06 20:32:35 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Eval/Var.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval/Var.hs
r14141 r14176 321 321 -- => Int -> [(Var, Val)] -> Eval [((Bool, Bool, Int, Int), VCode)] 322 322 subs slurpLens subSyms = fmap catMaybes . forM subSyms $ \(_, val) -> do 323 sub@(MkCode{ subReturns = ret , subParams = prms}) <- fromVal val323 sub@(MkCode{ subReturns = ret }) <- fromVal val 324 324 let (named, positional) = partition isNamedArg _invs_args 325 325 isNamedArg (Syn "named" _) = True … … 329 329 maybeM rv $ \fun -> do 330 330 -- if deltaFromCxt ret == 0 then return Nothing else do 331 let pairs = [ typeOfParam p | p <- prms, not (isSlurpy p) ] `zip` _invs_args 332 deltaCxt <- deltaFromCxt ret 333 deltaArgs <- mapM deltaFromPair pairs 334 let bound = either (const False) (const True) $ bindParams sub _invs _args 335 return ((isMulti sub, bound, sum deltaArgs, -(length deltaArgs), deltaCxt), fun) 331 (deltaArgs, deltaCxt) <- case bindParams sub _invs _args of 332 Left{} -> return ([maxBound], 0) 333 Right s -> do 334 cls <- asks envClasses 335 ds <- forM (subBindings s) $ \(prm, arg) -> case arg of 336 Syn "param-default" _ -> return Nothing 337 _ | isSlurpy prm -> return Nothing 338 _ -> do 339 argType <- inferExpType arg 340 return (Just $ deltaType cls (typeOfParam prm) argType) 341 cxt <- asks envContext 342 return (catMaybes ds, deltaType cls (typeOfCxt cxt) ret) 343 return ((isMulti sub, sum deltaArgs, -(length deltaArgs), deltaCxt), fun) 336 344 337 345 -- findBuiltinSub :: (_var :: Var, _invs :: Maybe Exp, _args :: [Exp]) … … 452 460 takeWord = takeWhile isWord . dropWhile (not . isWord) 453 461 isWord = not . (`elem` "(),:") 454 455 deltaFromCxt :: Type -> Eval Int456 deltaFromCxt x = do457 cls <- asks envClasses458 cxt <- asks envContext459 return $ deltaType cls (typeOfCxt cxt) x460 461 deltaFromPair :: (Type, Exp) -> Eval Int462 deltaFromPair (x, y) = do463 cls <- asks envClasses464 typ <- inferExpType y465 return $ deltaType cls x typ466 462 467 463 findAttrs :: Pkg -> Eval (Maybe [Pkg]) … … 515 511 inferExpType (Syn "%{}" _) = return $ mkType "Hash" 516 512 inferExpType (Syn "=>" _) = return $ mkType "Pair" 513 inferExpType (Syn "named" [_, exp]) = inferExpType exp 517 514 inferExpType exp@(Syn "{}" [_, idxExp]) = if isSimpleExp exp 518 515 then fromVal =<< enterRValue (evalExp exp)
