language-ecmascript-0.9: JavaScript analysis tools

Safe HaskellSafe-Infered



ECMAScript 3 syntax. Spec refers to the ECMA-262 specification, 3rd edition.



data JavaScript a Source


Script a [Statement a]

A script in <script> ... </script> tags.

unJavaScript :: JavaScript a -> [Statement a]Source

extracts statements from a JavaScript type

data Statement a Source

Statements, spec 12.


BlockStmt a [Statement a]

{stmts}, spec 12.1

EmptyStmt a

;, spec 12.3

ExprStmt a (Expression a)

expr;, spec 12.4

IfStmt a (Expression a) (Statement a) (Statement a)

if (e) stmt, spec 12.5

IfSingleStmt a (Expression a) (Statement a)

if (e) stmt1 else stmt2, spec 12.5

SwitchStmt a (Expression a) [CaseClause a]

switch (e) clauses, spec 12.11

WhileStmt a (Expression a) (Statement a)

while (e) do stmt, spec 12.6

DoWhileStmt a (Statement a) (Expression a)

do stmt while (e);, spec 12.6

BreakStmt a (Maybe (Id a))

break lab;, spec 12.8

ContinueStmt a (Maybe (Id a))

continue lab;, spec 12.7

LabelledStmt a (Id a) (Statement a)

lab: stmt, spec 12.12

ForInStmt a (ForInInit a) (Expression a) (Statement a)

for (x in o) stmt, spec 12.6

ForStmt a (ForInit a) (Maybe (Expression a)) (Maybe (Expression a)) (Statement a)

ForStmt a init test increment body, for (init; test, increment) body, spec 12.6

TryStmt a (Statement a) (Maybe (CatchClause a)) (Maybe (Statement a))

try stmt catch(x) stmt finally stmt, spec 12.14

ThrowStmt a (Expression a)

throw expr;, spec 12.13

ReturnStmt a (Maybe (Expression a))

return expr;, spec 12.9

WithStmt a (Expression a) (Statement a)

with (o) stmt, spec 12.10

VarDeclStmt a [VarDecl a]

var x, y=42;, spec 12.2

FunctionStmt a (Id a) [Id a] (Statement a)

function f(x, y, z) {...}, spec 13

isIterationStmt :: Statement a -> BoolSource

Returns True if the statement is an IterationStatement according to spec 12.6.

data CaseClause a Source

Case clauses, spec 12.11


CaseClause a (Expression a) [Statement a]
case e: stmts;
CaseDefault a [Statement a]
default: stmts;

data CatchClause a Source

Catch clause, spec 12.14


CatchClause a (Id a) (Statement a)
catch (x) {...}

data ForInit a Source

for initializer, spec 12.6




VarInit [VarDecl a]
var x, y=42
ExprInit (Expression a)

data ForInInit a Source initializer, spec 12.6


ForInVar (Id a)
var x
ForInLVal (LValue a)

foo.baz, foo[bar], z

data VarDecl a Source

A variable declaration, spec 12.2


VarDecl a (Id a) (Maybe (Expression a))
var x = e;

data Expression a Source

Expressions, see spec 11


StringLit a String

"foo", spec 11.1.3, 7.8

RegexpLit a String Bool Bool

RegexpLit a regexp global? case_insensitive? -- regular expression, see spec 11.1.3, 7.8

NumLit a Double

41.99999, spec 11.1.3, 7.8

IntLit a Int

42, spec 11.1.3, 7.8

BoolLit a Bool

true, spec 11.1.3, 7.8

NullLit a

null, spec 11.1.3, 7.8

ArrayLit a [Expression a]

[1,2,3], spec 11.1.4

ObjectLit a [(Prop a, Expression a)]

{foo:"bar", baz: 42}, spec 11.1.5

ThisRef a

this, spec 11.1.1

VarRef a (Id a)

foo, spec 11.1.2

DotRef a (Expression a) (Id a), spec 11.2.1

BracketRef a (Expression a) (Expression a)

foo[bar, spec 11.2.1

NewExpr a (Expression a) [Expression a]

new foo(bar), spec 11.2.2

PrefixExpr a PrefixOp (Expression a)

@e, spec 11.4 (excluding 11.4.4, 111.4.5)

UnaryAssignExpr a UnaryAssignOp (LValue a)

++x, x-- etc., spec 11.3, 11.4.4, 11.4.5

InfixExpr a InfixOp (Expression a) (Expression a)

e1@e2, spec 11.5, 11.6, 11.7, 11.8, 11.9, 11.10, 11.11

CondExpr a (Expression a) (Expression a) (Expression a)

e1 ? e2 : e3, spec 11.12

AssignExpr a AssignOp (LValue a) (Expression a)

e1 @=e2, spec 11.13

ParenExpr a (Expression a)

(e), spec 11.1.6

ListExpr a [Expression a]

e1, e2, spec 11.14

CallExpr a (Expression a) [Expression a]

f(x,y,z), spec 11.2.3 funcexprs are optionally named

FuncExpr a (Maybe (Id a)) [Id a] (Statement a)

function f (x,y,z) {...}, spec 11.2.5, 13

data Id a Source


Id a String 


Functor Id 
Typeable1 Id 
Foldable Id 
Traversable Id 
Eq a => Eq (Id a) 
Data a => Data (Id a) 
Ord a => Ord (Id a) 
Show a => Show (Id a) 

data PrefixOp Source

Prefix operators: see spec 11.4 (excluding 11.4.4, 11.4.5)

data Prop a Source

Property names in an object initializer: see spec 11.1.5


PropId a (Id a)

property name is an identifier, foo

PropString a String

property name is a string, "foo"

PropNum a Integer

property name is an integer, 42


data UnaryAssignOp Source

Unary assignment operators: see spec 11.3, 11.4.4, 11.4.5

data LValue a Source

Left-hand side expressions: see spec 11.2


LVar a String

variable reference, foo

LDot a (Expression a) String
LBracket a (Expression a) (Expression a)

data SourcePos

The abstract data type SourcePos represents source positions. It contains the name of the source (i.e. file name), a line number and a column number. SourcePos is an instance of the Show, Eq and Ord class.