Open he11olx opened 1 year ago
Assuming we have three sections of code, s1, s2, and s3, which are loaded using Eval. Additionally, let's assume g is used to retrieve the value from the previous section s.
The combinations s123, s1g23, and s12g3 do not throw any errors. However, s1g2g3 throws an error. Interestingly, s1g21 and s1g2g1 do not throw any errors, but s12g1 and s121 throw errors.
func Test_yaegi_Assignable_s12g3(t *testing.T) {
inter := interp.New(interp.Options{GoPath: build.Default.GOPATH})
err := inter.Use(stdlib.Symbols)
if err != nil {
panic(fmt.Errorf("use stdlib.Symbols error: %v", err))
}
if _, err := inter.Eval("package s1\nvar A int64 = 1"); err != nil {
t.Fatalf("eval s1: %v", err)
}
if _, err := inter.Eval("package s2\nvar B = \"f_b\"\nvar C = map[string]interface{}{\"k\":1}"); err != nil {
t.Fatalf("eval s2: %v", err)
}
// get s2
if _, err = inter.Eval("s2.C"); err != nil {
t.Fatalf("GetVal s2 %v", err)
}
if _, err := inter.Eval("package s3\nvar A int64 = 1"); err != nil {
t.Fatalf("eval s3: %v", err)
}
}
// outpu: pass
func Test_yaegi_Assignable_s1g2g3(t *testing.T) {
inter := interp.New(interp.Options{GoPath: build.Default.GOPATH})
err := inter.Use(stdlib.Symbols)
if err != nil {
panic(fmt.Errorf("use stdlib.Symbols error: %v", err))
}
if _, err := inter.Eval("package s1\nvar A int64 = 1"); err != nil {
t.Fatalf("eval s1: %v", err)
}
// get s1
if _, err = inter.Eval("s1.A"); err != nil {
t.Fatalf("GetVal s1 %v", err)
}
if _, err := inter.Eval("package s2\nvar B = \"f_b\"\nvar C = map[string]interface{}{\"k\":1}"); err != nil {
t.Fatalf("eval s2: %v", err)
}
// get s2
if _, err = inter.Eval("s2.C"); err != nil {
t.Fatalf("GetVal s2 %v", err)
}
if _, err := inter.Eval("package s3\nvar A int64 = 1"); err != nil {
t.Fatalf("eval s3: %v", err)
}
}
// outpu:
// 2:5: panic
// eval s3: reflect.Set: value of type int64 is not assignable to type map[string]interface {}
The following program
sample.go
triggers an unexpected resultExpected result
Got
Yaegi Version
v0.15.1
Additional Notes
It's ok when we change Eval order.