Changeset 10747 for src/Pugs/Compile

Show
Ignore:
Timestamp:
06/19/06 16:51:54 (2 years ago)
Author:
audreyt
Message:

* Don't use the klugy Sym"" form; instead use the new Annotation

type "Parens".

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Compile/PIL2.hs

    r10745 r10747  
    1313import Pugs.Internals 
    1414import Pugs.Types 
    15 import Pugs.Eval.Var 
    1615import Pugs.Monads 
    1716import Pugs.PIL2 
     
    110109 
    111110instance Compile (SubName, VCode) [PIL_Decl] where 
     111{- 
    112112    compile (name, vsub) | packageOf name /= packageOf (subName vsub) = do 
    113113        let storeC  = PBind [PVar $ qualify name] (PExp . PVar . qualify $ subName vsub) 
     
    115115            exportL = "__export_" ++ (render $ varText name) 
    116116        return [PSub exportL SubPrim [] False False bodyC] 
     117-} 
    117118    compile (name, vsub) = do 
    118119        bodyC   <- enter cxtItemAny . compile $ case subBody vsub of 
     
    123124 
    124125instance Compile (String, [(TVar Bool, TVar VRef)]) PIL_Expr where 
     126    compile (name, ((_, ref):_)) = do 
     127        rv <- readRef =<< liftSTM (readTVar ref) 
     128        case rv of 
     129            VCode sub   -> return $ PRawName (subName sub) 
     130            _           -> return $ PRawName name 
    125131    compile (name, _) = return $ PRawName name 
    126132 
     
    129135    compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 
    130136    compile (Ann Prag{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 
     137    compile (Ann Parens{} rest) = compile rest 
    131138    compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 
    132139    compile (Sym _ "" rest) = compile rest 
     
    134141        compile $ mergeStmts exp rest 
    135142    compile (Stmts (Pad scope pad exp) rest) = do 
    136         expC    <- compile $ mergeStmts exp rest 
    137143        padC    <- compile $ padToList pad 
    138         return $ PPad scope ((map fst $ padToList pad) `zip` padC) expC 
     144        let symC = (map fst $ padToList pad) `zip` padC 
     145            exps = [ Syn ":=" [Var name, Var from] | (name, PRawName from) <- symC, name /= from ] 
     146        expC    <- compile $ mergeStmts (foldl1 mergeStmts (exps ++ [exp])) rest 
     147        return $ PPad scope symC expC 
    139148    compile exp = compileStmts exp 
    140149 
     
    188197    -- XXX: pragmas? 
    189198    compile (Ann Prag{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 
     199    compile (Ann Parens{} rest) = compile rest 
    190200    compile (Sym _ "" rest) = compile rest 
    191201    compile Noop = return PNoop 
     
    263273    compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 
    264274    compile (Ann Prag{} rest) = compile rest 
     275    compile (Ann Parens{} rest) = compile rest 
    265276    compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 
    266277    compile (Sym _ "" rest) = compile rest 
     278    -- XXX: pragmas? 
    267279    compile (Var name) = return $ PVar name 
    268280    compile (Syn (sigil:"::()") exps) = do 
     
    360372    compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 
    361373    compile (Ann Prag{} rest) = compile rest 
     374    compile (Ann Parens{} rest) = compile rest 
    362375    compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 
    363376    compile (Sym _ "" rest) = compile rest 
     377    -- XXX: pragmas? 
    364378    compile (Var name) = return . PExp $ PVar name 
    365379    compile exp@(Val (VCode _)) = compile $ Syn "sub" [exp] 
     
    391405{-| Compiles a 'Val' to a 'PIL_Literal'. -} 
    392406instance Compile Val PIL_Literal where 
     407    compile (VList vs) = return $ PVal (VList (filter isSimple vs)) 
     408        where 
     409        isSimple (VRef _) = False 
     410        isSimple _        = True 
     411    compile (VRef _) = return $ PVal VUndef 
    393412    compile val = return $ PVal val 
    394413