Changeset 12317 for src/Pugs/CodeGen
- Timestamp:
- 08/16/06 19:28:24 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/CodeGen/PIR.hs (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/CodeGen/PIR.hs
r10853 r12317 17 17 import Pugs.AST 18 18 import Pugs.Types 19 import Pugs.Eval.Var20 19 import Pugs.PIL1 21 20 import Emit.PIR.Instances () … … 28 27 import Pugs.Run (getLibs) 29 28 import DrIFT.YAML 29 import qualified Data.ByteString.Char8 as Str 30 30 31 31 type CodeGen a = WriterT [Stmt] (ReaderT TEnv IO) a … … 125 125 126 126 prmToPad :: Param -> (VarName, Expression) 127 prmToPad prm = (paramName prm, ExpLV (VAR $ prmToIdent prm)) 127 prmToPad prm = (cast (paramName prm), ExpLV (VAR $ prmToIdent prm)) 128 129 isQualified :: String -> Maybe (String, String) 130 isQualified name 131 | Just (post, pre) <- breakOnGlue "::" (reverse name) = 132 let (sigil, pkg) = span (not . isAlphaNum) preName 133 name' = possiblyFixOperatorName (cast $ sigil ++ postName) 134 preName = reverse pre 135 postName = reverse post 136 in case takeWhile isAlphaNum pkg of 137 "OUTER" -> Nothing 138 "CALLER" -> Nothing 139 _ -> Just (pkg, cast name') 140 isQualified _ = Nothing 128 141 129 142 instance Translate PIL_Decl Decl where 130 trans (PSub name styp params lvalue ismulti body) | Just (pkg, name') <- isQualified name = do 131 declC <- trans $ PSub name' styp params lvalue ismulti body 132 return $ DeclNS pkg [declC] 143 trans (PSub name styp params lvalue ismulti body) 144 | Just (pkg, name') <- isQualified name = do 145 declC <- trans $ PSub (cast name') styp params lvalue ismulti body 146 return $ DeclNS (cast pkg) [declC] 133 147 trans (PSub name styp params _ _ body) = do 134 148 (_, stmts) <- listen $ do … … 156 170 | MkCode{ subBody = Syn "block" [ Ann _ exp ] } <- code 157 171 , App (Var var) Nothing [] <- exp 158 = fmap ExpLV (trans (PVar var))172 = fmap ExpLV (trans (PVar $ cast var)) 159 173 trans (PVal (VList vs)) = do 160 174 pmc <- genArray "vlist" … … 166 180 167 181 instance Translate PIL_LValue LValue where 168 trans (PVar name) | Just (pkg, name') <- isQualified name= do182 trans (PVar name) | Just (pkg, name') <- isQualified (cast name) = do 169 183 [globL] <- genLabel ["glob"] 170 184 pmc <- genScalar "glob" … … 186 200 trans (PVar name) = do 187 201 pmc <- genScalar "lex" 188 tellIns $ pmc <-- "find_name" $ [lit $ possiblyFixOperatorName name]202 tellIns $ pmc <-- "find_name" $ [lit $ possiblyFixOperatorName $ cast name] 189 203 return pmc 190 204 trans (PAssign [lhs] rhs) = do … … 236 250 trans x = transError x 237 251 252 instance LiteralClass Var Expression where 253 lit = ExpLit . LitStr . cast 254 255 instance LiteralClass ByteString Expression where 256 lit = ExpLit . LitStr . cast 257 238 258 -- XXX - slow way of implementing "return" 239 259 wrapSub :: SubType -> CodeGen () -> CodeGen () … … 266 286 267 287 prmToIdent :: Param -> String 268 prmToIdent = render . varText . paramName288 prmToIdent = render . varText . cast. paramName 269 289 270 290 storeLex :: TParam -> CodeGen () … … 280 300 tellIns $ VAR name <:= expC 281 301 tellLabel defC 282 tellIns $ "store_lex" .- [lit var, bare name]302 tellIns $ "store_lex" .- [lit (cast var :: VarName), bare name] 283 303 where 284 304 var = paramName prm
