Maybe the code generated should be looking something like this :
GenSym(0) =
((top(getfield))((top(getfield))(Transmission,:Download),:download_task))(Val{symbol("##7731")},x,y,v1,v2)
#s222 = (top(start))(GenSym(0))
GenSym(1) = (top(indexed_next))(GenSym(0),1,#s222)
v3 = (top(getfield))(GenSym(1),1)
#s222 = (top(getfield))(GenSym(1),2)
GenSym(2) = (top(indexed_next))(GenSym(0),2,#s222)
v4 = (top(getfield))(GenSym(2),1)
#s222 = (top(getfield))(GenSym(2),2)
I am kind of confused, can somebody offer some solution to my problem?
Thanks
On Thursday, March 10, 2016 at 11:50:47 PM UTC-8, Julia Tylors wrote:
>
> 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
>>>
>>