Changeset 32 for src/Eval.hs

Show
Ignore:
Timestamp:
02/16/05 18:48:28 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
1041
Message:

* Code literals -- "sub", "pointy" and "bare" variants all works
* Lexical subroutine declarations via "my sub"
* Global subroutine and variables work again, via the envGlobal pad
* The "say", "exit", "die" primitives
* Bool.perl now prints correct literals (lwall)
* Blocks under void contexts now evaluates automatically
* The "..." (dotdotdot) literal

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Eval.hs

    r31 r32  
    2929    uniq <- liftIO $ newUnique 
    3030    return $ Env 
    31         { envContext = "List" 
     31        { envContext = "Void" 
    3232        , envLexical = [] 
    3333        , envGlobal  = initSyms 
     
    5757evaluate :: Exp -> Eval Val 
    5858evaluate (Val (VSub sub)) = do 
    59     pad <- asks envLexical 
    60     return $ VSub sub{ subPad = pad } -- closure! 
     59    cxt <- asks envContext 
     60    if cxt == "Void" && subType sub == SubBlock 
     61        then do 
     62            exp <- apply sub [] [] 
     63            evalExp exp 
     64        else do 
     65            pad <- asks envLexical 
     66            return $ VSub sub{ subPad = pad } -- closure! 
    6167evaluate (Val val) = return val 
    6268evaluate exp = do 
     
    149155        let [Sym (Symbol _ _ exp)] = exps 
    150156        val     <- evalExp exp 
    151         retVal val 
     157        retVal VUndef 
    152158    ":=" -> do 
    153159        let [Var var, exp] = exps 
    154         val     <- evalExp exp 
     160        val     <- enterEvalContext (cxtOfSigil $ head var) exp 
    155161        retVal val 
    156162    "::=" -> do -- XXX wrong