 
 expandMacro = (macro) ->
   macros[macro]?() ? macro
+
+findMissing = (graphs, name) ->
+  names = []
+  for graph in (graphs or [])
+    if name in graph.names
+      names.push (setToArray graph.missing)...
+      continue
+  if names.length > 0
+    names
+  else
+    [name]
 
 validIdentifier = (name) ->
   [firstChar] = name

  if matchNode 'match', node
    [op, args...] = inside node
    return trueMacros[op.token] hoistableWheres, args...

  noHoistables hoistableWheres

  switch node.type
    when 'comment' then 'null'

            if isReference node
              defLocation = lookupIdentifier name, node
              if not defLocation
                names = findMissing hoistableWheres, name
                if nonstrict
                  warnings.push "#{names.join ', '} used but not defined"
                else
                  throw new Error "#{names.join ', '} used but not defined"
            escapedName

isList = (node) ->
