forked from awfeequdng/px_golang2cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse_branch_stmt.go
41 lines (39 loc) · 881 Bytes
/
parse_branch_stmt.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
import (
"go/ast"
"go/token"
"log"
)
func ParseBranchStmt(stmt *ast.BranchStmt) []string {
var ret[]string
//BREAK, CONTINUE, GOTO, FALLTHROUGH
switch stmt.Tok {
case token.BREAK:
//log.Fatal("not implemented BREAK")
if stmt.Label != nil {
label := stmt.Label.Name
ret = append(ret, "goto " + label + ";")
} else {
ret = append(ret, "break;")
}
case token.GOTO:
if stmt.Label != nil {
label := stmt.Label.Name
ret = append(ret, "goto " + label + ";")
} else {
log.Fatal("implement GOTO error: no label")
}
case token.CONTINUE:
if stmt.Label != nil {
label := stmt.Label.Name
ret = append(ret, "continue " + label + ";")
} else {
ret = append(ret, "continue;")
}
case token.FALLTHROUGH:
ret = append(ret, "[[fallthrough]];")
default:
log.Fatal("invalid token type: " + stmt.Tok.String())
}
return ret
}