@@ -53,3 +53,37 @@ function unwrap_fun(expr::Expr, should_unwrap_head::Bool, should_unwrap_fcall::B
53
53
return f, args, wherestack, body
54
54
end
55
55
# ###############################################################
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