Changeset 15296
- Timestamp:
- 02/18/07 15:56:10 (21 months ago)
- Location:
- src
- Files:
-
- 46 modified
-
Pugs.hs (modified) (4 diffs)
-
Pugs/AST.hs (modified) (4 diffs)
-
Pugs/AST/Eval.hs (modified) (2 diffs)
-
Pugs/AST/Internals.hs (modified) (26 diffs)
-
Pugs/AST/Internals/Instances.hs (modified) (4 diffs)
-
Pugs/Bind.hs (modified) (1 diff)
-
Pugs/CodeGen.hs (modified) (2 diffs)
-
Pugs/CodeGen/JSON.hs (modified) (1 diff)
-
Pugs/CodeGen/PIL1.hs (modified) (1 diff)
-
Pugs/CodeGen/PIL2.hs (modified) (3 diffs)
-
Pugs/CodeGen/PIR.hs (modified) (4 diffs)
-
Pugs/CodeGen/Perl5.hs (modified) (1 diff)
-
Pugs/CodeGen/YAML.hs (modified) (2 diffs)
-
Pugs/Compile.hs (modified) (8 diffs)
-
Pugs/Compile/Pugs.hs (modified) (1 diff)
-
Pugs/Eval.hs (modified) (25 diffs)
-
Pugs/Eval/Var.hs (modified) (7 diffs)
-
Pugs/External.hs (modified) (2 diffs)
-
Pugs/Lexer.hs (modified) (2 diffs)
-
Pugs/Monads.hs (modified) (6 diffs)
-
Pugs/Parser.hs (modified) (32 diffs)
-
Pugs/Parser/Doc.hs (modified) (1 diff)
-
Pugs/Parser/Export.hs (modified) (2 diffs)
-
Pugs/Parser/Literal.hs (modified) (19 diffs)
-
Pugs/Parser/Operator.hs (modified) (9 diffs)
-
Pugs/Parser/Program.hs (modified) (2 diffs)
-
Pugs/Parser/Types.hs (modified) (1 diff)
-
Pugs/Parser/Unsafe.hs (modified) (2 diffs)
-
Pugs/Parser/Util.hs (modified) (6 diffs)
-
Pugs/Pretty.hs (modified) (4 diffs)
-
Pugs/Prim.hs (modified) (61 diffs)
-
Pugs/Prim/Eval.hs (modified) (9 diffs)
-
Pugs/Prim/List.hs (modified) (2 diffs)
-
Pugs/Prim/Match.hs (modified) (16 diffs)
-
Pugs/Prim/Yaml.hs (modified) (4 diffs)
-
Pugs/Run.hs (modified) (6 diffs)
-
Pugs/Run/Perl5.hs (modified) (4 diffs)
-
Pugs/Types.hs (modified) (3 diffs)
-
Pugs/Types/Array.hs (modified) (1 diff)
-
Pugs/Types/Code.hs (modified) (1 diff)
-
Pugs/Types/Handle.hs (modified) (1 diff)
-
Pugs/Types/Hash.hs (modified) (2 diffs)
-
Pugs/Types/Scalar.hs (modified) (2 diffs)
-
Pugs/Val.hs (modified) (2 diffs)
-
Pugs/Val/Base.hs (modified) (2 diffs)
-
Pugs/Val/Code.hs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs.hs
r15139 r15296 312 312 return () 313 313 where 314 exp = App (_Var "&require") Nothing [Val $ VStr fn]314 exp = App (_Var "&require") Nothing [Val $ _VStr fn] 315 315 316 316 doRunSingle :: TVar Env -> RunOptions -> String -> IO () … … 354 354 Val err@(VError (VStr msg) _) 355 355 | runOptShowPretty opts 356 , any (== "Unexpected end of input") (lines msg) -> do356 , any (== "Unexpected end of input") (lines (cast msg)) -> do 357 357 cont <- readline "....> " 358 358 case cont of … … 365 365 _ -> return $ makeDumpEnv exp 366 366 -- XXX Generalize this into structural folding 367 makeDumpEnv Noop = Syn "continuation" []368 makeDumpEnv (Stmts x Noop) = Stmts x ( Syn "continuation" [])367 makeDumpEnv Noop = _Syn "continuation" [] 368 makeDumpEnv (Stmts x Noop) = Stmts x (_Syn "continuation" []) 369 369 makeDumpEnv (Stmts x exp) = Stmts x $ makeDumpEnv exp 370 370 makeDumpEnv (Ann ann exp) = Ann ann $ makeDumpEnv exp 371 371 makeDumpEnv (Pad x y exp) = Pad x y $ makeDumpEnv exp 372 372 makeDumpEnv (Sym x y exp) = Sym x y $ makeDumpEnv exp 373 makeDumpEnv exp = Stmts exp ( Syn "continuation" [])373 makeDumpEnv exp = Stmts exp (_Syn "continuation" []) 374 374 handler (IOException ioe) | isUserError ioe = do 375 375 putStrLn "Internal error while running expression:" … … 405 405 406 406 runProgramWith :: 407 (Env -> Env) -> (Val -> IO a) -> VStr -> [VStr] -> String -> IO a407 (Env -> Env) -> (Val -> IO a) -> String -> [String] -> String -> IO a 408 408 runProgramWith fenv f name args prog = do 409 409 env <- prepareEnv name args -
src/Pugs/AST.hs
r14599 r15296 1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -funbox-strict-fields -fallow-overlapping-instances #-}1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -funbox-strict-fields -fallow-overlapping-instances -foverloaded-strings #-} 2 2 3 3 {-| … … 216 216 mergeStmts x y = Stmts x y 217 217 218 isImplicitTopic :: String-> Bool218 isImplicitTopic :: ID -> Bool 219 219 isImplicitTopic "subst" = True 220 220 isImplicitTopic "match" = True … … 234 234 235 235 _underscore :: ID 236 _underscore = cast "_"236 _underscore = _cast "_" 237 237 238 238 newPackage :: String -> String -> [String] -> [String] -> Exp … … 244 244 (Just $ Val (VType $ mkType cls)) 245 245 [ Syn "named" 246 [ Val ( VStr "is")247 , Val (VList $ map VStrclasses)246 [ Val (_VStr "is") 247 , Val (VList $ map castV classes) 248 248 ] 249 249 , Syn "named" 250 [ Val ( VStr "does")251 , Val (VList $ map VStrroles)250 [ Val (_VStr "does") 251 , Val (VList $ map castV roles) 252 252 ] 253 253 , Syn "named" 254 [ Val ( VStr "name")255 , Val ( VStrname)254 [ Val (_VStr "name") 255 , Val (castV name) 256 256 ] 257 257 , Syn "named" 258 [ Val ( VStr "attrs")258 [ Val (_VStr "attrs") 259 259 , Syn "\\{}" [Noop] 260 260 ] -
src/Pugs/AST/Eval.hs
r14148 r15296 102 102 103 103 instance Monad Eval where 104 return a = EvalT $ return (RNormal a) 105 m >>= k = EvalT $ do 104 {-# INLINE return #-} 105 return a = EvalT (return (RNormal a)) 106 {-# INLINE (>>=) #-} 107 m >>= k = EvalT (do 106 108 a <- runEvalT m 107 109 case a of 108 RNormal x -> runEvalT (k x) 109 RException x-> return (RException x) 110 RNormal x -> runEvalT $! k x 111 RException x -> return (RException x)) 112 {-# INLINE fail #-} 110 113 fail str = do 111 114 pos <- asks envPos' 112 EvalT $ return (RException (errStrPos (cast str) pos))115 EvalT (return (RException (errStrPos (cast str) pos))) 113 116 114 117 instance Error Val where 115 noMsg = errStr ""116 strMsg = errStr 118 noMsg = errStr (_cast "") 119 strMsg = errStr . _cast 117 120 118 121 instance MonadTrans EvalT where … … 186 189 instance MonadReader Env Eval where 187 190 ask = lift ask 188 local f m = EvalT $ local f (runEvalT m)191 local f m = EvalT (local f (runEvalT m)) 189 192 190 193 instance MonadCont Eval where -
src/Pugs/AST/Internals.hs
r15227 r15296 1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -fallow-overlapping-instances -fallow-undecidable-instances -fparr #-}1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -fallow-overlapping-instances -fallow-undecidable-instances -fparr -foverloaded-strings #-} 2 2 3 3 module Pugs.AST.Internals ( … … 82 82 newSVval, -- used in Run.Perl5 83 83 84 DebugInfo, _Sy m, _Var -- String -> ByteString constructors84 DebugInfo, _Syn, _Sym, _Var, _VStr -- String -> ByteString constructors 85 85 ) where 86 86 … … 281 281 => ObjectId -> Maybe Dynamic -> VType -> [(VStr, Val)] -> m VObject 282 282 createObjectRaw uniq opaq typ attrList = do 283 attrs <- liftSTM . unsafeIOToSTM . H.fromList H.hashString$ map (\(a,b) -> (a, lazyScalar b)) attrList283 attrs <- liftSTM . unsafeIOToSTM . hashList $ map (\(a,b) -> (a, lazyScalar b)) attrList 284 284 return $ MkObject 285 285 { objType = typ … … 324 324 mapM fromVal vlist 325 325 doCast v = castFailM v "[Int]" 326 327 instance Value [String] where 328 castV = VList . map _VStr 329 fromVal v = do 330 vlist <- fromVal v 331 mapM fromVal vlist 332 doCast v = castFailM v "[String]" 326 333 327 334 instance Value [VStr] where … … 385 392 castV = VCode 386 393 fromSV sv = return $ mkPrim 387 { subName = cast "<anon>"394 { subName = cast ("<anon>" :: String) 388 395 , subParams = [defaultArrayParam] 389 396 , subReturns = mkType "Scalar::Perl5" … … 448 455 doCast (VBool b) = return $ if b then 1 % 1 else 0 % 1 449 456 doCast (VList l) = return $ genericLength l 450 doCast (VStr s) | not ( null s) , isSpace $last s = do451 str <- fromVal ( VStr $init s)457 doCast (VStr s) | not (Str.null s), isSpace $ Str.last s = do 458 str <- fromVal (castV $ Str.init s) 452 459 return str 453 doCast (VStr s) | not ( null s) , isSpace $head s = do454 str <- fromVal ( VStr $tail s)460 doCast (VStr s) | not (Str.null s), isSpace $ Str.head s = do 461 str <- fromVal (castV $ Str.tail s) 455 462 return str 456 463 doCast (VStr s) = return $ 457 case ( parseNatOrRat s) of464 case parseNatOrRat (cast s) of 458 465 Left _ -> 0 % 1 459 466 Right rv -> case rv of … … 473 480 doCast (VNum n) = return $ n 474 481 doCast (VComplex (r :+ _)) = return $ r 475 doCast (VStr s) | not ( null s) , isSpace $last s = do476 str <- fromVal ( VStr $init s)482 doCast (VStr s) | not (Str.null s), isSpace $ Str.last s = do 483 str <- fromVal (castV $ Str.init s) 477 484 return str 478 doCast (VStr s) | not ( null s) , isSpace $head s = do479 str <- fromVal ( VStr $tail s)485 doCast (VStr s) | not (Str.null s), isSpace $ Str.head s = do 486 str <- fromVal (castV $ Str.tail s) 480 487 return str 481 488 doCast (VStr "Inf") = return $ 1/0 … … 483 490 doCast (VStr "NaN") = return $ 0/0 484 491 doCast (VStr s) = return $ 485 case ( parseNatOrRat s) of492 case ( parseNatOrRat (cast s) ) of 486 493 Left _ -> 0 487 494 Right rv -> case rv of … … 520 527 instance Value VStr where 521 528 castV = VStr 529 fromSV sv = fmap cast (liftIO $ svToVStr sv) 530 fromVV vv = liftSIO $ cast (Val.asStr vv) 531 fromVal (VList l) = return . Str.unwords =<< mapM fromVal l 532 fromVal v@(PerlSV _) = fromVal' v 533 fromVal VUndef = return (__"") 534 fromVal (VType t) = return (cast t) 535 fromVal v = do 536 vt <- evalValType v 537 case vt of 538 MkType "Pair" -> do 539 -- Special case for pairs: "$pair" eq 540 -- "$pair.key()\t$pair.value()" 541 (k, v) <- join $ doPair v pair_fetch 542 k' <- fromVal k 543 v' <- fromVal v 544 return $ k' +++ __"\t" +++ v' 545 MkType "Hash" -> do 546 --- XXX special case for Hash -- need to Objectify 547 hv <- join $ doHash v hash_fetch 548 lns <- forM (Map.assocs hv) $ \(k, v) -> do 549 str <- fromVal v 550 return $ k +++ __"\t" +++ str 551 return $ Str.unlines lns 552 _ -> fromVal' v 553 doCast VUndef = return $ __"" 554 doCast VType{} = return $ __"" 555 doCast (VStr s) = return s 556 doCast (VBool b) = return $ if b then __"1" else __"" 557 doCast (VInt i) = return $ __(show i) 558 doCast (VRat r) = return $ __(showRat r) 559 doCast (VNum n) = return $ __(showNum n) 560 doCast (VComplex (r :+ i)) = return $ __(showNum r ++ " + " ++ showNum i ++ "i") 561 doCast (VList l) = fmap Str.unwords (mapM fromVal l) 562 doCast (VCode s) = return $ __("<" ++ show (subType s) ++ "(" ++ cast (subName s) ++ ")>") 563 doCast (VJunc j) = return $ __(show j) 564 doCast (VThread t) = return $ __(takeWhile isDigit $ dropWhile (not . isDigit) $ show t) 565 doCast (VHandle h) = return $ __"<VHandle (" +++ __(show h) +++ __">" 566 doCast (VMatch m) = return $ matchStr m 567 -- doCast (VType typ) = return $ showType typ -- "::" ++ showType typ 568 doCast (VObject o) = return $ __"<obj:" +++ cast (objType o) +++ __">" 569 doCast x = return $ __"<" +++ cast (valType x) +++ __">" 570 571 instance Value String where 572 castV = VStr . cast 522 573 fromSV sv = liftIO $ svToVStr sv 523 574 fromVV vv = liftSIO $ cast (Val.asStr vv) … … 541 592 lns <- forM (Map.assocs hv) $ \(k, v) -> do 542 593 str <- fromVal v 543 return $ k ++ "\t"++ str544 return $ unlines lns594 return $ k +++ __"\t" +++ str 595 return $ unlines (cast lns) 545 596 _ -> fromVal' v 546 597 doCast VUndef = return "" 547 598 doCast VType{} = return "" 548 doCast (VStr s) = return s599 doCast (VStr s) = return (cast s) 549 600 doCast (VBool b) = return $ if b then "1" else "" 550 601 doCast (VInt i) = return $ show i … … 557 608 doCast (VThread t) = return $ takeWhile isDigit $ dropWhile (not . isDigit) $ show t 558 609 doCast (VHandle h) = return $ "<" ++ "VHandle (" ++ (show h) ++ ">" 559 doCast (VMatch m) = return $ matchStr m610 doCast (VMatch m) = return $ (cast (matchStr m)) 560 611 -- doCast (VType typ) = return $ showType typ -- "::" ++ showType typ 561 612 doCast (VObject o) = return $ "<obj:" ++ showType (objType o) ++ ">" … … 574 625 newSVval val = case val of 575 626 PerlSV sv -> return sv 576 VStr str -> vstrToSV str627 VStr str -> bufToSV str 577 628 VType typ -> vstrToSV (showType typ) 578 629 VBool bool -> vintToSV (fromEnum bool) … … 1018 1069 mkPrim = MkCode 1019 1070 { isMulti = True 1020 , subName = cast "&"1071 , subName = cast ("&" :: String) 1021 1072 , subType = SubPrim 1022 1073 , subEnv = Nothing … … 1045 1096 mkSub = MkCode 1046 1097 { isMulti = False 1047 , subName = cast "&"1098 , subName = cast ("&" :: String) 1048 1099 , subType = SubBlock 1049 1100 , subEnv = Nothing … … 1072 1123 mkCode = MkCode 1073 1124 { isMulti = False 1074 , subName = cast "&"1125 , subName = cast ("&" :: String) 1075 1126 , subType = SubBlock 1076 1127 , subEnv = Nothing … … 1130 1181 | App !Exp !(Maybe Exp) ![Exp] -- ^ Function application 1131 1182 -- e.g. myfun($invocant: $arg) 1132 | Syn ! String ![Exp]-- ^ Syntactic construct that cannot1183 | Syn !ID ![Exp] -- ^ Syntactic construct that cannot 1133 1184 -- be represented by 'App'. 1134 1185 | Ann !Ann !Exp -- ^ Annotation (see @Ann@) … … 1147 1198 _Var :: String -> Exp 1148 1199 _Var str = Var (possiblyFixOperatorName (cast str)) 1200 1201 _VStr :: String -> Val 1202 _VStr = VStr . cast 1203 1204 _Syn :: String -> [Exp] -> Exp 1205 _Syn s xs = Syn (cast s) xs 1149 1206 1150 1207 instance Value Exp where … … 1233 1290 (exps', vs') = foldr extractPlaceholderVarsExp ([], vs) exps 1234 1291 vs'' = case n of 1235 "when" -> Set.insert (cast "$_")vs'1236 "given" -> Set.delete (cast "$_")vs'1292 "when" -> Set.insert varTopic vs' 1293 "given" -> Set.delete varTopic vs' 1237 1294 _ -> vs' 1238 1295 extractPlaceholderVars (Var var) vs … … 1240 1297 , var' <- var{ v_twigil = TNil } 1241 1298 = (Var var', Set.insert var' vs) 1242 | var == cast "$_"1299 | var == varTopic 1243 1300 = (Var var, Set.insert var vs) 1244 1301 | otherwise … … 1282 1339 defaultArrayParam = buildParam "" "*" "@_" (Val VUndef) 1283 1340 defaultHashParam = buildParam "" "*" "%_" (Val VUndef) 1284 defaultScalarParam = buildParam "" "?" "$_" ( Var $ cast"$_")1341 defaultScalarParam = buildParam "" "?" "$_" (_Var "$_") 1285 1342 1286 1343 type DebugInfo = Maybe (TVar (Map ID String)) … … 1557 1614 dumpRef (MkRef (ICode cv)) = do 1558 1615 vsub <- code_assuming cv [] [] 1559 return ( VStr$ "(MkRef (ICode $ " ++ show vsub ++ "))")1616 return (castV $ "(MkRef (ICode $ " ++ show vsub ++ "))") 1560 1617 dumpRef (MkRef (IScalar sv)) | scalar_iType sv == mkType "Scalar::Const" = do 1561 1618 sv <- scalar_fetch sv 1562 return ( VStr$ "(MkRef (IScalar $ " ++ show sv ++ "))")1563 dumpRef ref = return ( VStr$ "(unsafePerformIO . newObject $ mkType \"" ++ showType (refType ref) ++ "\")")1619 return (castV $ "(MkRef (IScalar $ " ++ show sv ++ "))") 1620 dumpRef ref = return (castV $ "(unsafePerformIO . newObject $ mkType \"" ++ showType (refType ref) ++ "\")") 1564 1621 1565 1622 readRef :: VRef -> Eval Val … … 1624 1681 return $ arrayRef (MkIArray iv) 1625 1682 "Hash" -> do 1626 h <- liftIO (H.new (==) H.hashString)1683 h <- liftIO hashNew 1627 1684 return $ hashRef (h :: IHash) 1628 1685 "Code" -> return $! codeRef $ mkPrim … … 1854 1911 newHash hash = do 1855 1912 --liftSTM $ unsafeIOToSTM $ putStrLn "new hash" 1856 ihash <- liftSTM . unsafeIOToSTM $ H.fromList H.hashString(map (\(a,b) -> (a, lazyScalar b)) (Map.toList hash))1913 ihash <- liftSTM . unsafeIOToSTM $ hashList (map (\(a,b) -> (a, lazyScalar b)) (Map.toList hash)) 1857 1914 return $ IHash ihash 1858 1915 … … 1955 2012 , envLValue = False 1956 2013 , envGlobal = glob 1957 , envPackage = cast "Main"2014 , envPackage = _cast "Main" 1958 2015 , envClasses = initTree 1959 2016 , envEval = const (return VUndef) … … 1986 2043 asYAML x = asYAMLmap "Map" $ Map.toAscList (Map.map asYAML x) 1987 2044 fromYAML node = fmap Map.fromList (fromYAMLmap node) 2045 instance YAML a => YAML (Map ByteString a) where 2046 asYAML x = asYAMLmapBuf "Map" $ Map.toAscList (Map.map asYAML x) 2047 fromYAML node = fmap Map.fromList (fromYAMLmapBuf node) 1988 2048 instance YAML a => YAML (Map Var a) where 1989 2049 asYAML x = asYAMLmap "Map" . sortBy (\x y -> fst x `compare` fst y) $ … … 2038 2098 asYAML x = do 2039 2099 l <- liftIO $ H.toList x 2040 asYAMLmap "IHash" (map (\(k, v) -> (k, asYAML v)) l)2100 asYAMLmapBuf "IHash" (map (\(k, v) -> (k, asYAML v)) l) 2041 2101 fromYAML node = do 2042 l <- fromYAMLmap node2043 l' <- H.fromList H.hashStringl2102 l <- fromYAMLmapBuf node 2103 l' <- hashList l 2044 2104 return l' 2045 2105 -
src/Pugs/AST/Internals/Instances.hs
r15248 r15296 1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -fallow-overlapping-instances -fallow-undecidable-instances -fparr #-}1 {-# OPTIONS_GHC -cpp -fglasgow-exts -fno-warn-orphans -fallow-overlapping-instances -fallow-undecidable-instances -fparr -foverloaded-strings #-} 2 2 3 3 … … 63 63 , envLValue = False 64 64 , envGlobal = glob 65 , envPackage = cast "Main"65 , envPackage = _cast "Main" 66 66 , envClasses = initTree 67 67 , envEval = const (return VUndef) … … 94 94 asYAML x = asYAMLmap "Map" $ Map.toAscList (Map.map asYAML x) 95 95 fromYAML node = fmap Map.fromList (fromYAMLmap node) 96 instance YAML a => YAML (Map ByteString a) where 97 asYAML x = asYAMLmapBuf "Map" $ Map.toAscList (Map.map asYAML x) 98 fromYAML node = fmap Map.fromList (fromYAMLmapBuf node) 96 99 instance YAML a => YAML (Map Var a) where 97 100 asYAML x = asYAMLmap "Map" . sortBy (\x y -> fst x `compare` fst y) $ … … 146 149 asYAML x = do 147 150 l <- liftIO $ H.toList x 148 asYAMLmap "IHash" (map (\(k, v) -> (k, asYAML v)) l)151 asYAMLmapBuf "IHash" (map (\(k, v) -> (k, asYAML v)) l) 149 152 fromYAML node = do 150 l <- fromYAMLmap node151 l' <- H.fromList H.hashStringl153 l <- fromYAMLmapBuf node 154 l' <- hashList l 152 155 return l' 153 156 -
src/Pugs/Bind.hs
r14643 r15296 1 {-# OPTIONS_GHC -fglasgow-exts -fallow-overlapping-instances #-}1 {-# OPTIONS_GHC -fglasgow-exts -fallow-overlapping-instances -foverloaded-strings #-} 2 2 3 3 {-| -
src/Pugs/CodeGen.hs
r14058 r15296 43 43 , ("Parse-YAML", genParseYAML) 44 44 , ("Parse-HsYAML",genParseHsYAML) 45 , ("Parse-Pretty",fmap ( VStr . (++"\n") . pretty) (asks envBody))45 , ("Parse-Pretty",fmap (_VStr . (++"\n") . pretty) (asks envBody)) 46 46 -- , ("XML", genXML) 47 47 ] … … 91 91 rv <- runEvalIO env gen 92 92 case rv of 93 VStr str -> return str93 VStr str -> return (cast str) 94 94 _ -> fail (show rv) -
src/Pugs/CodeGen/JSON.hs
r13448 r15296 11 11 genJSON = do 12 12 penv <- compile () :: Eval PIL_Environment 13 return . VStr . unlines $ [showJSON penv]13 return . _VStr . unlines $ [showJSON penv] -
src/Pugs/CodeGen/PIL1.hs
r13448 r15296 10 10 genPIL1 = do 11 11 penv <- compile () 12 return . VStr . unlines $12 return . _VStr . unlines $ 13 13 [ "PIL_Environment" 14 14 , " { pilMain = (" ++ show (pilMain penv) ++ ")" -
src/Pugs/CodeGen/PIL2.hs
r10059 r15296 17 17 genPIL2 = do 18 18 penv <- compile () 19 return . VStr . unlines $19 return . _VStr . unlines $ 20 20 [ "PIL_Environment" 21 21 , " { pilMain = (" ++ show (pilMain penv) ++ ")" … … 27 27 genPIL2Perl5 = do 28 28 penv <- compile () :: Eval PIL_Environment 29 return . VStr . unlines $ [showPerl5 penv]29 return . _VStr . unlines $ [showPerl5 penv] 30 30 31 31 genPIL2JSON :: Eval Val 32 32 genPIL2JSON = do 33 33 penv <- compile () :: Eval PIL_Environment 34 return . VStr . unlines $ [showJSON penv]34 return . _VStr . unlines $ [showJSON penv] 35 35 36 36 genPIL2YAML :: Eval Val … … 38 38 penv <- compile () :: Eval PIL_Environment
