From afd59fcd646bda093c985993da3fcc4e1947e87f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 7 Jul 2017 06:14:05 -0700 Subject: structs: tighten call-super-fun behavior. * struct.c (call_super_fun): Do not allow type to be a struct instance, which is a consequence of the super function being used. The documentation says that the argument is a type and mentions no possibility of it being an instance. Allowing a struct invites mistakes. --- struct.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/struct.c b/struct.c index 2fc114c1..c1098c3d 100644 --- a/struct.c +++ b/struct.c @@ -1176,15 +1176,17 @@ static val call_super_method(val inst, val sym, struct args *args) static val call_super_fun(val type, val sym, struct args *args) { - val suptype = super(type); + val self = lit("call-super-fun"); + struct struct_type *st = stype_handle(&type, self); + val suptype = st->super; if (suptype) { val fun = static_slot(suptype, sym); return generic_funcall(fun, args); } - uw_throwf(error_s, lit("call-super-fun: ~s has no supertype"), - type, nao); + uw_throwf(error_s, lit("~a: ~s has no supertype"), + self, type, nao); } val slotp(val type, val sym) -- cgit v1.2.3