@@ -14,17 +14,30 @@
15module Language.Javascript.JSC.JMacro (
15module Language.Javascript.JSC.JMacro (
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)
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}
30+quoteEvalJME :: String -> ExpQ
32+ appE (varE 'return) [|AppE (VarE $ mkName "Language.Javascript.JSC.eval")
33+ (LitE . StringL . show $ renderJs $(quoteExp jmacroE s))|]
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}
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))|]