From 71878c2c0c3ed83aa332b32afa9fbef16de2bccc Mon Sep 17 00:00:00 2001 From: Marco Manino Date: Mon, 18 Mar 2024 08:32:17 +0100 Subject: [PATCH] Adding a comment --- interp/interpreter.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/interp/interpreter.go b/interp/interpreter.go index e0074ba26..ea5eeaa12 100644 --- a/interp/interpreter.go +++ b/interp/interpreter.go @@ -427,13 +427,20 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent if err != nil { return nil, mem, r.errorAt(inst, err) } + // typecodePtr always point to the numMethod field in the type + // description struct. The methodSet, when present, comes right + // before the numMethod field (the compiler doesn't generate + // method sets for concrete types without methods). + // Considering that the compiler doesn't emit interface type + // asserts for interfaces with no methods (as the always succeed) + // then if the offset is zero, this assert must always fail. if typecodePtr.offset() == 0 { locals[inst.localIndex] = literalValue{uint8(0)} break } typecodePtrOffset, err := typecodePtr.addOffset(-int64(r.pointerSize)) if err != nil { - return nil, mem, r.errorAt(inst, err) // unlikely + return nil, mem, r.errorAt(inst, err) } methodSetPtr, err := mem.load(typecodePtrOffset, r.pointerSize).asPointer(r) if err != nil {