         translation: (jsAccess '_', validSymbol)
     else
       # TODO: access from other module
-      throw new Error "NOT SUPPORTED YET"
+      throw new Error "References in macros from other modules not supported yet"
 
 isQuotedReference = (atom) ->
   atom.builtin or atom.builtInDefinition or atom.modulePath

      (jsArray [serialized])

quotedReference = (ctx, atom) ->
  symbol = _symbol atom
  compiled = token_ symbol
  if ctx.isBuiltIn symbol
    compiled.builtin = yes
  else if ctx.isBuiltInDefinition symbol
    compiled.builtInDefinition = yes
  else if ctx.isDeclaredInTopScopeOrMacro symbol
    compiled.modulePath = ctx.typedModulePath.names
  else
    ctx.doDefer atom, symbol
  compiled

matchAst = (ctx, ast) ->
  matched = ctx.assignTo()

    translation: malformed ctx, atom, 'Macros cannot be referenced'
  else
    validSymbol = validIdentifier symbol
    ns = atom.ns
    # TODO: we probably need to defer anyway, because the top level might not be
    #       typed yet when we expand a macro referencing it
    #    more generally we should probably just combine this with nameCompile
