     @_macros
 
   addMacro: (name, macro) ->
-    @_macros[name] = macro
+    @_macros[name.symbol] = macro
+    name.id = macro.id = @freshId()
 
   definePattern: (pattern) ->
     if @isDefining()

callMacroCompile = (ctx, call) ->
  op = _operator call
  op.label = 'keyword'
  expanded = ctx.macros()[op.symbol] ctx, call
  if isTranslated expanded
    expanded
  else

    compiledMacro = translateToJs translateIr ctx,
      (termCompile ctx, call_ (token_ 'fn'), (join [paramTuple], rest))
    # log compiledMacro
    ctx.addMacro ctx.definitionPattern(), simpleMacro eval compiledMacro
    params = (map token_, paramNames) # freshen

    fn_ params, call_ (token_ macroName), params
