-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Open
Description
From JuliaLang/FunctionWrappers.jl#8. This appears to be an issue in Base. Sorry for not having a smaller repro, I'm a bit pressed for time.
Consider (from JuliaLang/FunctionWrappers.jl#8 (comment)), with FunctionWrappers 1.0.0:
module Parametron2
using FunctionWrappers: FunctionWrapper
struct LazyExpression{F, A}
f::F
args::A
LazyExpression(f::F, args...) where {F} = new{F, typeof(args)}(f, args)
end
# Evaluation
@inline evalarg(x) = x
@inline evalarg(x::LazyExpression) = x()
@inline (expr::LazyExpression{F, A})() where {F, A} = evalexpr(expr.f, expr.args)
@generated function evalexpr(f::F, args::Tuple{Vararg{Any, N}}) where {F, N}
# equivalent to f(map(evalarg, args)...), minus the inference issues
argexprs = [:(evalarg(args[$i])) for i = 1 : N]
quote
Base.@_inline_meta
f($(argexprs...))
end
end
# Wrapping
const WrappedExpression{T} = LazyExpression{FunctionWrapper{T, Tuple{}}, Tuple{}}
Base.convert(::Type{WrappedExpression{T}}, expr::LazyExpression) where {T} =
LazyExpression(FunctionWrapper{T, Tuple{}}(expr))
function wrap(expr::Parametron2.LazyExpression)
T = typeof(expr())
convert(Parametron2.WrappedExpression{T}, expr)
end
end
module M
import Main.Parametron2
f1 = [1]
converted = Parametron2.wrap(Parametron2.LazyExpression(convert, Vector{Float64}, f1))
converted.f()
endA possible result of pasting this into the REPL:
ERROR: TypeError: in CallWrapper, in cfunction, expected Core.Compiler.VarState(Core.Compiler.Const(false, false), false), got Array{Float64,1}
Stacktrace:
[1] macro expansion at /home/twan/.julia/packages/FunctionWrappers/mJrYu/src/FunctionWrappers.jl:111 [inlined]
[2] do_ccall at /home/twan/.julia/packages/FunctionWrappers/mJrYu/src/FunctionWrappers.jl:102 [inlined]
[3] (::FunctionWrappers.FunctionWrapper{Array{Float64,1},Tuple{}})() at /home/twan/.julia/packages/FunctionWrappers/mJrYu/src/FunctionWrappers.jl:118
[4] top-level scope at none:0julia> versioninfo()
Julia Version 1.0.0
Commit 5d4eaca0c9 (2018-08-08 20:58 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Core(TM) i7-6950X CPU @ 3.00GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.0 (ORCJIT, broadwell)cc: @yuyichao
moustachio-belvedere
Metadata
Metadata
Assignees
Labels
No labels