[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why can't I compile this macro?



Consider the following macro -

(defmacro composite-bitstring (arg-pairs)
  (if (cdr arg-pairs)
      `(+!! (ash!! ,(composite-bitstring (cdr arg-pairs))
		   (!! ,(length-for-bitstring (first arg-pairs))))
	    ,(encode-for-bitstring (first arg-pairs)))
      (encode-for-bitstring (first arg-pairs))))


(defmacro encode-for-bitstring ((name length-or-type))
  (if (eq length-or-type 'b)
      `(if!! ,name (!! 1) (!! 0))
      `,name))

(defmacro length-for-bitstring ((name length-or-type))
  (if (eq length-or-type 'b)
      `1
      `,length-or-type))

When I try to compile composite-bitstring I get a stack overflow since
it seems that the compiler is trying to recursively evaluate the macro
as it compilers the macro.
I have no idea what is going on here. I have tried to write this without
using backquote notation and get similar behavior. HELP.

Thanks
Strip
drstrip@sandia.gov