go/parser:解析无效的switch语句失败

lnlaulya  于 4个月前  发布在  Go
关注(0)|答案(2)|浏览(37)

重现案例:

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。这对于需要处理损坏代码的工具来说是一个问题。

kmpatx3s

kmpatx3s2#

看看cmd/compile/internal/syntax在这里做了什么可能会很有趣。就我所看到的,它在边缘情况和错误处理方面做得更好。尽管目前似乎没有一个BadStmt的等效物。

相关问题