Changeset 15434 for src/Pugs/AST.hs

Show
Ignore:
Timestamp:
03/04/07 14:28:40 (21 months ago)
Author:
audreyt
Message:

* Pugs.AST: Make oldVal boxable.
* Pugs.Prim: Move op1 "vv"'s implementation to the Value instance in Pugs.AST.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST.hs

    r15425 r15434  
    4040import Pugs.AST.Pad 
    4141import Pugs.Val hiding (Val, Param, listVal) -- (val, castVal, formatVal, PureBit, PureBool, PureStr, PureInt, PureNum, Capt(..), ValCapt, Feed(..), ValFeed, emptyFeed, Sig(..), SigParam(..), ParamAccess(..), ParamDefault(..)) 
     42import qualified Pugs.Val as Val 
    4243import Pugs.Meta () 
     44import Pugs.Class 
     45 
     46instance Value (Val.Val) where 
     47    fromVV = return 
     48    fromSV = return . mkVal 
     49    fromVal v = case v of 
     50        VV x@(MkInvocant x' _) -> case fromTypeable x' of 
     51            Just v  -> fromVal v 
     52            _       -> return x 
     53        VUndef      -> return . mkVal $ () 
     54        VBool x     -> return . mkVal $ ((cast x) :: Val.PureBit) 
     55        VInt x      -> return . mkVal $ ((cast x) :: Val.PureInt) 
     56        VNum x      -> return . mkVal $ ((cast x) :: Val.PureNum) 
     57        VRat x      -> return . mkVal $ ((cast x) :: Val.PureNum) 
     58        VStr x      -> return . mkVal $ ((cast x) :: Val.PureStr) 
     59        PerlSV x    -> return . mkVal $ x 
     60        _           -> return . mkVal $ v 
     61    doCast = fromVal 
     62    castV  = VV 
     63 
     64data OldValResponder = OldValResponder deriving Typeable 
     65instance ResponderInterface Eval OldValResponder where 
     66    dispatch _          = dispatchOldVal 
     67    fromMethodList _    = return OldValResponder 
     68    toNameList _        = [] 
     69 
     70instance Boxable Eval Val where 
     71    mkObj sv = MkInvocant sv (MkResponder (return OldValResponder)) 
     72 
     73dispatchOldVal :: Val.Val -> Call -> Eval Val.Val 
     74dispatchOldVal inv call = do 
     75    fail $ "Dispatch failed - " ++ show (miName call) 
    4376 
    4477{-|