本文整理汇总了Golang中go/ast.Stmt.X方法的典型用法代码示例。如果您正苦于以下问题:Golang Stmt.X方法的具体用法?Golang Stmt.X怎么用?Golang Stmt.X使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类go/ast.Stmt
的用法示例。
在下文中一共展示了Stmt.X方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: MangleStatement
func (sc *PackageScoping) MangleStatement(st ast.Stmt) {
switch st := st.(type) {
case *ast.IncDecStmt:
sc.MangleExpr(st.X)
case *ast.BlockStmt:
if st != nil && st.List != nil {
for _, x := range st.List {
sc.MangleStatement(x)
}
}
case *ast.ForStmt:
sc.MangleStatement(st.Post)
sc.MangleExpr(st.Cond)
sc.MangleStatement(st.Body)
sc.MangleStatement(st.Init)
case *ast.IfStmt:
sc.MangleStatement(st.Init)
sc.MangleExpr(st.Cond)
sc.MangleStatement(st.Body)
sc.MangleStatement(st.Else)
case *ast.AssignStmt:
for i := range st.Lhs {
st.Lhs[i] = sc.MangleExpr(st.Lhs[i])
}
for i := range st.Rhs {
st.Rhs[i] = sc.MangleExpr(st.Rhs[i])
}
case *ast.ExprStmt:
sc.MangleExpr(st.X)
case *ast.DeclStmt:
switch decl := st.Decl.(type) {
case *ast.GenDecl:
if decl.Tok != token.VAR {
panic(fmt.Sprint("I don't understand decl with tok", decl.Tok))
}
for _, spec := range decl.Specs {
s := spec.(*ast.ValueSpec)
sc.MangleExpr(s.Type)
for _, v := range s.Values {
sc.MangleExpr(v)
}
}
default:
panic("Weird Decl here...")
}
case *ast.ReturnStmt:
for _, e := range st.Results {
sc.MangleExpr(e)
}
case *ast.RangeStmt:
st.Key = sc.MangleExpr(st.Key)
st.Value = sc.MangleExpr(st.Value)
st.X = sc.MangleExpr(st.X)
sc.MangleStatement(st.Body)
case *ast.SwitchStmt:
st.Tag = sc.MangleExpr(st.Tag)
sc.MangleStatement(st.Init)
sc.MangleStatement(st.Body)
case *ast.CaseClause:
for i := range st.List {
st.List[i] = sc.MangleExpr(st.List[i])
}
for _, st2 := range st.Body {
sc.MangleStatement(st2)
}
case nil:
// Nothing to do with a statement of type nil!
default:
panic(fmt.Sprintf("Tracked weird statement of type %T", st))
}
}