       deferrable: yes
       _defer: undefined
 
+  bareDefine: ->
+    @definePattern()
+
   defineNonDeferrablePattern: (pattern) ->
     definition = @definePattern pattern
     definition.deferrable = no

  if not paramNames
    # log "deferring in known call #{operator.symbol}"
    ctx.doDefer operator, operator.symbol
    return deferredExpression()
  positionalParams = filter ((param) -> not (lookupInMap labeledArgs, param)), paramNames
  nonLabeledArgs = map _snd, filter (([label, value]) -> not label), args


  assigns: assigns ? []

topLevelExpression = (ctx, expression) ->
  ctx.bareDefine()
  compiled = expressionCompile ctx, expression
  deferred = ctx.deferReason()
  ctx.leaveDefinition()
  if deferred
    [expression, dependencyName] = deferred
    malformed expression, "#{dependencyName} is not defined"
    undefined
  else
    (irDefinition expression.tea, compiled)

topLevel = (ctx, form) ->
  if (terms = _terms form).length % 2 == 0
