   _deferReasonOf: (definition) ->
     definition?._defer
 
-  addDeferredDefinition: ([expression, dependencyName, lhs, rhs]) ->
-    @_scope().deferred.push [expression, dependencyName, lhs, rhs]
+  addDeferredDefinition: ([expression, dependencyName, useScopeIndex, lhs, rhs]) ->
+    @_scope().deferred.push [expression, dependencyName, useScopeIndex, lhs, rhs]
 
   deferred: ->
     @_scope().deferred

    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

    "i#{@variableIndex++}"

  doDefer: (expression, dependencyName) ->
    definition = @_deferrableDefinition()
    definition._defer =
      (@_deferReasonOf definition) or [expression, dependencyName, @currentScopeIndex()]

  deferReason: ->
    @_deferReasonOf @_deferrableDefinition()
