EIgnore(skipSemicolon:Bool)
EConst(c:Const)
EIdent(v:String)
EImport(v:String, as:String)
EVar(n:String, t:CType, e:Expr, isConst:Bool)
EParent(e:Expr)
EBlock(e:Array<Expr>)
EField(e:Expr, f:String, s:Bool)
EBinop(op:String, e1:Expr, e2:Expr)
EUnop(op:String, prefix:Bool, e:Expr)
ECall(e:Expr, params:Array<Expr>)
EIf(cond:Expr, e1:Expr, e2:Expr)
EWhile(cond:Expr, e:Expr)
EFor(v:String, it:Expr, e:Expr)
EBreak
EContinue
EFunction(args:Array<Argument>, e:Expr, name:String, ret:CType)
EReturn(e:Expr)
EArray(e:Expr, index:Expr)
EArrayDecl(e:Array<Expr>)
ENew(cl:String, params:Array<Expr>)
EThrow(e:Expr)
ETry(e:Expr, v:String, t:Null<CType>, ecatch:Expr)
EObject(fl:Array<ObjectDecl>)
ETernary(cond:Expr, e1:Expr, e2:Expr)
ESwitch(e:Expr, cases:Array<SwitchCase>, defaultExpr:Expr)
EDoWhile(cond:Expr, e:Expr)
EMeta(name:String, args:Array<Expr>, e:Expr)
ECheckType(e:Expr, t:CType)
EEnum(name:String, fields:Array<EnumType>)
EDirectValue(value:Dynamic)
EUsing(name:String)