     replicate call,
       (call_ (token_ 'data'), [(token_ ctx._name()), (tuple_ args)])
 
+  # TODO:
+  # For now support the simplest function macros, just compiling down to source
+  # strings
+  # macro: (ctx, call) ->
+  #   args = _arguments call
+  #   [paramList, body] = args
+  #   paramTuple paramList
+  #   if not body
+  #     malformed call, 'Missing macro definition'
+
+  #   ctx.
+  #   # then in assign compile:
+  #   ctx.macros[ctx._name()]
+
+
   # match
   #   subject
   #   listing of

      }""").join '') + """ else {
        #{elseCase}
      }"""

# From precs, find caches and the LHS are declarable variables
findDeclarables = (precs) ->

    # For now expect the curried constructor call
    args = _arguments call
    [paramList, defs...] = args
    paramTuple paramList
    defs ?= []
    if defs.length is 0
      malformed call, 'Missing function result'
