     @classParams = newMap()
     @types = []
     @isMalformed = no
+    @_requested = newMap()
+
+  req: (moduleName, names) ->
+    addToMap @_requested, moduleName, names
+
+  requested: ->
+    if @_requested.size > 0
+      @_requested
 
   markMalformed: ->
     @isMalformed = yes


compileCtxAstToJs = (compileFn, ctx, ast) ->
  ir = compileFn ctx, ast
  if ir
    jsIr = translateIr ctx, ir
    js = (if Array.isArray jsIr
        translateStatementsToJs
      else
        translateToJs) jsIr
  {ctx, ast, js}

astizeList = (source) ->
  parentize astize (tokenize "(#{source})", -1), -1

      (map compileVariableAssignment, translationCache)
      varList varNames
      compiledCases])

ms.req = ms_req = (ctx, call) ->
  reqTuple = ctx.definitionPattern()
  if not isTuple reqTuple
    return malformed ctx, reqTuple, 'req requires a tuple of names to be required'
  reqs = _validTerms reqTuple
  map (syntaxNewName ctx, 'definition name to be imported required'), reqs
  [moduleName] = _validArguments call
  if not moduleName or not isName moduleName
    return malformed ctx, call, 'req requires a module name to require from'
  moduleName.label = 'param'
  ctx.req moduleName.symbol, (arrayToSet (filter _is, (map _symbol, reqs)))
  jsNoop()

ms.format = ms_format = (ctx, call) ->
  typeTable =
