Skip to content

Commit

Permalink
Checking for methodset existance
Browse files Browse the repository at this point in the history
  • Loading branch information
marco6 committed Feb 13, 2024
1 parent f5e933c commit 94f79c9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
4 changes: 4 additions & 0 deletions interp/interpreter.go
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,10 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
if err != nil {
return nil, mem, r.errorAt(inst, err)
}
if typecodePtr.offset() == 0 {
locals[inst.localIndex] = literalValue{uint8(0)}
break
}
methodSetPtr, err := mem.load(typecodePtr.addOffset(-int64(r.pointerSize)), r.pointerSize).asPointer(r)
if err != nil {
return nil, mem, r.errorAt(inst, err)
Expand Down
11 changes: 11 additions & 0 deletions testdata/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,14 @@ func sliceString(s string, start, end int) string {
func sliceSlice(s []int, start, end int) []int {
return s[start:end]
}

type outside struct{}

func init() {
_, _ = any(0).(interface{ DoesNotExist() })
_, _ = any("").(interface{ DoesNotExist() })
_, _ = any(outside{}).(interface{ DoesNotExist() })

type inside struct{}
_, _ = any(inside{}).(interface{ DoesNotExist() })
}

0 comments on commit 94f79c9

Please sign in to comment.