traefik / yaegi

Yaegi is Another Elegant Go Interpreter
https://pkg.go.dev/github.com/traefik/yaegi
Apache License 2.0
7.02k stars 349 forks source link

count, err = 1, nil // panic: reflect: New(nil) #1583

Open he11olx opened 1 year ago

he11olx commented 1 year ago

The following program sample.go triggers an unexpected result

package main

import (
    "errors"
    "go/build"

    "github.com/traefik/yaegi/interp"
    "github.com/traefik/yaegi/stdlib"
)

func main() {
    inter := interp.New(interp.Options{GoPath: build.Default.GOPATH})
    inter.Use(stdlib.Symbols)

    var s2 = `package s2

func Handler(err error) int{
    var count int
    if err!= nil {
        count, err = 1, nil // panic: reflect: New(nil)

        // count, err = 1, error(nil) // It's ok

        // It's ok
        // count = 1 
        // err = nil 
    }
    return count
}`
    inter.Eval(s2)
    i, _ := inter.Eval("s2.Handler")
    f := i.Interface().(func(err error) int)
    f(errors.New("test"))
}

Expected result

not paic

Got

panic: reflect: New(nil)

Yaegi Version

latest

Additional Notes

No response