From the spec:
---
Attempts to call PutValue on any value for which an early determination can be made that the value is not a Reference (for example, executing the assignment statement 3=4).
---
Test262 needs more thorough tests for early errors in these situations, current engines vary widely in their behaviour:
`(print("he"),2) = 2`
Opera, IE10: print "he" and then throw ReferenceError
V8, JSC, SM: throw ReferenceError
`throw "NotEarlyError"; 2 = 2`
Opera, IE10, V8, JSC: throw the string "NotEarlyError"
SM: throws ReferenceError
`try { 2 = 2 } catch (e) { e instanceof ReferenceError }`
Opera, IE10, V8, JSC: return `true`
SM: throws uncatchable ReferenceError (when exec'ed in repl)
11.13.1-1-1, 11.13.1-1-2, 11.13.1-1-3 and 11.13.1-1-4 are of limited use for early error tests, because they execute the assignment only in an eval operation.
Tests are needed for assignment, compound assignment, pre- and post-order increment/decrement (these expressions call PutValue).