
/*===
SyntaxError
===*/

/* This was broken at some point: formal argument list is parsed in
 * non-strict mode so 'implements' is allowed.  When function is
 * detected to be strict, the argument list needs to be rechecked
 * to ensure that there are no reserved words which are recognized
 * only in strict mode.
 *
 * This is not actually clear cut in the specification, but this
 * behavior follows e.g. V8.
 */

try {
    // FutureReservedWord only recognized in strict mode,
    // function declared in non-strict mode but function
    // itself is strict
    eval("function foo(implements) { 'use strict'; };");
    print('never here');
} catch (e) {
    print(e.name);
}


