Repository: goplus/xgo

Issue:
expr? compile error
### The following program `sample.gop` triggers an unexpected result

```coffee
func F() (a int8, b int16, err error) {
	a = 1
	return
}

func F2() (err error) {
	c, d := F()?
	_ = c
	_ = d
	return
}

F2()
println "ok"
```

### Expected result

```console
ok
```

### Got

```console
prog.xgo:7:2: assignment mismatch: 2 variables but 1 values
prog.xgo:8:6: undefined: c
prog.xgo:9:6: undefined: d
```

### XGo Version

The XGo Playground

### Additional Notes

_No response_

Hints from issue comments:
@funnywwh: c, d := F()! pass,but c, d := F()? failed.
@xushiwei 

Solution patch:
diff --git a/cl/_testgop/errwrap1/in.xgo b/cl/_testgop/errwrap1/in.xgo
new file mode 100644
index 00000000..0d9a3663
--- /dev/null
+++ b/cl/_testgop/errwrap1/in.xgo
@@ -0,0 +1,13 @@
+func F() (a int8, b int16, err error) {
+	a = 1
+	return
+}
+
+func F2() (err error) {
+	c, d := F()!
+	_ = c
+	_ = d
+	return
+}
+
+F2()
\ No newline at end of file


Test patch:
diff --git a/cl/_testgop/domaintext-json/out.go b/cl/_testgop/domaintext-json/out.go
index 0fa2a0e5..c8a8899e 100644
--- a/cl/_testgop/domaintext-json/out.go
+++ b/cl/_testgop/domaintext-json/out.go
@@ -2,7 +2,6 @@ package main
 
 import (
 	"fmt"
-
 	"github.com/goplus/xgo/tpl/encoding/json"
 )
 
diff --git a/cl/_testgop/domaintext-regexp/out.go b/cl/_testgop/domaintext-regexp/out.go
index f3df736e..4f07d24b 100644
--- a/cl/_testgop/domaintext-regexp/out.go
+++ b/cl/_testgop/domaintext-regexp/out.go
@@ -2,7 +2,6 @@ package main
 
 import (
 	"fmt"
-
 	"github.com/goplus/xgo/tpl/encoding/regexp"
 )
 
diff --git a/cl/_testgop/enumlines-rdr/out.go b/cl/_testgop/enumlines-rdr/out.go
index fbe363a1..a80231d3 100644
--- a/cl/_testgop/enumlines-rdr/out.go
+++ b/cl/_testgop/enumlines-rdr/out.go
@@ -2,9 +2,8 @@ package main
 
 import (
 	"fmt"
-	"io"
-
 	"github.com/qiniu/x/osx"
+	"io"
 )
 
 var r io.Reader
diff --git a/cl/_testgop/enumlines-stdin/out.go b/cl/_testgop/enumlines-stdin/out.go
index c1e87d2e..15d2e4f3 100644
--- a/cl/_testgop/enumlines-stdin/out.go
+++ b/cl/_testgop/enumlines-stdin/out.go
@@ -2,9 +2,8 @@ package main
 
 import (
 	"fmt"
-	"os"
-
 	"github.com/qiniu/x/osx"
+	"os"
 )
 
 func main() {
diff --git a/cl/_testgop/errwrap1/out.go b/cl/_testgop/errwrap1/out.go
new file mode 100644
index 00000000..757a7fc7
--- /dev/null
+++ b/cl/_testgop/errwrap1/out.go
@@ -0,0 +1,25 @@
+package main
+
+import "github.com/qiniu/x/errors"
+
+func F() (a int8, b int16, err error) {
+	a = 1
+	return
+}
+func F2() (err error) {
+	c, d := func() (_xgo_ret int8, _xgo_ret2 int16) {
+		var _xgo_err error
+		_xgo_ret, _xgo_ret2, _xgo_err = F()
+		if _xgo_err != nil {
+			_xgo_err = errors.NewFrame(_xgo_err, "F()", "cl/_testgop/errwrap1/in.xgo", 7, "main.F2")
+			panic(_xgo_err)
+		}
+		return
+	}()
+	_ = c
+	_ = d
+	return
+}
+func main() {
+	F2()
+}
diff --git a/cl/_testgop/rangeexpr/out.go b/cl/_testgop/rangeexpr/out.go
index 2da3a589..1d465ef8 100644
--- a/cl/_testgop/rangeexpr/out.go
+++ b/cl/_testgop/rangeexpr/out.go
@@ -2,13 +2,12 @@ package main
 
 import (
 	"fmt"
-
-	"github.com/qiniu/x/gop"
+	"github.com/qiniu/x/xgo"
 )
 
 func main() {
 	fmt.Println(func() (_xgo_ret []int) {
-		for _xgo_it := gop.NewRange__0(0, 3, 1).Gop_Enum(); ; {
+		for _xgo_it := xgo.NewRange__0(0, 3, 1).Gop_Enum(); ; {
 			var _xgo_ok bool
 			x, _xgo_ok := _xgo_it.Next()
 			if !_xgo_ok {
diff --git a/cl/_testgop/unit/out.go b/cl/_testgop/unit/out.go
index bd6b4176..6ca4058b 100644
--- a/cl/_testgop/unit/out.go
+++ b/cl/_testgop/unit/out.go
@@ -1,9 +1,8 @@
 package main
 
 import (
-	"time"
-
 	"github.com/goplus/xgo/cl/internal/unit"
+	"time"
 )
 
 func Wait(time.Duration) {
diff --git a/cl/compile_testdir_test.go b/cl/compile_testdir_test.go
index d44a0b52..f1e47c32 100644
--- a/cl/compile_testdir_test.go
+++ b/cl/compile_testdir_test.go
@@ -27,7 +27,7 @@ func TestTestspx(t *testing.T) {
 }
 
 func TestTestgop(t *testing.T) {
-	cltest.FromDir(t, "fatal", "./_testgop")
+	cltest.FromDir(t, "", "./_testgop")
 }
 
 func TestTestc(t *testing.T) {