-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | JavaScript analysis tools
--
-- WebBits is a collection of libraries for working with JavaScript.
@package WebBits
@version 2.0
module BrownPLT.JavaScript.Lexer
lexeme :: CharParser st a -> CharParser st a
identifier :: CharParser st String
reserved :: String -> CharParser st ()
operator :: CharParser st String
reservedOp :: String -> CharParser st ()
charLiteral :: CharParser st Char
stringLiteral :: CharParser st String
natural :: CharParser st Integer
integer :: CharParser st Integer
float :: CharParser st Double
naturalOrFloat :: CharParser st (Either Integer Double)
decimal :: CharParser st Integer
hexadecimal :: CharParser st Integer
octal :: CharParser st Integer
symbol :: String -> CharParser st String
whiteSpace :: CharParser st ()
parens :: CharParser st a -> CharParser st a
braces :: CharParser st a -> CharParser st a
brackets :: CharParser st a -> CharParser st a
squares :: CharParser st a -> CharParser st a
semi :: CharParser st String
comma :: CharParser st String
colon :: CharParser st String
dot :: CharParser st String
identifierStart :: GenParser Char st Char
-- | JavaScript's syntax.
module BrownPLT.JavaScript.Syntax
data Expression a
StringLit :: a -> String -> Expression a
RegexpLit :: a -> String -> Bool -> Bool -> Expression a
NumLit :: a -> Double -> Expression a
IntLit :: a -> Int -> Expression a
BoolLit :: a -> Bool -> Expression a
NullLit :: a -> Expression a
ArrayLit :: a -> [Expression a] -> Expression a
ObjectLit :: a -> [(Prop a, Expression a)] -> Expression a
ThisRef :: a -> Expression a
VarRef :: a -> (Id a) -> Expression a
DotRef :: a -> (Expression a) -> (Id a) -> Expression a
BracketRef :: a -> (Expression a) -> (Expression a) -> Expression a
NewExpr :: a -> (Expression a) -> [Expression a] -> Expression a
PrefixExpr :: a -> PrefixOp -> (Expression a) -> Expression a
UnaryAssignExpr :: a -> UnaryAssignOp -> (LValue a) -> Expression a
InfixExpr :: a -> InfixOp -> (Expression a) -> (Expression a) -> Expression a
CondExpr :: a -> (Expression a) -> (Expression a) -> (Expression a) -> Expression a
AssignExpr :: a -> AssignOp -> (LValue a) -> (Expression a) -> Expression a
ParenExpr :: a -> (Expression a) -> Expression a
ListExpr :: a -> [Expression a] -> Expression a
CallExpr :: a -> (Expression a) -> [Expression a] -> Expression a
FuncExpr :: a -> (Maybe (Id a)) -> [(Id a)] -> (Statement a) -> Expression a
data CaseClause a
CaseClause :: a -> (Expression a) -> [Statement a] -> CaseClause a
CaseDefault :: a -> [Statement a] -> CaseClause a
data Statement a
BlockStmt :: a -> [Statement a] -> Statement a
EmptyStmt :: a -> Statement a
ExprStmt :: a -> (Expression a) -> Statement a
IfStmt :: a -> (Expression a) -> (Statement a) -> (Statement a) -> Statement a
IfSingleStmt :: a -> (Expression a) -> (Statement a) -> Statement a
SwitchStmt :: a -> (Expression a) -> [CaseClause a] -> Statement a
WhileStmt :: a -> (Expression a) -> (Statement a) -> Statement a
DoWhileStmt :: a -> (Statement a) -> (Expression a) -> Statement a
BreakStmt :: a -> (Maybe (Id a)) -> Statement a
ContinueStmt :: a -> (Maybe (Id a)) -> Statement a
LabelledStmt :: a -> (Id a) -> (Statement a) -> Statement a
ForInStmt :: a -> (ForInInit a) -> (Expression a) -> (Statement a) -> Statement a
ForStmt :: a -> (ForInit a) -> (Maybe (Expression a)) -> (Maybe (Expression a)) -> (Statement a) -> Statement a
TryStmt :: a -> (Statement a) -> [CatchClause a] -> (Maybe (Statement a)) -> Statement a
ThrowStmt :: a -> (Expression a) -> Statement a
ReturnStmt :: a -> (Maybe (Expression a)) -> Statement a
WithStmt :: a -> (Expression a) -> (Statement a) -> Statement a
VarDeclStmt :: a -> [VarDecl a] -> Statement a
FunctionStmt :: a -> (Id a) -> [(Id a)] -> (Statement a) -> Statement a
data InfixOp
OpLT :: InfixOp
OpLEq :: InfixOp
OpGT :: InfixOp
OpGEq :: InfixOp
OpIn :: InfixOp
OpInstanceof :: InfixOp
OpEq :: InfixOp
OpNEq :: InfixOp
OpStrictEq :: InfixOp
OpStrictNEq :: InfixOp
OpLAnd :: InfixOp
OpLOr :: InfixOp
OpMul :: InfixOp
OpDiv :: InfixOp
OpMod :: InfixOp
OpSub :: InfixOp
OpLShift :: InfixOp
OpSpRShift :: InfixOp
OpZfRShift :: InfixOp
OpBAnd :: InfixOp
OpBXor :: InfixOp
OpBOr :: InfixOp
OpAdd :: InfixOp
data CatchClause a
CatchClause :: a -> (Id a) -> (Statement a) -> CatchClause a
data VarDecl a
VarDecl :: a -> (Id a) -> (Maybe (Expression a)) -> VarDecl a
data JavaScript a
-- | A script in script ... /script tags. This may seem a
-- little silly, but the Flapjax analogue has an inline variant and
-- attribute-inline variant.
Script :: a -> [Statement a] -> JavaScript a
data AssignOp
OpAssign :: AssignOp
OpAssignAdd :: AssignOp
OpAssignSub :: AssignOp
OpAssignMul :: AssignOp
OpAssignDiv :: AssignOp
OpAssignMod :: AssignOp
OpAssignLShift :: AssignOp
OpAssignSpRShift :: AssignOp
OpAssignZfRShift :: AssignOp
OpAssignBAnd :: AssignOp
OpAssignBXor :: AssignOp
OpAssignBOr :: AssignOp
data Id a
Id :: a -> String -> Id a
data PrefixOp
PrefixLNot :: PrefixOp
PrefixBNot :: PrefixOp
PrefixPlus :: PrefixOp
PrefixMinus :: PrefixOp
PrefixTypeof :: PrefixOp
PrefixVoid :: PrefixOp
PrefixDelete :: PrefixOp
data Prop a
PropId :: a -> (Id a) -> Prop a
PropString :: a -> String -> Prop a
PropNum :: a -> Integer -> Prop a
data ForInit a
NoInit :: ForInit a
VarInit :: [VarDecl a] -> ForInit a
ExprInit :: (Expression a) -> ForInit a
data ForInInit a
ForInVar :: (Id a) -> ForInInit a
ForInNoVar :: (Id a) -> ForInInit a
unId :: Id a -> String
data UnaryAssignOp
PrefixInc :: UnaryAssignOp
PrefixDec :: UnaryAssignOp
PostfixInc :: UnaryAssignOp
PostfixDec :: UnaryAssignOp
data LValue a
LVar :: a -> String -> LValue a
LDot :: a -> (Expression a) -> String -> LValue a
LBracket :: a -> (Expression a) -> (Expression a) -> LValue a
instance Typeable1 Id
instance Typeable InfixOp
instance Typeable AssignOp
instance Typeable UnaryAssignOp
instance Typeable PrefixOp
instance Typeable1 Prop
instance Typeable1 ForInInit
instance Typeable1 Statement
instance Typeable1 ForInit
instance Typeable1 VarDecl
instance Typeable1 Expression
instance Typeable1 LValue
instance Typeable1 CatchClause
instance Typeable1 CaseClause
instance Typeable1 JavaScript
instance Show a => Show (Id a)
instance Eq a => Eq (Id a)
instance Ord a => Ord (Id a)
instance Data a => Data (Id a)
instance Show InfixOp
instance Data InfixOp
instance Eq InfixOp
instance Ord InfixOp
instance Enum InfixOp
instance Show AssignOp
instance Data AssignOp
instance Eq AssignOp
instance Ord AssignOp
instance Show UnaryAssignOp
instance Data UnaryAssignOp
instance Eq UnaryAssignOp
instance Ord UnaryAssignOp
instance Show PrefixOp
instance Data PrefixOp
instance Eq PrefixOp
instance Ord PrefixOp
instance Show a => Show (Prop a)
instance Data a => Data (Prop a)
instance Eq a => Eq (Prop a)
instance Ord a => Ord (Prop a)
instance Show a => Show (ForInInit a)
instance Data a => Data (ForInInit a)
instance Eq a => Eq (ForInInit a)
instance Ord a => Ord (ForInInit a)
instance Show a => Show (Statement a)
instance Data a => Data (Statement a)
instance Eq a => Eq (Statement a)
instance Ord a => Ord (Statement a)
instance Show a => Show (ForInit a)
instance Data a => Data (ForInit a)
instance Eq a => Eq (ForInit a)
instance Ord a => Ord (ForInit a)
instance Show a => Show (VarDecl a)
instance Data a => Data (VarDecl a)
instance Eq a => Eq (VarDecl a)
instance Ord a => Ord (VarDecl a)
instance Show a => Show (Expression a)
instance Data a => Data (Expression a)
instance Eq a => Eq (Expression a)
instance Ord a => Ord (Expression a)
instance Show a => Show (LValue a)
instance Eq a => Eq (LValue a)
instance Ord a => Ord (LValue a)
instance Data a => Data (LValue a)
instance Show a => Show (CatchClause a)
instance Data a => Data (CatchClause a)
instance Eq a => Eq (CatchClause a)
instance Ord a => Ord (CatchClause a)
instance Show a => Show (CaseClause a)
instance Data a => Data (CaseClause a)
instance Eq a => Eq (CaseClause a)
instance Ord a => Ord (CaseClause a)
instance Show a => Show (JavaScript a)
instance Data a => Data (JavaScript a)
instance Eq a => Eq (JavaScript a)
instance Ord a => Ord (JavaScript a)
module BrownPLT.JavaScript.Parser
parseScript :: CharParser state (JavaScript SourcePos)
parseExpression :: ExpressionParser st
parseString :: String -> [Statement SourcePos]
parseScriptFromString :: String -> String -> Either ParseError (JavaScript SourcePos)
emptyParsedJavaScript :: JavaScript a
type ParsedStatement = Statement SourcePos
type ParsedExpression = Expression SourcePos
parseJavaScriptFromFile :: MonadIO m => String -> m [Statement SourcePos]
parseSimpleExpr' :: GenParser Char st ParsedExpression
parseBlockStmt :: StatementParser st
parseStatement :: StatementParser st
type StatementParser state = CharParser state ParsedStatement
type ExpressionParser state = CharParser state ParsedExpression
assignExpr :: ExpressionParser st
-- | Pretty-printing JavaScript.
module BrownPLT.JavaScript.PrettyPrint
stmt :: Statement a -> Doc
expr :: Expression a -> Doc
javaScript :: JavaScript a -> Doc
renderStatements :: [Statement a] -> String
renderExpression :: Expression a -> String
module BrownPLT.JavaScript.Environment
env :: Map String SourcePos -> [Statement SourcePos] -> (EnvTree, Map String SourcePos)
localVars :: [Statement SourcePos] -> [(String, SourcePos)]
-- | The statically-determinate lexical structure of a JavaScript program.
data EnvTree
EnvTree :: (Map String SourcePos) -> [EnvTree] -> EnvTree
-- | Re-exports commonly used modules.
module BrownPLT.JavaScript
renderStatements :: [Statement a] -> String
renderExpression :: Expression a -> String