The case is that there are two public macro that call the same private 
helper macro, and that private macro is the one who does the heavy lifting, 
so I can either duplicate that private macro's code to be inside the public 
macros, or make it public and mark it somehow with a "do-not-touch" sign. 

On Tuesday, March 18, 2014 1:38:59 AM UTC+2, Michael Blume wrote:
>
> You don't have the macro generate a call to the private function, you have 
> the macro call the private function directly
>
> replace:
>
> (defmacro call-self* [x]
>   `(~x ~x))
>
> (defmacro call-self [x]
>   `(do
>     (println "calling form " ~(str x) " with itself")
>     (call-self ~x)))
>
> with:
>
> (defn- call-self* [x]
>   `(~x ~x))
>
> (defmacro call-self [x]
>   `(do
>     (println "calling form " ~(str x) " with itself")
>     ~(call-self x)))
>
> The function call-self* is still called at compile-time and is called *by 
> the call-self macro*, not the generated client code. Make sense?
>
>
> On Monday, March 17, 2014 10:31:36 AM UTC-7, Yoav Rubin wrote:
>>
>> I need to do it, as I need the arguments to remain not evaluated until 
>> they get to that private macro. That private macro does some work on the 
>> arguments before they get evaluated (the arguments themselves are 
>> s-expressions).
>>
>> Still, even if it is a private function - how can I call it from a macro 
>> that is called from another namespace?
>>
>> On Monday, March 17, 2014 4:19:19 PM UTC+2, James Reeves wrote:
>>>
>>> Don't use a private macro: use a function that spits out an s-expression.
>>>
>>> - James
>>>
>>>
>>> On 17 March 2014 06:02, Yoav Rubin <yoav...@gmail.com> wrote:
>>>
>>>> Hi All,
>>>>
>>>> I have a namespace that has two macros as part of its public API, and 
>>>> another macro that act as helpers for the public macro
>>>>
>>>> (defmacro helper-mac [arg1 arg2 f]
>>>> ;; do stuff with f , arg1 and arg2
>>>> )
>>>>
>>>> (defmacro m0 [arg1 arg2]
>>>>    (priv-mac arg1 arg2 f1)
>>>> )
>>>>  
>>>> (defmacro m1 [arg1 arg2] (
>>>>   (priv-mac arg1 arg2 f2)
>>>> )
>>>>
>>>> f1 and f2 are just two functions.
>>>>
>>>> I would like to make the helper macro private (using  ^:private), but 
>>>> when I do it and call either m0 or m1 from another namespace, I get an 
>>>> exception saying that helper-mac is private.
>>>>
>>>> Is it possible to call from to a macro in another namespace when that 
>>>> macro is calling a private macro in its namespace?
>>>>
>>>> Thanks,
>>>>
>>>> Yoav
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@googlegroups.com
>>>> Note that posts from new members are moderated - please be patient with 
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+u...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/clojure?hl=en
>>>> --- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Clojure" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to clojure+u...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to