@@ -56,6 +56,21 @@ func parseBinaryExpression(expr *ast.BinaryExpr) *Expression {
5656 return res
5757}
5858
59+ func parseUnaryExpression (expr * ast.UnaryExpr ) * Expression {
60+ // Unary expression like:
61+ // -1
62+ op := expr .Op .String ()
63+ inside := parseExpression (& expr .X )
64+ value := fmt .Sprintf ("%s%s" , op , inside )
65+
66+ res := & Expression {
67+ Type : ExpressionTypeDefault ,
68+ Name : value ,
69+ NameType : op ,
70+ }
71+ return res
72+ }
73+
5974func parseParenthesesExpression (expr * ast.ParenExpr ) * Expression {
6075 // Parentheses expression like:
6176 // (1 + 2)
@@ -89,7 +104,7 @@ func parseCallExpression(expr *ast.CallExpr) *Expression {
89104 // append(array, 1)
90105 res := & Expression {
91106 Type : ExpressionTypeCall ,
92- Name : expr .Fun .( * ast. Ident ). Name ,
107+ Name : parseExpression ( & expr .Fun ). String () ,
93108 }
94109
95110 res .Children = Expressions {}
@@ -154,34 +169,39 @@ func parseExpression(expr *ast.Expr) *Expression {
154169 return parseBinaryExpression (e3 )
155170 }
156171
157- e4 , ok := (* expr ).(* ast.ParenExpr )
172+ e4 , ok := (* expr ).(* ast.UnaryExpr )
173+ if ok {
174+ return parseUnaryExpression (e4 )
175+ }
176+
177+ e5 , ok := (* expr ).(* ast.ParenExpr )
158178 if ok {
159- return parseParenthesesExpression (e4 )
179+ return parseParenthesesExpression (e5 )
160180 }
161181
162- e5 , ok := (* expr ).(* ast.CompositeLit )
182+ e6 , ok := (* expr ).(* ast.CompositeLit )
163183 if ok {
164- return parseArrayExpression (e5 )
184+ return parseArrayExpression (e6 )
165185 }
166186
167- e6 , ok := (* expr ).(* ast.CallExpr )
187+ e7 , ok := (* expr ).(* ast.CallExpr )
168188 if ok {
169- return parseCallExpression (e6 )
189+ return parseCallExpression (e7 )
170190 }
171191
172- e7 , ok := (* expr ).(* ast.IndexExpr )
192+ e8 , ok := (* expr ).(* ast.IndexExpr )
173193 if ok {
174- return parseIndexExpression (e7 )
194+ return parseIndexExpression (e8 )
175195 }
176196
177- e8 , ok := (* expr ).(* ast.StarExpr )
197+ e9 , ok := (* expr ).(* ast.StarExpr )
178198 if ok {
179- return parseStarExpression (e8 )
199+ return parseStarExpression (e9 )
180200 }
181201
182- e9 , ok := (* expr ).(* ast.SelectorExpr )
202+ e10 , ok := (* expr ).(* ast.SelectorExpr )
183203 if ok {
184- return parseSelectorExpression (e9 )
204+ return parseSelectorExpression (e10 )
185205 }
186206
187207 panic ("parseExpression(): unknown expression type" )
0 commit comments