   # Reserve a variable name as originating from a function parameter for this
   # scope. No `var` required for internal references.
   parameter: (name) ->
-    @variables.push {name, type: 'param'}
+    @setVar name, 'param'
 
   # Just check to see if a variable has already been declared, without reserving,
   # walks up to the root scope.

  # it wraps.
  constructor: (@parent, @expressions, @method) ->
    @variables = [{name: 'arguments', type: 'arguments'}]
    if @parent
      @garbage = @parent.garbage
    else
      @garbage   = []
      Scope.root = this

  # Create a new garbage level
  startLevel: ->

  freeVariable: (type) ->
    index = 0
    index++ while @check(temp = @temporary type, index) and @type(temp) isnt 'reuse'
    @setVar temp, 'var'
    last(@garbage).push temp if @garbage.length
    temp

  # Ensure that an assignment is made at the top of this scope
  # (or at the top-level scope, if requested).
  assign: (name, value) ->
    @setVar name, value: value, assigned: true

  # Does this scope reference any variables that need to be declared in the
  # given function body?
