jmacro 0.3.1 → 0.3.2
raw patch · 3 files changed
+50/−7 lines, 3 filesdep +haskell-src-extsdep +haskell-src-exts-qqdep −haskell-src-meta
Dependencies added: haskell-src-exts, haskell-src-exts-qq
Dependencies removed: haskell-src-meta
Files
- Language/Javascript/JMacro/ParseTH.hs +41/−0
- Language/Javascript/JMacro/QQ.hs +6/−5
- jmacro.cabal +3/−2
+ Language/Javascript/JMacro/ParseTH.hs view
@@ -0,0 +1,41 @@+module Language.Javascript.JMacro.ParseTH where++--import Language.Haskell.Meta.Parse+import qualified Language.Haskell.TH as TH+import Language.Haskell.Exts.Translate+import Language.Haskell.Exts.Parser+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.Annotated.Fixity+import qualified Language.Haskell.Exts.Syntax as Hs++parseHSExp :: String -> Either String TH.Exp+parseHSExp = fmap toExp . parseResultToEither . parseExpWithMode myDefaultParseMode++--for Language.Haskell.Meta+--parseHSExp = parseExp++parseResultToEither :: ParseResult a -> Either String a+parseResultToEither (ParseOk a) = Right a+parseResultToEither (ParseFailed loc e)+ = let line = Hs.srcLine loc - 1+ in Left (unlines [show line,show loc,e])++myDefaultParseMode :: ParseMode+myDefaultParseMode = ParseMode+ {parseFilename = []+ ,extensions = myDefaultExtensions+ ,ignoreLanguagePragmas = False+ ,fixities = baseFixities+ ,ignoreLinePragmas = False}++myDefaultExtensions :: [Extension]+myDefaultExtensions = [PostfixOperators+ ,QuasiQuotes+ ,UnicodeSyntax+ ,PatternSignatures+ ,MagicHash+ ,ForeignFunctionInterface+ ,TemplateHaskell+ ,RankNTypes+ ,MultiParamTypeClasses+ ,RecursiveDo]
Language/Javascript/JMacro/QQ.hs view
@@ -22,7 +22,7 @@ import Data.Generics(extQ,Data) import qualified Data.Map as M -import Language.Haskell.Meta.Parse+--import Language.Haskell.Meta.Parse import qualified Language.Haskell.TH as TH import Language.Haskell.TH(mkName) import qualified Language.Haskell.TH.Lib as TH@@ -37,6 +37,7 @@ import Text.Regex.PCRE.Light (compileM) import Language.Javascript.JMacro.Base+import Language.Javascript.JMacro.ParseTH -- import Debug.Trace @@ -154,14 +155,14 @@ jm2th s2 ] - handleStat (AntiStat s) = case parseExp s of+ handleStat (AntiStat s) = case parseHSExp s of Right ans -> Just $ TH.appE (TH.varE (mkName "toStat")) (return ans) Left err -> Just $ fail err handleStat _ = Nothing handleExpr :: JExpr -> Maybe (TH.ExpQ)- handleExpr (AntiExpr s) = case parseExp s of+ handleExpr (AntiExpr s) = case parseHSExp s of Right ans -> Just $ TH.appE (TH.varE (mkName "toJExpr")) (return ans) Left err -> Just $ fail err handleExpr (ValExpr (JFunc is' s)) = Just $@@ -440,7 +441,7 @@ x <- (try (symbol "`(") >> anyChar `manyTill` try (symbol ")`")) either (fail . ("Bad AntiQuotation: \n" ++)) (const (return x))- (parseExp x)+ (parseHSExp x) --args :: JMParser [JExpr] --args = parens $ commaSep expr@@ -498,7 +499,7 @@ x <- (try (symbol "`(") >> anyChar `manyTill` try (string ")`")) either (fail . ("Bad AntiQuotation: \n" ++)) (const (return x))- (parseExp x)+ (parseHSExp x) valExpr = ValExpr <$> (num <|> negnum <|> str <|> try regex <|> list <|> hash <|> func <|> var) <?> "value" where num = either JInt JDouble <$> try natFloat
jmacro.cabal view
@@ -1,5 +1,5 @@ name: jmacro-version: 0.3.1+version: 0.3.2 synopsis: QuasiQuotation library for programmatic generation of Javascript code. description: Javascript syntax, functional syntax, hygienic names, compile-time guarantees of syntactic correctness, limited typechecking. category: Language@@ -13,7 +13,7 @@ library- build-depends: base >= 4, base < 5, containers, pretty, safe >= 0.2, parsec >= 2.1, template-haskell >= 2.3, mtl, haskell-src-meta, bytestring >= 0.9, syb, pcre-light, json+ build-depends: base >= 4, base < 5, containers, pretty, safe >= 0.2, parsec >= 2.1, template-haskell >= 2.3, mtl, haskell-src-exts, haskell-src-exts-qq, bytestring >= 0.9, syb, pcre-light, json exposed-modules: Language.Javascript.JMacro Language.Javascript.JMacro.Util@@ -22,6 +22,7 @@ Language.Javascript.JMacro.Rpc other-modules: Language.Javascript.JMacro.Base Language.Javascript.JMacro.QQ+ Language.Javascript.JMacro.ParseTH ghc-options: -Wall if impl(ghc >= 6.8) ghc-options: -fwarn-tabs