         polymorphic: polymorphic
         deps: deps#(map (({name}) -> name), deps)
       # for dep in deps
-      #   ctx.addToDeferred {name: dep.name, type: dep.type, reversed: name}
+      #   ctx.addToDeferredBindings {name: dep.name, type: dep.type, reversed: name}
       if not ctx.isTyped name
         ctx.assignType name, (new TempType type)
     else

    if deps.length > 0
      # log "adding top level lhs to deferred #{name}", deps
      currentType = type#substitute ctx.substitution, type
      ctx.addToDeferred
        name: name
        scopeIndex: ctx.currentScopeIndex()
        type: currentType

  _deferReasonOf: (definition) ->
    definition?._defer

  addDeferredDefinition: ([expression, dependencyName, useScopeIndex, lhs, rhs]) ->
    @_scope().deferred.push [expression, dependencyName, useScopeIndex, lhs, rhs]

  deferred: ->
    @_scope().deferred
