Now the generated code looks like this:
AST(:($(Expr(:lambda, Any[:x,:y],
Any[Any[Any[:x,:Any,1],Any[:y,:Any,1],Any[:v1,:Any,7],Any[:v2,:Any,7]],Any[],0,Any[]],
:(begin # none, line 2:
NewvarNode(:v1)
NewvarNode(:v2)
v1 = 2.1
v2 = 2.2
(v1,v2) =
((top(getfield))((top(getfield))(Transmission,:Download),:download_task))(Val{symbol("##7731")},x,y,v1,v2)
return v1 + v2
end)))))
however, when i call test(1.1,2.2), it gives me the following error:
signal (11): Segmentation fault
var_binding_pointer at codegen.cpp:2858
emit_assignment at codegen.cpp:3052
emit_function at codegen.cpp:4697
jl_eh_restore_state at julia.h:1410
jl_compile at codegen.cpp:812
jl_trampoline_compile_function at builtins.c:1025
jl_apply at gf.c:1709
do_call at interpreter.c:66
eval at interpreter.c:213
jl_toplevel_eval_flex at toplevel.c:544
jl_eh_restore_state at julia.h:1410
eval_user_input at ./REPL.jl:62
unknown function (ip: 0x7f52402a9497)
jl_apply at gf.c:1711
anonymous at ./REPL.jl:85
start_task at task.c:246
unknown function (ip: (nil))
Segmentation fault
On Thursday, March 10, 2016 at 10:07:05 PM UTC-8, Julia Tylors wrote:
>
> I fixed it, It should have been like this:
>
> (:v1,:v2) =
> ((top(getfield))((top(getfield))(Staged,:Runtime),:kernel_call))(Val{symbol("##7731")},x,y,v1,v2)
>
> On Thursday, March 10, 2016 at 3:48:49 PM UTC-8, Yichao Yu wrote:
>>
>> On Thu, Mar 10, 2016 at 6:04 PM, Julia Tylors <[email protected]>
>> wrote:
>> >
>> >
>> > Hi fellows, I have a problem which i can't solve.
>> >
>> > I have a function test(x,y) which has the ast as follows:
>> > (test.env.defs.func.code)
>> >
>> >
>> > :($(Expr(:method, :test,
>> > :((top(svec))((top(apply_type))(Tuple,Any,Any),(top(svec))())),
>> > AST(:($(Expr(:lambda, Any[:x,:y],
>> >
>> Any[Any[Any[:x,:Any,1],Any[:y,:Any,1],Any[:v1,:Any,7],Any[:v2,:Any,7]],Any[],0,Any[]],
>>
>>
>> > :(begin # none, line 2:
>> > NewvarNode(:v1)
>> > NewvarNode(:v2)
>> > v1 = 2.1
>> > v2 = 2.2
>> > $(Expr(:(=), :v1, :v2,
>> >
>> :(((top(getfield))((top(getfield))(Transmission,:Download),:download_task))(Val{symbol("##7775")},x,y,v1,v2))))
>>
>>
>> > return v1 + v2
>> > end))))), false)))
>> >
>> >
>>
>> Can you show how you generated `test`?
>>
>> >
>> > when i call test(1.1,2.2), it returns 4.4 but it should have returned
>> > v1 = 1.1*2.2 = 2.42
>> > v2 = 2.2*2.1 = 4.62
>> >
>> > so the result should be v1+v2 , 7.04
>> >
>> > Here is the download_task function.
>> > @generated function download_task{id}(::Type{Val{id}}, args...)
>> > println("Download Task $id for argument types $args")
>> > :((args[1] * args[2]), (args[2] * args[3]))
>> > end
>> >
>> > I am suspicious about the part in bold
>> >
>> > $(Expr(:(=), :v1, :v2,
>> >
>> :(((top(getfield))((top(getfield))(Transmission,:Download),:download_task))(Val{symbol("##7775")},x,y,v1,v2))))
>>
>>
>> >
>> > this part doesn't get executed! Or somewhat expanded wrong. I am not
>> totally
>> > sure.
>> > Anyone with a better understanding , please help me out.!
>> >
>> > Thanks
>>
>