github.com/mattn/anko@v0.1.10/ast/expr.go (about) 1 package ast 2 3 import ( 4 "reflect" 5 ) 6 7 // Expr provides all of interfaces for expression. 8 type Expr interface { 9 Pos 10 } 11 12 // ExprImpl provide commonly implementations for Expr. 13 type ExprImpl struct { 14 PosImpl // PosImpl provide Pos() function. 15 } 16 17 // OpExpr provide operator expression. 18 type OpExpr struct { 19 ExprImpl 20 Op Operator 21 } 22 23 // LiteralExpr provide literal expression. 24 type LiteralExpr struct { 25 ExprImpl 26 Literal reflect.Value 27 } 28 29 // ArrayExpr provide Array expression. 30 type ArrayExpr struct { 31 ExprImpl 32 Exprs []Expr 33 TypeData *TypeStruct 34 } 35 36 // MapExpr provide Map expression. 37 type MapExpr struct { 38 ExprImpl 39 Keys []Expr 40 Values []Expr 41 TypeData *TypeStruct 42 } 43 44 // IdentExpr provide identity expression. 45 type IdentExpr struct { 46 ExprImpl 47 Lit string 48 } 49 50 // UnaryExpr provide unary minus expression. ex: -1, ^1, ~1. 51 type UnaryExpr struct { 52 ExprImpl 53 Operator string 54 Expr Expr 55 } 56 57 // AddrExpr provide referencing address expression. 58 type AddrExpr struct { 59 ExprImpl 60 Expr Expr 61 } 62 63 // DerefExpr provide dereferencing address expression. 64 type DerefExpr struct { 65 ExprImpl 66 Expr Expr 67 } 68 69 // ParenExpr provide parent block expression. 70 type ParenExpr struct { 71 ExprImpl 72 SubExpr Expr 73 } 74 75 // NilCoalescingOpExpr provide if invalid operator expression. 76 type NilCoalescingOpExpr struct { 77 ExprImpl 78 LHS Expr 79 RHS Expr 80 } 81 82 // TernaryOpExpr provide ternary operator expression. 83 type TernaryOpExpr struct { 84 ExprImpl 85 Expr Expr 86 LHS Expr 87 RHS Expr 88 } 89 90 // CallExpr provide calling expression. 91 type CallExpr struct { 92 ExprImpl 93 Func reflect.Value 94 Name string 95 SubExprs []Expr 96 VarArg bool 97 Go bool 98 } 99 100 // AnonCallExpr provide anonymous calling expression. ex: func(){}(). 101 type AnonCallExpr struct { 102 ExprImpl 103 Expr Expr 104 SubExprs []Expr 105 VarArg bool 106 Go bool 107 } 108 109 // MemberExpr provide expression to refer member. 110 type MemberExpr struct { 111 ExprImpl 112 Expr Expr 113 Name string 114 } 115 116 // ItemExpr provide expression to refer Map/Array item. 117 type ItemExpr struct { 118 ExprImpl 119 Item Expr 120 Index Expr 121 } 122 123 // SliceExpr provide expression to refer slice of Array. 124 type SliceExpr struct { 125 ExprImpl 126 Item Expr 127 Begin Expr 128 End Expr 129 Cap Expr 130 } 131 132 // FuncExpr provide function expression. 133 type FuncExpr struct { 134 ExprImpl 135 Name string 136 Stmt Stmt 137 Params []string 138 VarArg bool 139 } 140 141 // LetsExpr provide multiple expression of let. 142 type LetsExpr struct { 143 ExprImpl 144 LHSS []Expr 145 RHSS []Expr 146 } 147 148 // ChanExpr provide chan expression. 149 type ChanExpr struct { 150 ExprImpl 151 LHS Expr 152 RHS Expr 153 } 154 155 // ImportExpr provide expression to import packages. 156 type ImportExpr struct { 157 ExprImpl 158 Name Expr 159 } 160 161 // MakeExpr provide expression to make instance. 162 type MakeExpr struct { 163 ExprImpl 164 TypeData *TypeStruct 165 LenExpr Expr 166 CapExpr Expr 167 } 168 169 // MakeTypeExpr provide expression to make type. 170 type MakeTypeExpr struct { 171 ExprImpl 172 Name string 173 Type Expr 174 } 175 176 // LenExpr provide expression to get length of array, map, etc. 177 type LenExpr struct { 178 ExprImpl 179 Expr Expr 180 } 181 182 // IncludeExpr provide in expression 183 type IncludeExpr struct { 184 ExprImpl 185 ItemExpr Expr 186 ListExpr Expr 187 }