I had written a generated function of the following form and used @show to see the final code being generated.
@generated function deserialize!(buffer, ::TypeHolder{T}) where T <: NSE_composites
ops = [:(retval.$f = deserialize!(buffer, TypeHolder{$t}())) for (f,t) in collect(zip(fieldnames(T), T.types))]
pushfirst!(ops, :(retval = T()))
push!(ops, :(return retval))
ex = Expr(:block, ops...)
@show ex
return ex
end
Now the above code worked perfectly and did not give me any issues. However later when it was called by a an async task, the code crashed with the following error
task switch not allowed from inside staged nor pure functions
After checking some issues on github issues, I figured that this is because of calls to @show. Removing @show does solve the error.
Could someone explain what happened here, and should we avoid println and @show in generated functions always?