on master help sign in
Improve jmacro support (add support for statemets as well as expressions).
fce06ecHamish Mackenzie
src/Language/Javascript/JSC/JMacro.hs+16−3
@@ -14,17 +14,30 @@
14
14
15module Language.Javascript.JSC.JMacro (
15module Language.Javascript.JSC.JMacro (
16 evalJM
16 evalJM
17+ , evalJME
17) where
18) where
18
19
19import Language.Haskell.TH.Quote (QuasiQuoter(..))
20import Language.Haskell.TH.Quote (QuasiQuoter(..))
20import Language.Haskell.TH
21import Language.Haskell.TH
21 (varE, appE, Lit(..), Exp(..), mkName, ExpQ)
22 (varE, appE, Lit(..), Exp(..), mkName, ExpQ)
22−import Language.Javascript.JMacro (jmacroE, renderJs)
23+import Language.Javascript.JMacro (jmacro, jmacroE, renderJs)
23
24
25+-- | Quasi quoter that creates a JavaScript string from JMacro expression
26+-- and stores it in a string litteral
27+evalJME :: QuasiQuoter
28+evalJME = jmacroE {quoteExp = quoteEvalJME}
29+
30+quoteEvalJME :: String -> ExpQ
31+quoteEvalJME s =
32+ appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
33+ (LitE . StringL . show $ renderJs $(quoteExp jmacroE s))|]
34+
35+-- | Quasi quoter that creates a JavaScript string from JMacro statement
36+-- and stores it in a string litteral
24evalJM :: QuasiQuoter
37evalJM :: QuasiQuoter
25−evalJM = jmacroE {quoteExp = quoteEvalJM}
38+evalJM = jmacro {quoteExp = quoteEvalJM}
26
39
27quoteEvalJM :: String -> ExpQ
40quoteEvalJM :: String -> ExpQ
28quoteEvalJM s =
41quoteEvalJM s =
29 appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
42 appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
30− (LitE . StringL . show $ renderJs $(quoteExp jmacroE s))|]
43+ (LitE . StringL . show $ renderJs $(quoteExp jmacro s))|]