Skip to content

Commit c4ae894

Browse files
committed
wrap_fun
1 parent 888f663 commit c4ae894

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/fexpr.jl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,37 @@ function unwrap_fun(expr::Expr, should_unwrap_head::Bool, should_unwrap_fcall::B
5353
return f, args, wherestack, body
5454
end
5555
################################################################
56+
"""
57+
fexpr = wrap_fun(f, args, wherestack, body)
58+
fexpr = wrap_fun(fcall, wherestack, body)
59+
fexpr = wrap_fun(head, body)
60+
fexpr = wrap_fun(fexpr)
61+
62+
Returns a function definition expression
63+
"""
64+
function wrap_fun(f, args, wherestack, body)
65+
fcall = wrap_fcall(f, args)
66+
head = wrap_head(fcall, wherestack)
67+
return Expr(:function, head, Expr(:block, body))
68+
end
69+
70+
function wrap_fun(fcall, wherestack, body)
71+
head = wrap_head(fcall, wherestack)
72+
return Expr(:function, head, Expr(:block, body))
73+
end
74+
75+
function wrap_fun(head::Expr, body::Expr)
76+
return Expr(:function, head, Expr(:block, body))
77+
end
78+
79+
function wrap_fun(fexpr::Expr)
80+
if fexpr.head in (:function, :(=))
81+
return fexpr
82+
elseif fexpr.head == :block
83+
fexpr = fexpr.args[2] # separate fexpr from block
84+
return fexpr
85+
else
86+
error("Expression is not supported")
87+
end
88+
end
89+

0 commit comments

Comments
 (0)