|
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 #-} |
|---|
| 2 | module Pugs.Prim.Code ( |
|---|
| 3 | op1CodeAssoc, op1CodeName, op1CodeArity, op1CodeBody, op1CodePos, op1CodeSignature |
|---|
| 4 | ) where |
|---|
| 5 | import Pugs.AST |
|---|
| 6 | import Pugs.Internals |
|---|
| 7 | -- import Pugs.Pretty |
|---|
| 8 | |
|---|
| 9 | {- On Code -} |
|---|
| 10 | |
|---|
| 11 | op1CodeAssoc :: Val -> Eval Val |
|---|
| 12 | op1CodeAssoc 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 | |
|---|
| 23 | op1CodeName :: Val -> Eval Val |
|---|
| 24 | op1CodeName 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 | |
|---|
| 31 | op1CodeArity :: Val -> Eval Val |
|---|
| 32 | op1CodeArity v = do |
|---|
| 33 | code <- fromVal v |
|---|
| 34 | return . castV . length $ subParams code |
|---|
| 35 | |
|---|
| 36 | op1CodeBody :: Val -> Eval Val |
|---|
| 37 | op1CodeBody v = do |
|---|
| 38 | (code :: VCode) <- fromVal v |
|---|
| 39 | expToEvalVal $ subBody code |
|---|
| 40 | |
|---|
| 41 | op1CodePos :: Val -> Eval Val |
|---|
| 42 | op1CodePos v = do -- die "XXX - code.pos not implemented" v |
|---|
| 43 | return $ castV (show v) |
|---|
| 44 | {- |
|---|
| 45 | do |
|---|
| 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 | |
|---|
| 53 | op1CodeSignature :: Val -> Eval Val |
|---|
| 54 | op1CodeSignature v = do |
|---|
| 55 | code <- fromVal v |
|---|
| 56 | return . VV . mkVal . paramsToSig . subParams $ code |
|---|
| 57 | |
|---|
| 58 | {- On Code::Exp -} |
|---|