diff options
Diffstat (limited to 'src/pkg/runtime/malloc.c')
| -rw-r--r-- | src/pkg/runtime/malloc.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/pkg/runtime/malloc.c b/src/pkg/runtime/malloc.c index 8b9447dad6..f4143669e7 100644 --- a/src/pkg/runtime/malloc.c +++ b/src/pkg/runtime/malloc.c @@ -459,7 +459,7 @@ setFinalizer(Eface obj, Eface finalizer) } if(finalizer.type != nil) { runtime·createfing(); - if(finalizer.type->kind != KindFunc) + if((finalizer.type->kind&KindMask) != KindFunc) goto badfunc; ft = (FuncType*)finalizer.type; if(ft->dotdotdot || ft->in.len != 1) @@ -467,12 +467,12 @@ setFinalizer(Eface obj, Eface finalizer) fint = *(Type**)ft->in.array; if(fint == obj.type) { // ok - same type - } else if(fint->kind == KindPtr && (fint->x == nil || fint->x->name == nil || obj.type->x == nil || obj.type->x->name == nil) && ((PtrType*)fint)->elem == ((PtrType*)obj.type)->elem) { + } else if((fint->kind&KindMask) == KindPtr && (fint->x == nil || fint->x->name == nil || obj.type->x == nil || obj.type->x->name == nil) && ((PtrType*)fint)->elem == ((PtrType*)obj.type)->elem) { // ok - not same type, but both pointers, // one or the other is unnamed, and same element type, so assignable. - } else if(fint->kind == KindInterface && ((InterfaceType*)fint)->mhdr.len == 0) { + } else if((fint->kind&KindMask) == KindInterface && ((InterfaceType*)fint)->mhdr.len == 0) { // ok - satisfies empty interface - } else if(fint->kind == KindInterface && runtime·ifaceE2I2((InterfaceType*)fint, obj, &iface)) { + } else if((fint->kind&KindMask) == KindInterface && runtime·ifaceE2I2((InterfaceType*)fint, obj, &iface)) { // ok - satisfies non-empty interface } else goto badfunc; |
