util

package
v0.24.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 18, 2018 License: MIT Imports: 10 Imported by: 50

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Atoi added in v0.9.0

func Atoi(s string) int

Atoi converts a string to an integer in cases where we are sure that s will be a valid integer, otherwise it will panic.

func ConvertFunctionNameFromCtoGo added in v0.18.0

func ConvertFunctionNameFromCtoGo(name string) string

ConvertFunctionNameFromCtoGo - convert function name fromC to Go

func CreateSliceFromReference added in v0.14.0

func CreateSliceFromReference(goType string, expr goast.Expr) *goast.SliceExpr

CreateSliceFromReference - create a slice, like : (*[1]int)(unsafe.Pointer(&a))[:]

func CreateUnlimitedSliceFromReference added in v0.23.1

func CreateUnlimitedSliceFromReference(goType string, expr goast.Expr) *goast.SliceExpr

CreateUnlimitedSliceFromReference - create a slice, like : (*[1000000000]int)(unsafe.Pointer(&a))[:]

func EvaluateConstExpr added in v0.23.6

func EvaluateConstExpr(expr goast.Expr) (isConst bool, value int64)

EvaluateConstExpr evaluates the given expression. Returns whether the expr is an integer constant, and the resulting number if constant.

func GetExportedName added in v0.9.0

func GetExportedName(field string) string

GetExportedName returns a deterministic and Go safe name for a C type. For example, "*__foo[]" will return "FooSlice".

func GetRegex added in v0.16.5

func GetRegex(rx string) *regexp.Regexp

GetRegex return regexp added for minimaze regexp compilation

func GetUintptrForSlice added in v0.21.10

func GetUintptrForSlice(expr goast.Expr) (goast.Expr, string)

GetUintptrForSlice - return uintptr for slice Example : uint64(uintptr(unsafe.Pointer((*(**int)(unsafe.Pointer(& ...slice... )))))))

func GroupsFromRegex added in v0.13.3

func GroupsFromRegex(rx, line string) map[string]string

GroupsFromRegex gets RegExp groups after matching it on a line

func InStrings

func InStrings(item string, items []string) bool

InStrings returns true if item exists in items. It must be an exact string match.

func IsAValidFunctionName added in v0.12.4

func IsAValidFunctionName(s string) bool

IsAValidFunctionName performs a check to see if a string would make a valid function name in Go. Go allows unicode characters, but C doesn't.

func IsAddressable added in v0.23.6

func IsAddressable(expr goast.Expr) bool

IsAddressable returns whether it's possible to obtain an address of expr using the unary & operator.

func IsGoKeyword added in v0.14.0

func IsGoKeyword(w string) bool

IsGoKeyword will return true if a word is one of the reserved words in Go. This means that it cannot be used as an identifier, function name, etc.

The list of reserved words has been taken from the spec at https://golang.org/ref/spec#Keywords

func NewAnonymousFunction added in v0.21.2

func NewAnonymousFunction(body, deferBody []goast.Stmt,
	returnValue goast.Expr,
	returnType string) *goast.CallExpr

NewAnonymousFunction - create a new anonymous function. Example:

func() returnType{
		defer func(){
			deferBody
		}()
		body
		return returnValue
}

func NewBinaryExpr added in v0.11.0

func NewBinaryExpr(left goast.Expr, operator token.Token, right goast.Expr,
	returnType string, stmt bool) goast.Expr

NewBinaryExpr create a new Go AST binary expression with a left, operator and right operand.

You should use this instead of BinaryExpr directly so that nil left and right operands can be caught (and panic) before Go tried to render the source - which would result in a very hard to debug error.

Assignment operators in C can be nested inside other expressions, like:

a + (b += 3)

In Go this is not allowed. Since the operators mutate variables it is not possible in some cases to move the statements before or after. The only safe (and generic) way around this is to create an immediately executing closure, like:

a + (func () int { b += 3; return b }())

In a lot of cases this may be unnecessary and obfuscate the Go output but these will have to be optimised over time and be strict about the situation they are simplifying.

