From b03535e045c22b79acb85275d4023a082b2a1e28 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sat, 4 Sep 2021 18:17:51 +0800 Subject: [PATCH] support if..else if --- package_test.go | 7 ++++++- stmt.go | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/package_test.go b/package_test.go index 3b377ac6..6f9081e2 100644 --- a/package_test.go +++ b/package_test.go @@ -1405,8 +1405,11 @@ func TestIfElse(t *testing.T) { /**/ If().DefineVarStart(0, "x").Val(3).EndInit(1). /******/ Val(ctxRef(pkg, "x")).Val(1).BinaryOp(token.GTR).Then(). /******/ Val(fmt.Ref("Println")).Val("OK!").Call(1).EndStmt(). - /**/ Else(). + /**/ Else().If().Val(ctxRef(pkg, "x")).Val(0).BinaryOp(token.GTR).Then(). + /******/ Val(fmt.Ref("Println")).Val("Hi").Call(1).EndStmt(). + /****/ Else(). /******/ Val(fmt.Ref("Println")).Val("Error!").Call(1).EndStmt(). + /****/ End(). /**/ End(). End() domTest(t, pkg, `package main @@ -1416,6 +1419,8 @@ import fmt "fmt" func main() { if x := 3; x > 1 { fmt.Println("OK!") + } else if x > 0 { + fmt.Println("Hi") } else { fmt.Println("Error!") } diff --git a/stmt.go b/stmt.go index 534c6e56..29aec4b3 100644 --- a/stmt.go +++ b/stmt.go @@ -88,6 +88,11 @@ func (p *ifStmt) End(cb *CodeBuilder) { var el ast.Stmt if p.body != nil { // if..else el = blockStmt + if len(stmts) == 1 { // if..else if + if stmt, ok := stmts[0].(*ast.IfStmt); ok { + el = stmt + } + } } else { // if without else p.body = blockStmt }