language-lua 0.4.2 → 0.4.3
raw patch · 3 files changed
+37/−28 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Binop a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Block a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Exp a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (FunArg a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (FunBody a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (FunCall a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (FunDef a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (FunName a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Name a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (PrefixExp a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Stat a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Table a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (TableField a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Unop a)
+ Language.Lua.Annotated.Syntax: instance Data a => Data (Var a)
+ Language.Lua.Annotated.Syntax: instance Typeable1 Binop
+ Language.Lua.Annotated.Syntax: instance Typeable1 Block
+ Language.Lua.Annotated.Syntax: instance Typeable1 Exp
+ Language.Lua.Annotated.Syntax: instance Typeable1 FunArg
+ Language.Lua.Annotated.Syntax: instance Typeable1 FunBody
+ Language.Lua.Annotated.Syntax: instance Typeable1 FunCall
+ Language.Lua.Annotated.Syntax: instance Typeable1 FunDef
+ Language.Lua.Annotated.Syntax: instance Typeable1 FunName
+ Language.Lua.Annotated.Syntax: instance Typeable1 Name
+ Language.Lua.Annotated.Syntax: instance Typeable1 PrefixExp
+ Language.Lua.Annotated.Syntax: instance Typeable1 Stat
+ Language.Lua.Annotated.Syntax: instance Typeable1 Table
+ Language.Lua.Annotated.Syntax: instance Typeable1 TableField
+ Language.Lua.Annotated.Syntax: instance Typeable1 Unop
+ Language.Lua.Annotated.Syntax: instance Typeable1 Var
+ Language.Lua.Syntax: instance Data Binop
+ Language.Lua.Syntax: instance Data Block
+ Language.Lua.Syntax: instance Data Exp
+ Language.Lua.Syntax: instance Data FunArg
+ Language.Lua.Syntax: instance Data FunBody
+ Language.Lua.Syntax: instance Data FunCall
+ Language.Lua.Syntax: instance Data FunName
+ Language.Lua.Syntax: instance Data PrefixExp
+ Language.Lua.Syntax: instance Data Stat
+ Language.Lua.Syntax: instance Data TableField
+ Language.Lua.Syntax: instance Data Unop
+ Language.Lua.Syntax: instance Data Var
+ Language.Lua.Syntax: instance Typeable Binop
+ Language.Lua.Syntax: instance Typeable Block
+ Language.Lua.Syntax: instance Typeable Exp
+ Language.Lua.Syntax: instance Typeable FunArg
+ Language.Lua.Syntax: instance Typeable FunBody
+ Language.Lua.Syntax: instance Typeable FunCall
+ Language.Lua.Syntax: instance Typeable FunName
+ Language.Lua.Syntax: instance Typeable PrefixExp
+ Language.Lua.Syntax: instance Typeable Stat
+ Language.Lua.Syntax: instance Typeable TableField
+ Language.Lua.Syntax: instance Typeable Unop
+ Language.Lua.Syntax: instance Typeable Var
Files
- language-lua.cabal +6/−1
- src/Language/Lua/Annotated/Syntax.hs +17/−15
- src/Language/Lua/Syntax.hs +14/−12
language-lua.cabal view
@@ -2,9 +2,14 @@ Description: Lua 5.2 lexer, parser and pretty-printer. Documentation: (<https://osa1.github.com/language-lua>) . Changelog:+ \0.4.3:+ .+ - `Data` and `Typeable` instances are implemented for syntax tree.+ . \0.4.2: . - More tweaks in pretty printer.+ . - Started using 2 spaces for indentation(instead of 4 as before). . \0.4.1:@@ -34,7 +39,7 @@ \0.2.0: . - Syntax tree is annotated. All parsers(`parseText`, `parseFile`) annotate resulting tree with source positions.-Version: 0.4.2+Version: 0.4.3 Synopsis: Lua parser and pretty-printer Homepage: http://github.com/osa1/language-lua Bug-reports: http://github.com/osa1/language-lua/issues
src/Language/Lua/Annotated/Syntax.hs view
@@ -1,12 +1,14 @@ {-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveDataTypeable #-} -- | Lua 5.2 syntax tree, as specified in <http://www.lua.org/manual/5.2/manual.html#9>. -- Annotation implementation is inspired by haskell-src-exts. module Language.Lua.Annotated.Syntax where import Prelude hiding (LT, EQ, GT)+import Data.Data -data Name a = Name a String deriving (Show, Eq, Functor)+data Name a = Name a String deriving (Show, Eq, Functor, Data, Typeable) data Stat a = Assign a [Var a] [Exp a] -- ^var1, var2 .. = exp1, exp2 ..@@ -24,7 +26,7 @@ | LocalFunAssign a (Name a) (FunBody a) -- ^local function \<var\> (..) .. end | LocalAssign a [Name a] (Maybe [Exp a]) -- ^local var1, var2 .. = exp1, exp2 .. | EmptyStat a -- ^/;/- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data Exp a = Nil a@@ -37,59 +39,59 @@ | TableConst a (Table a) -- ^table constructor | Binop a (Binop a) (Exp a) (Exp a) -- ^binary operators, /+ - * ^ % .. < <= > >= == ~= and or/ | Unop a (Unop a) (Exp a) -- ^unary operators, /- not #/- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data Var a = VarName a (Name a) -- ^variable | Select a (PrefixExp a) (Exp a) -- ^/table[exp]/ | SelectName a (PrefixExp a) (Name a) -- ^/table.variable/- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data Binop a = Add a | Sub a | Mul a | Div a | Exp a | Mod a | Concat a | LT a | LTE a | GT a | GTE a | EQ a | NEQ a | And a | Or a- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data Unop a = Neg a | Not a | Len a- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data PrefixExp a = PEVar a (Var a) | PEFunCall a (FunCall a) | Paren a (Exp a)- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data Table a = Table a [TableField a] -- ^list of table fields- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data TableField a = ExpField a (Exp a) (Exp a) -- ^/[exp] = exp/ | NamedField a (Name a) (Exp a) -- ^/name = exp/ | Field a (Exp a)- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) -- | A block is list of statements with optional return statement. data Block a = Block a [Stat a] (Maybe [Exp a])- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data FunName a = FunName a (Name a) [Name a] (Maybe (Name a))- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data FunDef a = FunDef a (FunBody a)- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data FunBody a = FunBody a [Name a] (Maybe a) (Block a) -- ^(args, vararg, block)- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data FunCall a = NormalFunCall a (PrefixExp a) (FunArg a) -- ^/prefixexp ( funarg )/ | MethodCall a (PrefixExp a) (Name a) (FunArg a) -- ^/prefixexp : name ( funarg )/- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) data FunArg a = Args a [Exp a] -- ^list of args | TableArg a (Table a) -- ^table constructor | StringArg a String -- ^string- deriving (Show, Eq, Functor)+ deriving (Show, Eq, Functor, Data, Typeable) class Functor ast => Annotated ast where
src/Language/Lua/Syntax.hs view
@@ -1,9 +1,11 @@ {-# OPTIONS_GHC -Wall #-}+{-# LANGUAGE DeriveDataTypeable #-} -- | Lua 5.2 syntax tree, as specified in <http://www.lua.org/manual/5.2/manual.html#9>. module Language.Lua.Syntax where import Prelude hiding (LT, EQ, GT)+import Data.Data type Name = String @@ -23,7 +25,7 @@ | LocalFunAssign Name FunBody -- ^local function \<var\> (..) .. end | LocalAssign [Name] (Maybe [Exp]) -- ^local var1, var2 .. = exp1, exp2 .. | EmptyStat -- ^/;/- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data Exp = Nil@@ -36,50 +38,50 @@ | TableConst [TableField] -- ^table constructor | Binop Binop Exp Exp -- ^binary operators, /+ - * ^ % .. < <= > >= == ~= and or/ | Unop Unop Exp -- ^unary operators, /- not #/- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data Var = VarName Name -- ^variable | Select PrefixExp Exp -- ^/table[exp]/ | SelectName PrefixExp Name -- ^/table.variable/- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data Binop = Add | Sub | Mul | Div | Exp | Mod | Concat | LT | LTE | GT | GTE | EQ | NEQ | And | Or- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data Unop = Neg | Not | Len- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data PrefixExp = PEVar Var | PEFunCall FunCall | Paren Exp- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data TableField = ExpField Exp Exp -- ^/[exp] = exp/ | NamedField Name Exp -- ^/name = exp/ | Field Exp- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) -- | A block is list of statements with optional return statement. data Block = Block [Stat] (Maybe [Exp])- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data FunName = FunName Name [Name] (Maybe Name)- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data FunBody = FunBody [Name] Bool Block -- ^(args, vararg, block)- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data FunCall = NormalFunCall PrefixExp FunArg -- ^/prefixexp ( funarg )/ | MethodCall PrefixExp Name FunArg -- ^/prefixexp : name ( funarg )/- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable) data FunArg = Args [Exp] -- ^list of args | TableArg [TableField] -- ^table constructor | StringArg String -- ^string- deriving (Show, Eq)+ deriving (Show, Eq, Data, Typeable)