     @variables = [{name: 'arguments', type: 'arguments'}]
     @positions = {}
     if @parent
-      @garbage = @parent.garbage
+      {@garbage} = @parent
     else
       @garbage   = []
       Scope.root = this

    if @positions.hasOwnProperty name
      @variables[@positions[name]].type = type
    else
      @positions[name] = @variables.length
      @variables.push {name, type}

  # Create a new garbage level
  startLevel: ->
    @garbage.push []

  # Return to the previous garbage level and erase referenced temporary
  # variables in current level from scope.
  endLevel: ->
    vars = @variables
    for garbage in @garbage.pop() when @type(garbage) is 'var'
      @setVar garbage, 'reuse'

  # Look up a variable name in lexical scope, and declare it if it does not
  # already exist.

    index = 0
    index++ while @check(temp = @temporary type, index) and @type(temp) isnt 'reuse'
    @setVar temp, 'var'
    last(@garbage)?.push temp
    temp

  # Ensure that an assignment is made at the top of this scope
