Documentation ¶
Index ¶
- Constants
- func Atoi(s string) int
- func CleanCType(s string) (out string)
- func ConvertFunctionNameFromCtoGo(name string) string
- func ConvertToUnsigned(expr goast.Expr, returnType string) goast.Expr
- func GenerateCorrectType(name string) (result string)
- func GetExportedName(field string) string
- func GetRegex(rx string) *regexp.Regexp
- func InStrings(item string, items []string) bool
- func IsAValidFunctionName(s string) bool
- func IsFunction(s string) bool
- func IsGoKeyword(w string) bool
- func IsGoPackage(w string) bool
- func IsLastArray(s string) bool
- func NewAnonymousFunction(body, deferBody []goast.Stmt, returnValue goast.Expr, returnType string) *goast.CallExpr
- func NewBinaryExpr(left goast.Expr, operator token.Token, right goast.Expr, returnType string, ...) goast.Expr
- func NewCallExpr(functionName string, args ...goast.Expr) *goast.CallExpr
- func NewExprStmt(expr goast.Expr) *goast.ExprStmt
- func NewFloatLit(value float64) *goast.BasicLit
- func NewFuncClosure(returnType string, stmts ...goast.Stmt) *goast.CallExpr
- func NewFuncType(fieldList *goast.FieldList, returnType string, addDefaultReturn bool) *goast.FuncType
- func NewGoExpr(expr string) goast.Expr
- func NewIdent(name string) *goast.Ident
- func NewIntLit(value int) *goast.BasicLit
- func NewNil() *goast.Ident
- func NewStringLit(value string) *goast.BasicLit
- func NewTypeIdent(name string) goast.Expr
- func NewUnaryExpr(expr goast.Expr, operator token.Token) *goast.UnaryExpr
- func PanicIfNil(check interface{}, message string)
- func PanicOnError(err error, message string)
- func ParseFunction(s string) (prefix string, funcname string, f []string, r []string, err error)
- func ShowDiff(a, b string) string
- func Ucfirst(word string) string
Constants ¶
const C4GoPostFixForAvoid string = "_c4go_postfix"
Variables ¶
This section is empty.
Functions ¶
func Atoi ¶
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 CleanCType ¶
CleanCType - remove from C type not Go type
func ConvertFunctionNameFromCtoGo ¶
ConvertFunctionNameFromCtoGo - convert function name fromC to Go
func ConvertToUnsigned ¶
ConvertToUnsigned - return convertion from signed to unsigned type
s := func() uint { var x int64 x = -1 return uint(x) }()
func GenerateCorrectType ¶
GenerateCorrectType - generate correct type Example: 'union (anonymous union at tests/union.c:46:3)'
func GetExportedName ¶
GetExportedName returns a deterministic and Go safe name for a C type. For example, "*__foo[]" will return "FooSlice".
func IsAValidFunctionName ¶
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 IsFunction ¶
IsFunction - return true if string is function like "void (*)(void)"
func IsGoKeyword ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
NewFloatLit creates a new Float Literal.
func NewFuncClosure ¶
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 ¶
func NewFuncType(fieldList *goast.FieldList, returnType string, addDefaultReturn bool) *goast.FuncType
NewFuncType - create a new function type, example: func ...(fieldList)(returnType)
func NewGoExpr ¶
NewGoExpr is used to facilitate the creation of go AST
It should not be used to transpile user code.
func NewStringLit ¶
NewStringLit returns a new Go basic literal with a string value.
func NewTypeIdent ¶
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 ¶
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 PanicIfNil ¶
func PanicIfNil(check interface{}, message string)
PanicIfNil will panic with the message provided if the check is nil. This is a convenience method to avoid many similar if statements.
func PanicOnError ¶
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 ParseFunction ¶
ParseFunction - parsing elements of C function
Types ¶
This section is empty.