root/src/Pugs/Prim/Code.hs

Revision 17178, 1.6 kB (checked in by masak, 15 months ago)

[Prim/Code.hs]
* corrections from auto-review ;)

  • Property svn:mime-type set to text/plain; charset=UTF-8
  • Property svn:eol-style set to native
Line 
1{-# OPTIONS_GHC -fglasgow-exts -fallow-overlapping-instances #-}
2module Pugs.Prim.Code (
3    op1CodeAssoc, op1CodeName, op1CodeArity, op1CodeBody, op1CodePos, op1CodeSignature
4) where
5import Pugs.AST
6import Pugs.Internals
7-- import Pugs.Pretty
8
9{- On Code -}
10
11op1CodeAssoc :: Val -> Eval Val
12op1CodeAssoc v = do
13    code <- fromVal v
14    return $ case subAssoc code of
15        ANil                    -> undef
16        AIrrelevantToParsing    -> undef
17        A_left                  -> castV "left"
18        A_right                 -> castV "right"
19        A_non                   -> castV "non"
20        A_chain                 -> castV "chain"
21        A_list                  -> castV "list"
22
23op1CodeName :: Val -> Eval Val
24op1CodeName v = do
25    code <- fromVal v
26    return . VStr $ case cast $ subName code of
27        "<anon>"  -> cast $ subName code
28        _         -> "&" ++ cast (subPackage code) ++
29                     "::" ++ tail (cast (subName code))
30
31op1CodeArity :: Val -> Eval Val
32op1CodeArity v = do
33    code <- fromVal v
34    return . castV . length $ subParams code
35
36op1CodeBody :: Val -> Eval Val
37op1CodeBody v = do
38    (code :: VCode) <- fromVal v
39    expToEvalVal $ subBody code
40
41op1CodePos :: Val -> Eval Val
42op1CodePos v = do -- die "XXX - code.pos not implemented" v
43    return $ castV (show v)
44{-
45do
46    code <- fromVal v
47    let env = subEnv code
48    case env of
49        Nothing  -> return VUndef
50        Just env -> return $ castV $ pretty $ envPos env
51-}
52
53op1CodeSignature :: Val -> Eval Val
54op1CodeSignature v = do
55    code <- fromVal v
56    return . VV . mkVal . paramsToSig . subParams $ code
57
58{- On Code::Exp -}
Note: See TracBrowser for help on using the browser.