     compiledMacro = translateToJs translateIr ctx,
         (termCompile ctx, call_ (token_ 'fn'), (join [paramTuple], rest))
     macroFn = eval compiledMacro
-    ctx.declareMacro ctx.definitionPattern(), (ctx, call) ->
-      constantToSource macroFn (_arguments call)...
+    if macroFn
+      ctx.declareMacro ctx.definitionPattern(), (ctx, call) ->
+        constantToSource macroFn (_arguments call)...
 
   jsNoop()
 

  [res] = _arguments call
  # call.tea = toConstrained typeConstant 'Exp'
  # assignCompile ctx, call, res
  call.tea = toConstrained typeConstant 'Expression'

  serializeAst = (ast) ->
    if isForm ast
      if (_operator ast)?.symbol is ','
        termCompile ctx, ast
      else
        (jsArray (map serializeAst, ast))
    else
      (jsValue (JSON.stringify ast))
  serializeAst res

ms[','] = ms_comma = (ctx, call) ->
  (jsCall 'constantToSource', [expressionCompile ctx, (_arguments call)[0]])

constantToSource = (value) ->
  switch typeof value

numType = typeConstant 'Num'
regexType = typeConstant 'Regex'
jsType = typeConstant 'Js'
expressionType = typeConstant 'Expression'

safePrintType = (type) ->
  try
