41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
![]() |
// This package contains utility functions used by pkg/proc to generate
|
||
|
// ast.Expr expressions.
|
||
|
|
||
|
package astutil
|
||
|
|
||
|
import (
|
||
|
"go/ast"
|
||
|
"go/token"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
// Eql returns an expression evaluating 'x == y'.
|
||
|
func Eql(x, y ast.Expr) *ast.BinaryExpr {
|
||
|
return &ast.BinaryExpr{Op: token.EQL, X: x, Y: y}
|
||
|
}
|
||
|
|
||
|
// Sel returns an expression evaluating 'x.sel'.
|
||
|
func Sel(x ast.Expr, sel string) *ast.SelectorExpr {
|
||
|
return &ast.SelectorExpr{X: x, Sel: &ast.Ident{Name: sel}}
|
||
|
}
|
||
|
|
||
|
// PkgVar returns an expression evaluating 'pkg.v'.
|
||
|
func PkgVar(pkg, v string) *ast.SelectorExpr {
|
||
|
return &ast.SelectorExpr{X: &ast.Ident{Name: pkg}, Sel: &ast.Ident{Name: v}}
|
||
|
}
|
||
|
|
||
|
// Int returns an expression representing the integer 'n'.
|
||
|
func Int(n int64) *ast.BasicLit {
|
||
|
return &ast.BasicLit{Kind: token.INT, Value: strconv.FormatInt(n, 10)}
|
||
|
}
|
||
|
|
||
|
// And returns an expression evaluating 'x && y'.
|
||
|
func And(x, y ast.Expr) *ast.BinaryExpr {
|
||
|
return &ast.BinaryExpr{Op: token.LAND, X: x, Y: y}
|
||
|
}
|
||
|
|
||
|
// Or returns an expression evaluating 'x || y'.
|
||
|
func Or(x, y ast.Expr) *ast.BinaryExpr {
|
||
|
return &ast.BinaryExpr{Op: token.LOR, X: x, Y: y}
|
||
|
}
|