optimize: fix experimental api (#3604)

This commit is contained in:
kesonan
2023-10-07 19:48:41 +08:00
committed by GitHub
parent 1ff541afe4
commit 02c95108b9
4 changed files with 49 additions and 15 deletions

View File

@@ -31,18 +31,40 @@ func convert2API(a *ast.AST, importManager map[string]placeholder.Type) (*API, e
one := a.Stmts[0]
syntax, ok := one.(*ast.SyntaxStmt)
if !ok {
return nil, ast.SyntaxError(one.Pos(), "expected syntax statement, got <%T>", one)
syntax = &ast.SyntaxStmt{
Syntax: ast.NewTokenNode(token.Token{
Type: token.IDENT,
Text: token.Syntax,
}),
Assign: ast.NewTokenNode(token.Token{
Type: token.ASSIGN,
Text: "=",
}),
Value: ast.NewTokenNode(token.Token{
Type: token.STRING,
Text: `"v1"`,
}),
}
}
api.Syntax = syntax
for i := 1; i < len(a.Stmts); i++ {
api.Syntax = syntax
var hasSyntax, hasInfo bool
for i := 0; i < len(a.Stmts); i++ {
one := a.Stmts[i]
switch val := one.(type) {
case *ast.SyntaxStmt:
return nil, ast.DuplicateStmtError(val.Pos(), "duplicate syntax statement")
if hasSyntax {
return nil, ast.DuplicateStmtError(val.Pos(), "duplicate syntax statement")
} else {
hasSyntax = true
}
case *ast.InfoStmt:
if api.info != nil {
return nil, ast.DuplicateStmtError(val.Pos(), "duplicate info statement")
if hasInfo {
return nil, ast.DuplicateStmtError(val.Pos(), "duplicate info statement")
}
} else {
hasInfo = true
}
api.info = val
case ast.ImportStmt: