yaegi icon indicating copy to clipboard operation
yaegi copied to clipboard

redefinition of type not possible by design?

Open ernest-ag5 opened this issue 2 years ago • 0 comments

The following program sample.go triggers an unexpected result

package main

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

func main() {
	i := interp.New(interp.Options{})

	i.Use(stdlib.Symbols)

	_, err := i.Eval(`import "fmt"`)
	if err != nil {
		panic(err)
	}

	_, err = i.Eval(`

type Color struct {
	Name string
}	
`)
	if err != nil {
		panic(err)
	}
	_, err = i.Eval(`fmt.Println(Color{Name:"white"})`)
	if err != nil {
		panic(err)
	}

	_, err = i.Eval(`
	
type Color struct {
	Name string
	Value int
}	
`)
	if err != nil {
		panic(err)
	}

	_, err = i.Eval(`fmt.Println(Color{Name:"white", Value:0xffffff})`)
	if err != nil {
		panic(err)
	}
}

Expected result

{white}
{white 16777215}

Got

{white}
panic: 1:60: unknown field Value in struct literal

goroutine 1 [running]:
main.main()
	/Users/emicklei/xProjects/golivia/app/main.go:45 +0x18b
exit status 2

Yaegi Version

v0.12.0

Additional Notes

Hi,

I am evaluating this package for its usage in an interactive editor in which I can change funcs, methods and types while running a program. This example shows that redefining a type is not visible. The definition Eval is without error ; however, using the new field reports an error.

ernest-ag5 avatar May 25 '22 15:05 ernest-ag5