重现案例:
package main
import "go/ast"
func main() {
var node ast.Node
var lit *ast.CompositeLit
switch n := node.(type) {
case *ast.CompositeLit:
lit = n
lit.
case *ast.KeyValueExpr:
}
}
在这个案例中, lit. case *ast.KeyValueExpr:
被解析为一个 *ast.BadStmt。这对于需要处理损坏代码的工具来说是一个问题。
2条答案
按热度按时间wnavrhmk1#
/cc @ianthehat
kmpatx3s2#
看看
cmd/compile/internal/syntax
在这里做了什么可能会很有趣。就我所看到的,它在边缘情况和错误处理方面做得更好。尽管目前似乎没有一个BadStmt
的等效物。