If stmt is true then the binary expression is the whole statement. This means that the closure above does not need to applied. This makes the output code much neater.

func NewCallExpr added in v0.11.0

func NewCallExpr(functionName string, args ...goast.Expr) *goast.CallExpr

NewCallExpr creates a new *"go/ast".CallExpr with each of the arguments (after the function name) being each of the expressions that represent the individual arguments.

The function name is checked with IsAValidFunctionName and will panic if the function name is deemed to be not valid.

func NewExprStmt added in v0.11.3

func NewExprStmt(expr goast.Expr) *goast.ExprStmt

NewExprStmt returns a new ExprStmt from an expression. It is used when converting a single expression into a statement for another receiver.

It is recommended you use this method of instantiating the ExprStmt yourself because NewExprStmt will check that the expr is not nil (or panic). This is much more helpful when trying to debug why the Go source build crashes because of a nil pointer - which eventually leads back to a nil expr.

func NewFloatLit added in v0.13.2

func NewFloatLit(value float64) *goast.BasicLit

NewFloatLit creates a new Float Literal.

func NewFuncClosure added in v0.12.4

func NewFuncClosure(returnType string, stmts ...goast.Stmt) *goast.CallExpr

NewFuncClosure creates a new *"go/ast".CallExpr that calls a function literal closure. The first argument is the Go return type of the closure, and the remainder of the arguments are the statements of the closure body.

func NewFuncType added in v0.14.0

func NewFuncType(fieldList *goast.FieldList, returnType string, addDefaultReturn bool) *goast.FuncType

NewFuncType - create a new function type, example: func ...(fieldList)(returnType)

func NewGoExpr added in v0.17.5

func NewGoExpr(expr string) goast.Expr

NewGoExpr is used to facilitate the creation of go AST

It should not be used to transpile user code.

func NewIdent added in v0.11.0

func NewIdent(name string) *goast.Ident

NewIdent - create a new Go ast Ident

func NewIntLit added in v0.11.0

func NewIntLit(value int) *goast.BasicLit

NewIntLit - create a Go ast BasicLit for `INT` value

func NewNil added in v0.12.0

func NewNil() *goast.Ident

NewNil returns a Go AST identity that can be used to represent "nil".

func NewStringLit added in v0.11.0

func NewStringLit(value string) *goast.BasicLit

NewStringLit returns a new Go basic literal with a string value.

func NewTypeIdent added in v0.13.2

func NewTypeIdent(name string) goast.Expr

NewTypeIdent created a new Go identity that is to be used for a Go type. This is different from NewIdent in how the input string is validated.

func NewUnaryExpr added in v0.13.2

func NewUnaryExpr(operator token.Token, right goast.Expr) *goast.UnaryExpr

NewUnaryExpr creates a new Go unary expression. You should use this function instead of instantiating the UnaryExpr directly because this function has extra error checking.

func NewVaListTag added in v0.22.0

func NewVaListTag() goast.Expr

NewVaListTag creates a new VaList Literal.

func PanicIfNil added in v0.13.7

func PanicIfNil(check interface{}, message string)

PanicIfNil will panic with the message provided if the check is nil. This is a convieniance method to avoid many similar if statements.

func PanicOnError added in v0.13.7

func PanicOnError(err error, message string)

PanicOnError will panic with the message and error if the error is not nil. If the error is nil (no error) then nothing happens.

func ShowDiff added in v0.11.1

func ShowDiff(a, b string) string

ShowDiff will print two strings vertically next to each other so that line differences are easier to read.

func ToUnsafePointer added in v0.23.6

func ToUnsafePointer(expr goast.Expr) goast.Expr

ToUnsafePointer returns an unsafe Pointer to a temporary Variable to which the given expr is assigned.

func Ucfirst

func Ucfirst(word string) string

Ucfirst returns the word with the first letter uppercased; none of the other letters in the word are modified. For example "fooBar" would return "FooBar".

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL