mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-13 20:16:30 +00:00
c28f7cb29f
Initial part of #435 |
||
---|---|---|
.. | ||
.travis.yml | ||
astcopy.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
README.md |
astcopy
Package astcopy implements Go AST reflection-free deep copy operations.
Installation:
go get github.com/go-toolsmith/astcopy
Example
package main
import (
"fmt"
"go/ast"
"go/token"
"github.com/go-toolsmith/astcopy"
"github.com/go-toolsmith/astequal"
"github.com/go-toolsmith/strparse"
)
func main() {
x := strparse.Expr(`1 + 2`).(*ast.BinaryExpr)
y := astcopy.BinaryExpr(x)
fmt.Println(astequal.Expr(x, y)) // => true
// Now modify x and make sure y is not modified.
z := astcopy.BinaryExpr(y)
x.Op = token.SUB
fmt.Println(astequal.Expr(y, z)) // => true
fmt.Println(astequal.Expr(x, y)) // => false
}