[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))

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

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.