   # See the [ECMAScript Harmony Wiki](http://wiki.ecmascript.org/doku.php?id=harmony:destructuring)
   # for details.
   compilePatternMatch: (o) ->
-    valVar        = o.scope.freeVariable()
+    valVar        = o.scope.freeVariable 'cache'
     value         = if @value.isStatement(o) then ClosureNode.wrap(@value) else @value
     assigns       = ["#{@tab}#{valVar} = #{ value.compile(o) };"]
     o.top         = true

    source        = if range then @source.base else @source
    codeInBody    = @body.contains (n) -> n instanceof CodeNode
    scope         = o.scope
    name          = (@name and @name.compile(o)) or scope.freeVariable()
    index         = @index and @index.compile o
    scope.find(name,  immediate: yes) if name and not @pattern and (range or not codeInBody)
    scope.find(index, immediate: yes) if index
    rvar          = scope.freeVariable() unless topLevel
    ivar          = if codeInBody then scope.freeVariable() else if range then name else index or scope.freeVariable()
    varPart       = ''
    guardPart     = ''
    body          = Expressions.wrap([@body])


  compileLoopTest: (o) ->
    [@arr1, @arr2] = @array.compileReference o, precompile: yes
    [i, l] = [o.scope.freeVariable('index'), o.scope.freeVariable('cache')]
    prefix = if @obj1 isnt @obj2 then @obj1 + '; ' else ''
    "(function(){ #{prefix}for (var #{i}=0, #{l}=#{@arr1}.length; #{i}<#{l}; #{i}++) { if (#{@arr2}[#{i}] === #{@obj2}) return true; } return false; }).call(this)"

