From 5e3a02a8342c0c5525e42a54d49670201fcd5ecb Mon Sep 17 00:00:00 2001 From: Alex Crane Date: Wed, 27 Mar 2019 18:53:23 +0000 Subject: [PATCH] Fix starlight-go issue #18 by returning an error if passed type isnt convertible to expected type --- convert/conv.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/convert/conv.go b/convert/conv.go index a6f41c3..99a39a0 100644 --- a/convert/conv.go +++ b/convert/conv.go @@ -291,6 +291,9 @@ func makeStarFn(name string, gofn reflect.Value) *starlark.Builtin { val := reflect.ValueOf(v) argT := gofn.Type().In(i) if !val.Type().AssignableTo(argT) { + if !val.Type().ConvertibleTo(argT) { + return starlark.None, fmt.Errorf("arg %d expected type %v got %v", i, argT, val.Type()) + } val = val.Convert(argT) } rvs = append(rvs, val) @@ -345,6 +348,9 @@ func makeVariadicStarFn(name string, gofn reflect.Value) *starlark.Builtin { val := reflect.ValueOf(vals[i]) argT := gofn.Type().In(i) if !val.Type().AssignableTo(argT) { + if !val.Type().ConvertibleTo(argT) { + return starlark.None, fmt.Errorf("arg %d expected type %v got %v", i, argT, val.Type()) + } val = val.Convert(argT) } rvs = append(rvs, val) @@ -356,6 +362,9 @@ func makeVariadicStarFn(name string, gofn reflect.Value) *starlark.Builtin { for i := minArgs; i < len(vals); i++ { val := reflect.ValueOf(vals[i]) if !val.Type().AssignableTo(vtype) { + if !val.Type().ConvertibleTo(vtype) { + return starlark.None, fmt.Errorf("arg %d expected type %v got %v", i, vtype, val.Type()) + } val = val.Convert(vtype) } rvs = append(rvs, val)