 
     catchPart = if @recovery
       if @error.value in STRICT_PROSCRIBED
-        throw SyntaxError "catch variable may not be eval or arguments"
+        throw SyntaxError "catch variable may not be \"#{@error.value}\""
       o.scope.add @error.value, 'param' unless o.scope.check @error.value
       " catch#{errorPart}{\n#{ @recovery.compile o, LEVEL_TOP }\n#{@tab}}"
     else unless @ensure or @recovery

    o.scope.shared  = del(o, 'sharedScope')
    o.indent        += TAB
    delete o.bare
    params     = []
    exprs      = []
    for name in @paramNames() # this step must be performed before the others
      unless o.scope.check name then o.scope.parameter name
    for param in @params when param.splat

  constructor: (@variable, @value, @context, options) ->
    @param = options and options.param
    @subpattern = options and options.subpattern
    if name = @variable.unwrapAll().value in STRICT_PROSCRIBED
      throw SyntaxError "variable name may not be \"#{name}\""

  children: ['variable', 'value']

