Changeset 17043
- Timestamp:
- 07/14/07 04:05:02 (15 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Eval.hs (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval.hs
r16415 r17043 297 297 if lv then evalExp (Sym SOur var mempty Noop (Var var)) else retEmpty 298 298 299 _scalarContext :: Cxt300 _scalarContext = CxtItem $ mkType "Scalar"301 302 299 reduceStmts :: Exp -> Exp -> Eval Val 303 300 reduceStmts Noop rest = reduce rest … … 422 419 fmap VCode (recloseCode code) 423 420 424 reduceSyn "()" [exp] = reduce exp425 426 421 reduceSyn "named" [keyExp, valExp] = do 427 422 key <- enterEvalContext cxtItemAny keyExp … … 463 458 464 459 -- Close over outer lexical scope. 465 -- error "XXX - clone should operate on sub now"466 -- newBody <- transformExp cloneBodyStates $ subBody sub467 460 -- add &?BLOCK &?ROUTINE etc here 468 461 started <- if isCompileTime env then return Nothing else fmap Just (stm $ newTVar False) 469 462 inner <- clonePad (subInnerPad sub) 470 -- lpads <- cloneLexPads (subOuterPads sub)471 -- warn "mooooose" $ envLexPads env472 463 return $ VCode sub 473 464 { subCont = cont … … 477 468 } 478 469 where 479 cloneLexPads chain = forM chain $ \lpad -> case lpad of480 PRuntime p -> do481 p' <- snapPad p482 return (PRuntime p')483 _ -> return lpad484 -- cloneBodyStates (Pad scope pad exp) | scope <= SMy = do485 -- pad' <- clonePad pad486 -- return $ Pad scope pad' exp487 cloneBodyStates x = return x -- XXX!488 snapPad pad = stm $ do489 fmap listToPad $ forM (padToList pad) $ \(var, entry) -> do490 case entry of491 PELexical{} -> do492 store <- newTVar =<< readTVar (pe_store entry)493 return (var, entry{ pe_store = store })494 _ -> return (var, entry)495 470 clonePad pad = stm $ do 496 471 fmap listToPad $ forM (padToList pad) $ \(var, entry) -> do … … 654 629 then evalVal refVal 655 630 else readRef ref 656 657 reduceSyn "::=" exps = reduce (Syn ":=" exps)658 631 659 632 reduceSyn ":=" exps … … 880 853 to <- fromVal =<< reduce toExp 881 854 return $ VSubst (MkTrans from to) 882 883 -- XXX - Runtime mixin884 reduceSyn "is" (lhs:_) = reduce lhs885 reduceSyn "does" (lhs:_) = reduce lhs886 855 887 856 reduceSyn "package" [kind, exp] = reduceSyn "namespace" [kind, exp, emptyExp] … … 1461 1430 _ -> evalVal val 1462 1431 where 1463 tryRecBind :: Var -> Pad -> Pad -> Eval ()1464 tryRecBind var pad pad2 = case lookupPad var pad of1465 Just{} -> case lookupPad var pad2 of1466 Just c -> do1467 ref <- fromVal (VCode origSub)1468 stm $ writeTVar (pe_store c) ref1469 _ -> return ()1470 _ -> return ()1471 1432 applyMacroResult :: Val -> Eval Val 1472 1433 applyMacroResult (VObject o)
