Is that better than Base.return_types ?

On Fri, 2015-09-18 at 14:36, Michael Francis <[email protected]> wrote:
> function returns(f, types)
>   rt = []
>   if( !isdefined(f, :code) )
>     for x in Base._methods(f,types,-1)
>         linfo = x[3].func.code
>         (tree, ty) = typeinf(linfo, x[1], x[2])
>         push!(rt, ty)
>     end
>   else
>     # It is a lambda, not a function, we also need the types of the bound
>     # variables to evaluate the lambda corectly
>     println( types )
>     linfo = f.code
>     env = f.env
>     (tree, ty) = typeinf(linfo, types, () )
>     push!(rt, ty)
>   end
>   # If there is a set of return types we default to any for now
>   # this could be converted to a union type
>   if( length( rt ) == 0 )
>     println( "Failed to resolve return type for $f, $types")
>   elseif( length(rt) > 1 )
>     return Any
>   else
>     return rt[1]
>   end
> end
>
>
>
> The above is what I do - which also copes with anon-functions 
>
> On Friday, September 18, 2015 at 8:32:45 AM UTC-4, Tomas Lycken wrote:
>>
>> Given a function `foo(x,y)` and two *types* `TX` and `TY`, is there a way 
>> I can get the inferred return type from calling `foo(x::TX, y::TY)`? I want 
>> to do this in the compile part of a generated function, so I don't have 
>> access to any values to actually call the function with.
>>
>> I have already verified that the function `foo` is type stable, so the 
>> inferred type should be good enough for my purposes.
>>
>> Thanks,
>>
>> // T
>>

Reply via email to