Changeset 10747 for src/Pugs/Compile
- Timestamp:
- 06/19/06 16:51:54 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Compile/PIL2.hs (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Compile/PIL2.hs
r10745 r10747 13 13 import Pugs.Internals 14 14 import Pugs.Types 15 import Pugs.Eval.Var16 15 import Pugs.Monads 17 16 import Pugs.PIL2 … … 110 109 111 110 instance Compile (SubName, VCode) [PIL_Decl] where 111 {- 112 112 compile (name, vsub) | packageOf name /= packageOf (subName vsub) = do 113 113 let storeC = PBind [PVar $ qualify name] (PExp . PVar . qualify $ subName vsub) … … 115 115 exportL = "__export_" ++ (render $ varText name) 116 116 return [PSub exportL SubPrim [] False False bodyC] 117 -} 117 118 compile (name, vsub) = do 118 119 bodyC <- enter cxtItemAny . compile $ case subBody vsub of … … 123 124 124 125 instance 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 125 131 compile (name, _) = return $ PRawName name 126 132 … … 129 135 compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 130 136 compile (Ann Prag{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 137 compile (Ann Parens{} rest) = compile rest 131 138 compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 132 139 compile (Sym _ "" rest) = compile rest … … 134 141 compile $ mergeStmts exp rest 135 142 compile (Stmts (Pad scope pad exp) rest) = do 136 expC <- compile $ mergeStmts exp rest137 143 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 139 148 compile exp = compileStmts exp 140 149 … … 188 197 -- XXX: pragmas? 189 198 compile (Ann Prag{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 199 compile (Ann Parens{} rest) = compile rest 190 200 compile (Sym _ "" rest) = compile rest 191 201 compile Noop = return PNoop … … 263 273 compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 264 274 compile (Ann Prag{} rest) = compile rest 275 compile (Ann Parens{} rest) = compile rest 265 276 compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 266 277 compile (Sym _ "" rest) = compile rest 278 -- XXX: pragmas? 267 279 compile (Var name) = return $ PVar name 268 280 compile (Syn (sigil:"::()") exps) = do … … 360 372 compile (Ann Pos{} rest) = compile rest -- fmap (PPos pos rest) $ compile rest 361 373 compile (Ann Prag{} rest) = compile rest 374 compile (Ann Parens{} rest) = compile rest 362 375 compile (Ann (Cxt cxt) rest) = enter cxt $ compile rest 363 376 compile (Sym _ "" rest) = compile rest 377 -- XXX: pragmas? 364 378 compile (Var name) = return . PExp $ PVar name 365 379 compile exp@(Val (VCode _)) = compile $ Syn "sub" [exp] … … 391 405 {-| Compiles a 'Val' to a 'PIL_Literal'. -} 392 406 instance 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 393 412 compile val = return $ PVal val 394 413
