summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/expressions/compound-assignment
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/test262/language/expressions/compound-assignment
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/expressions/compound-assignment')
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-1-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-10-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-11-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-12-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-13-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-14-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-15-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-16-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-17-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-18-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-19-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-2-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-20-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-21-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-22-s.js16
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-23-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-24-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-25-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-26-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-27-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-28-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-29-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-30-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-31-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-32-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-33-s-strict.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-34-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-35-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-36-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-37-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-38-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-39-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-4-s.js17
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-40-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-41-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-42-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-43-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-44-s-strict.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-45-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-46-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-47-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-48-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-49-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-5-s.js17
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-50-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-51-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-52-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-53-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-54-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-55-s-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-1gs-strict.js19
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-s.js17
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-8-s.js17
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/11.13.2-9-s.js17
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.1.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.10.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.11.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.2.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.3.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.4.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.5.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.6.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.7.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.8.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.9.js27
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.1.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.10.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.11.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.2.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.3.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.4.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.5.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.6.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.7.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.8.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.9.js24
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.1.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.10.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.11.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.2.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.3.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.4.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.5.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.6.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.7.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.8.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.9.js23
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T1.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T10.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T11.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T2.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T3.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T4.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T5.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T6.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T7.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T8.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T9.js25
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T1.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T10.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T11.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T2.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T3.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T4.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T5.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T6.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T7.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T8.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T9.js26
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.4.js52
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.2.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.5.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.6.js82
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.7.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.2.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.3.js54
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.4.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.1.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.2.js84
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.3.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.5.js70
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.7.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.9.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js39
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js36
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js40
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js32
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T1.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T2.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T3.js29
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T4.js28
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/add-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/add-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/add-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/add-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/and-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/and-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/and-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/browser.js0
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/btws-and-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/btws-or-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/btws-xor-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--1.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--10.js43
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--11.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--12.js43
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--13.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--14.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--15.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--16.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--17.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--18.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--19.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--2.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--20.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--21.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--3.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--4.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--5.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--6.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--7.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--8.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--9.js41
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v-.js42
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/div-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/div-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/div-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/div-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/left-shift-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/lshift-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/lshift-eval-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/lshift-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mod-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mod-div-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mod-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mod-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mult-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mult-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mult-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/mult-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/or-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/or-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/or-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/right-shift-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/shell.js0
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/srshift-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/srshift-eval-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/srshift-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/sub-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/sub-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/sub-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/subtract-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/u-right-shift-non-simple.js18
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/urshift-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/urshift-eval-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/urshift-whitespace.js59
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/xor-arguments-strict-strict.js21
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/xor-eval-strict-strict.js20
-rw-r--r--js/src/tests/test262/language/expressions/compound-assignment/xor-whitespace.js59
408 files changed, 15076 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-1-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-1-s.js
new file mode 100644
index 0000000000..860b8ea7f8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-1-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-1-s
+description: >
+ ReferenceError is thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(*=) evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_1 *= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-10-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-10-s.js
new file mode 100644
index 0000000000..2faafbc2c3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-10-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-10-s
+description: >
+ ReferenceError is thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(^=) evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_10 ^= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-11-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-11-s.js
new file mode 100644
index 0000000000..eacdde129d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-11-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-11-s
+description: >
+ ReferenceError is thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(|=) evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_11 |= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-12-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-12-s.js
new file mode 100644
index 0000000000..64140e987a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-12-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-12-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(*=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_12 = 5
+ _11_13_2_12 *= 2;
+
+assert.sameValue(_11_13_2_12, 10, '_11_13_2_12');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-13-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-13-s.js
new file mode 100644
index 0000000000..fb49371147
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-13-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-13-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(/=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_13 = 6
+ _11_13_2_13 /= 2;
+
+assert.sameValue(_11_13_2_13, 3, '_11_13_2_13');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-14-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-14-s.js
new file mode 100644
index 0000000000..e765268f7d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-14-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-14-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(%=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_14 = 5
+ _11_13_2_14 %= 2;
+
+assert.sameValue(_11_13_2_14, 1, '_11_13_2_14');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-15-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-15-s.js
new file mode 100644
index 0000000000..7ddb8bc132
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-15-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-15-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(>>>=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_15 = 8
+ _11_13_2_15 >>>= 2;
+
+assert.sameValue(_11_13_2_15, 2, '_11_13_2_15');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-16-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-16-s.js
new file mode 100644
index 0000000000..33163dc7a9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-16-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-16-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(-=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_16 = 5
+ _11_13_2_16 -= 2;
+
+assert.sameValue(_11_13_2_16, 3, '_11_13_2_16');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-17-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-17-s.js
new file mode 100644
index 0000000000..6ad052276d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-17-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-17-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(<<=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_17 = 1;
+ _11_13_2_17 <<= 2;
+
+assert.sameValue(_11_13_2_17, 4, '_11_13_2_17');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-18-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-18-s.js
new file mode 100644
index 0000000000..75bd0d8e4f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-18-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-18-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(>>=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_18 = 4
+ _11_13_2_18 >>= 2;
+
+assert.sameValue(_11_13_2_18, 1, '_11_13_2_18');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-19-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-19-s.js
new file mode 100644
index 0000000000..dfe7f7f8e5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-19-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-19-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(+=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_19 = -1
+ _11_13_2_19 += 10;
+
+assert.sameValue(_11_13_2_19, 9, '_11_13_2_19');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-2-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-2-s.js
new file mode 100644
index 0000000000..a5010a29ec
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-2-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-2-s
+description: >
+ Strict Mode - ReferenceError is thrown if the LeftHandSideExpression of a
+ Compound Assignment operator(/=) evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_2 /= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-20-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-20-s.js
new file mode 100644
index 0000000000..dbecd1e14d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-20-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-20-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(&=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_20 = 5
+ _11_13_2_20 &= 3;
+
+assert.sameValue(_11_13_2_20, 1, '_11_13_2_20');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-21-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-21-s.js
new file mode 100644
index 0000000000..525d3374a4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-21-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-21-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(^=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_21 = 5
+ _11_13_2_21 ^= 3;
+
+assert.sameValue(_11_13_2_21, 6, '_11_13_2_21');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-22-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-22-s.js
new file mode 100644
index 0000000000..e8fd2bac20
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-22-s.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-22-s
+description: >
+ ReferenceError isn't thrown if the LeftHandSideExpression of a Compound
+ Assignment operator(|=) evaluates to a resolvable reference
+---*/
+
+ var _11_13_2_22 = 5
+ _11_13_2_22 |= 2;
+
+assert.sameValue(_11_13_2_22, 7, '_11_13_2_22');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-23-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-23-s-strict.js
new file mode 100644
index 0000000000..dbfb3f9fdb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-23-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-23-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(*=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop *= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-24-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-24-s-strict.js
new file mode 100644
index 0000000000..4f827d66c4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-24-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-24-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(/=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop /= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-25-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-25-s-strict.js
new file mode 100644
index 0000000000..761ab24cc4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-25-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-25-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(%=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop %= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-26-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-26-s-strict.js
new file mode 100644
index 0000000000..63d5b60be3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-26-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-26-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(+=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop += 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-27-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-27-s-strict.js
new file mode 100644
index 0000000000..ac762ff2f3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-27-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-27-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(-=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop -= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-28-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-28-s-strict.js
new file mode 100644
index 0000000000..ab81ebf7e5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-28-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-28-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(<<=) is a reference to a data
+ property with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop <<= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-29-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-29-s-strict.js
new file mode 100644
index 0000000000..2f532dcc83
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-29-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-29-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>=) is a reference to a data
+ property with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop >>= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-30-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-30-s-strict.js
new file mode 100644
index 0000000000..e4be71b5bf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-30-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-30-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>>=) is a reference to a data
+ property with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop >>>= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-31-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-31-s-strict.js
new file mode 100644
index 0000000000..151abacdd2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-31-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-31-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(&=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop &= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-32-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-32-s-strict.js
new file mode 100644
index 0000000000..8c3f5cc145
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-32-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-32-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(^=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop ^= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-33-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-33-s-strict.js
new file mode 100644
index 0000000000..a8bf7c873a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-33-s-strict.js
@@ -0,0 +1,26 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-33-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(|=) is a reference to a data property
+ with the attribute value {[[Writable]]:false}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop |= 20;
+});
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-34-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-34-s-strict.js
new file mode 100644
index 0000000000..d000837723
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-34-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-34-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(*=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop *= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-35-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-35-s-strict.js
new file mode 100644
index 0000000000..4b30aabdf9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-35-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-35-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(/=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop /= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-36-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-36-s-strict.js
new file mode 100644
index 0000000000..0a475a6aad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-36-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-36-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(%=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop %= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-37-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-37-s-strict.js
new file mode 100644
index 0000000000..46ca3ff608
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-37-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-37-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(+=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop += 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-38-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-38-s-strict.js
new file mode 100644
index 0000000000..392974d4c7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-38-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-38-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(-=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop -= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-39-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-39-s-strict.js
new file mode 100644
index 0000000000..c23720a86b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-39-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-39-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(<<=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop <<= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-4-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-4-s.js
new file mode 100644
index 0000000000..1bb1260b96
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-4-s.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-4-s
+description: >
+ Strict Mode - ReferenceError is thrown if the
+ LeftHandSideExpression of a Compound Assignment operator(+=)
+ evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_4 += 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-40-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-40-s-strict.js
new file mode 100644
index 0000000000..04bc4602d4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-40-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-40-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop >>= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-41-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-41-s-strict.js
new file mode 100644
index 0000000000..29d9c2fe21
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-41-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-41-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>>=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop >>>= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-42-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-42-s-strict.js
new file mode 100644
index 0000000000..5e5a07de71
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-42-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-42-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(&=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop &= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-43-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-43-s-strict.js
new file mode 100644
index 0000000000..4a0468bd15
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-43-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-43-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(^=) is a reference to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop ^= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-44-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-44-s-strict.js
new file mode 100644
index 0000000000..8264e12584
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-44-s-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-44-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(|=) is a reference of to an accessor
+ property with the attribute value {[[Set]]:undefined}
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.defineProperty(obj, "prop", {
+ get: function () {
+ return 11;
+ },
+ set: undefined,
+ enumerable: true,
+ configurable: true
+ });
+assert.throws(TypeError, function() {
+ obj.prop |= 20;
+});
+assert.sameValue(obj.prop, 11, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-45-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-45-s-strict.js
new file mode 100644
index 0000000000..3e6aca427d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-45-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-45-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(*=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len *= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-46-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-46-s-strict.js
new file mode 100644
index 0000000000..fe68ee8985
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-46-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-46-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(/=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len /= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-47-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-47-s-strict.js
new file mode 100644
index 0000000000..8b9086b469
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-47-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-47-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(%=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len %= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-48-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-48-s-strict.js
new file mode 100644
index 0000000000..89ec389e67
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-48-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-48-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(+=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len += 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-49-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-49-s-strict.js
new file mode 100644
index 0000000000..5636fadc11
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-49-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-49-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(-=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len -= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-5-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-5-s.js
new file mode 100644
index 0000000000..ec5931d0e6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-5-s.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-5-s
+description: >
+ Strict Mode - ReferenceError is thrown if the
+ LeftHandSideExpression of a Compound Assignment operator(-=)
+ evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_5 -= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-50-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-50-s-strict.js
new file mode 100644
index 0000000000..a3ddae6c1a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-50-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-50-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(<<=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len <<= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-51-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-51-s-strict.js
new file mode 100644
index 0000000000..e257753fff
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-51-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-51-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len >>= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-52-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-52-s-strict.js
new file mode 100644
index 0000000000..650f489673
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-52-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-52-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(>>>=) is a reference to a
+ non-existent property of an object whose [[Extensible]] internal
+ property if false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len >>>= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-53-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-53-s-strict.js
new file mode 100644
index 0000000000..4ba94616ce
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-53-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-53-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(&=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len &= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-54-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-54-s-strict.js
new file mode 100644
index 0000000000..3f50e7bd1a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-54-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-54-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(^=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len ^= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-55-s-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-55-s-strict.js
new file mode 100644
index 0000000000..f3e49586aa
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-55-s-strict.js
@@ -0,0 +1,21 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-55-s
+description: >
+ Strict Mode - TypeError is thrown if The LeftHandSide of a
+ Compound Assignment operator(|=) is a reference to a non-existent
+ property of an object whose [[Extensible]] internal property is
+ false
+flags: [onlyStrict]
+---*/
+
+ var obj = {};
+ Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ obj.len |= 10;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-1gs-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-1gs-strict.js
new file mode 100644
index 0000000000..e8aa0127d3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-1gs-strict.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-1gs
+description: >
+ Strict Mode - SyntaxError is throw if the identifier eval appears
+ as the LeftHandSideExpression of a Compound Assignment operator(*=)
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+eval *= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-s.js
new file mode 100644
index 0000000000..9e3576dfcb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-6-s.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-s
+description: >
+ Strict Mode - ReferenceError is thrown if the
+ LeftHandSideExpression of a Compound Assignment operator(<<=)
+ evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_6 <<= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-8-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-8-s.js
new file mode 100644
index 0000000000..820436d1dd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-8-s.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-8-s
+description: >
+ Strict Mode - ReferenceError is thrown if the
+ LeftHandSideExpression of a Compound Assignment operator(>>>=)
+ evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_8 >>>= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-9-s.js b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-9-s.js
new file mode 100644
index 0000000000..19586dc2ec
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/11.13.2-9-s.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-9-s
+description: >
+ Strict Mode - ReferenceError is thrown if the
+ LeftHandSideExpression of a Compound Assignment operator(&=)
+ evaluates to an unresolvable reference
+---*/
+
+
+assert.throws(ReferenceError, function() {
+ eval("_11_13_2_9 &= 1;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.1.js
new file mode 100644
index 0000000000..c5f7a09d07
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.1
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x *= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x *= -1);
+if (z !== -1) {
+ $ERROR('#1: var x = 1; var z = (x *= -1); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = -1;
+var z = (x *= y);
+if (z !== -1) {
+ $ERROR('#2: var x = 1; var y = -1; var z = (x *= y); z === -1. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.10.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.10.js
new file mode 100644
index 0000000000..ab74035577
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.10.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.10
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x ^= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x ^= 1);
+if (z !== 0) {
+ $ERROR('#1: var x = 1; var z = (x ^= 1); z === 0. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x ^= y);
+if (z !== 0) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x ^= y); z === 0. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.11.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.11.js
new file mode 100644
index 0000000000..56606d45c8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.11.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.11
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x |= y"
+---*/
+
+//CHECK#1
+var x = 0;
+var z = (x |= 1);
+if (z !== 1) {
+ $ERROR('#1: var x = 0; var z = (x |= 1); z === 1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 0;
+var y = 1;
+var z = (x |= y);
+if (z !== 1) {
+ $ERROR('#2: var x = 0; var y = 1; var z = (x |= y); z === 1. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.2.js
new file mode 100644
index 0000000000..c89fcd4511
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.2
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x /= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x /= -1);
+if (z !== -1) {
+ $ERROR('#1: var x = 1; var z = (x /= -1); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = -1;
+var z = (x /= y);
+if (z !== -1) {
+ $ERROR('#2: var x = 1; var y = -1; var z = (x /= y); z === -1. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.3.js
new file mode 100644
index 0000000000..2c37b8c364
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.3
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x %= y"
+---*/
+
+//CHECK#1
+var x = -1;
+var z = (x %= 2);
+if (z !== -1) {
+ $ERROR('#1: var x = -1; var z = (x %= 2); z === -1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = -1;
+var y = 2;
+var z = (x %= y);
+if (z !== -1) {
+ $ERROR('#2: var x = -1; var y = 2; var z = (x %= y); z === -1. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.4.js
new file mode 100644
index 0000000000..e9077f2d29
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.4.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.4
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x += y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x += 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 1; var z = (x += 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x += y);
+if (z !== 2) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x += y); z === 2. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.5.js
new file mode 100644
index 0000000000..56629d1679
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.5.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.5
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x -= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x -= 1);
+if (z !== 0) {
+ $ERROR('#1: var x = 1; var z = (x -= 1); z === 0. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x -= y);
+if (z !== 0) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x -= y); z === 0. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.6.js
new file mode 100644
index 0000000000..0e454566a0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.6.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.6
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x <<= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x <<= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 1; var z = (x <<= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x <<= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x <<= y); z === 2. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.7.js
new file mode 100644
index 0000000000..9daa17f408
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.7.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.7
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x >>= y"
+---*/
+
+//CHECK#1
+var x = 4;
+var z = (x >>= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 4; var z = (x >>= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 4;
+var y = 1;
+var z = (x >>= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 4; var y = 1; var z = (x >>= y); z === 2. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.8.js
new file mode 100644
index 0000000000..0dbce7c80b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.8.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.8
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x >>>= y"
+---*/
+
+//CHECK#1
+var x = 4;
+var z = (x >>>= 1);
+if (z !== 2) {
+ $ERROR('#1: var x = 4; var z = (x >>>= 1); z === 2. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 4;
+var y = 1;
+var z = (x >>>= y);
+if (z !== 2) {
+ $ERROR('#2: var x = 4; var y = 1; var z = (x >>>= y); z === 2. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.9.js
new file mode 100644
index 0000000000..8755f478fe
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T1.9.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T1.9
+description: >
+ Either Type is not Reference or GetBase is not null, check
+ opeartor is "x &= y"
+---*/
+
+//CHECK#1
+var x = 1;
+var z = (x &= 1);
+if (z !== 1) {
+ $ERROR('#1: var x = 1; var z = (x &= 1); z === 1. Actual: ' + (z));
+}
+
+//CHECK#2
+var x = 1;
+var y = 1;
+var z = (x &= y);
+if (z !== 1) {
+ $ERROR('#2: var x = 1; var y = 1; var z = (x &= y); z === 1. Actual: ' + (z));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.1.js
new file mode 100644
index 0000000000..87e3a2bb6d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.1
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x *= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x *= y);
+ $ERROR('#1.1: var x = 1; x *= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x *= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.10.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.10.js
new file mode 100644
index 0000000000..a2a668dc04
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.10.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.10
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x ^= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x ^= y);
+ $ERROR('#1.1: var x = 1; x ^= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x ^= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.11.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.11.js
new file mode 100644
index 0000000000..3343ef7a39
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.11.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.11
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x |= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x |= y);
+ $ERROR('#1.1: var x = 1; x |= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x |= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.2.js
new file mode 100644
index 0000000000..a2d173786e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.2
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x /= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x /= y);
+ $ERROR('#1.1: var x = 1; x /= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x /= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.3.js
new file mode 100644
index 0000000000..71bb8cb28e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.3
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x %= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x %= y);
+ $ERROR('#1.1: var x = 1; x %= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x %= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.4.js
new file mode 100644
index 0000000000..2b8290093b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.4
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x += y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x += y);
+ $ERROR('#1.1: var x = 1; x += y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x += y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.5.js
new file mode 100644
index 0000000000..b3208c1bb1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.5.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.5
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x -= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x -= y);
+ $ERROR('#1.1: var x = 1; x -= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x -= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.6.js
new file mode 100644
index 0000000000..3316f8f123
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.6.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.6
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x <<= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x <<= y);
+ $ERROR('#1.1: var x = 1; x <<= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x <<= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.7.js
new file mode 100644
index 0000000000..5a67088931
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.7
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x >>= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x >>= y);
+ $ERROR('#1.1: var x = 1; x >>= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x >>= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.8.js
new file mode 100644
index 0000000000..34101a5aca
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.8.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.8
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x >>>= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x >>>= y);
+ $ERROR('#1.1: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.9.js
new file mode 100644
index 0000000000..92120c44ca
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T2.9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T2.9
+description: >
+ If GetBase(AssigmentExpression) is null, throw ReferenceError.
+ Check operator is "x &= y"
+---*/
+
+//CHECK#1
+try {
+ var x = 1;
+ var z = (x &= y);
+ $ERROR('#1.1: var x = 1; x &= y throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: var x = 1; x &= y throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.1.js
new file mode 100644
index 0000000000..61ff86ece2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.1
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x *= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x *= 1);
+ $ERROR('#1.1: x *= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x *= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.10.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.10.js
new file mode 100644
index 0000000000..f6bbbd6a94
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.10.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.10
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x ^= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x ^= 1);
+ $ERROR('#1.1: x ^= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x ^= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.11.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.11.js
new file mode 100644
index 0000000000..4d4267f8d2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.11.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.11
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x |= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x |= 1);
+ $ERROR('#1.1: x |= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x |= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.2.js
new file mode 100644
index 0000000000..9a8feeb507
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.2
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x /= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x /= 1);
+ $ERROR('#1.1: x /= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x /= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.3.js
new file mode 100644
index 0000000000..2a88fec711
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.3
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x %= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x %= 1);
+ $ERROR('#1.1: x %= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x %= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.4.js
new file mode 100644
index 0000000000..b8baf8bc7a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.4.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.4
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x += y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x += 1);
+ $ERROR('#1.1: x += 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x += 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.5.js
new file mode 100644
index 0000000000..ab10e1dbf0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.5.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.5
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x -= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x -= 1);
+ $ERROR('#1.1: x -= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x -= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.6.js
new file mode 100644
index 0000000000..b793d94586
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.6.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.6
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x <<= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x <<= 1);
+ $ERROR('#1.1: x <<= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x <<= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.7.js
new file mode 100644
index 0000000000..695e497b9a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.7.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.7
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x >>= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x >>= 1);
+ $ERROR('#1.1: x >>= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.8.js
new file mode 100644
index 0000000000..5daba94394
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.8.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.8
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x >>>= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x >>>= 1);
+ $ERROR('#1.1: x >>>= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x >>>= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.9.js
new file mode 100644
index 0000000000..03a2eb34c6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A2.1_T3.9.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator uses GetValue
+es5id: 11.13.2_A2.1_T3.9
+description: >
+ If GetBase(LeftHandSideExpression) is null, throw ReferenceError.
+ Check operator is "x &= y"
+---*/
+
+//CHECK#1
+try {
+ var z = (x &= 1);
+ $ERROR('#1.1: x &= 1 throw ReferenceError. Actual: ' + (z));
+}
+catch (e) {
+ if ((e instanceof ReferenceError) !== true) {
+ $ERROR('#1.2: x &= 1 throw ReferenceError. Actual: ' + (e));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T1.js
new file mode 100644
index 0000000000..3022b9d82a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T1.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T1
+description: Checking Expression and Variable statements for x *= y
+---*/
+
+//CHECK#1
+var x = 1;
+x *= -1;
+if (x !== -1) {
+ $ERROR('#1: var x = 1; x *= -1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y *= -1;
+if (y !== -1) {
+ $ERROR('#2: y = 1; y *= -1; y === -1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T10.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T10.js
new file mode 100644
index 0000000000..718b60f6be
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T10.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T10
+description: Checking Expression and Variable statements for x ^= y
+---*/
+
+//CHECK#1
+var x = 0;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 0; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y ^= 0;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y ^= 0; y === 1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T11.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T11.js
new file mode 100644
index 0000000000..7160e9ae78
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T11.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T11
+description: Checking Expression and Variable statements for x |= y
+---*/
+
+//CHECK#1
+var x = 0;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 0; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y |= 0;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y |= 0; y === 1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T2.js
new file mode 100644
index 0000000000..60c0ccbf62
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T2.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T2
+description: Checking Expression and Variable statements for x /= y
+---*/
+
+//CHECK#1
+var x = 1;
+x /= -1;
+if (x !== -1) {
+ $ERROR('#1: var x = 1; x /= -1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y /= -1;
+if (y !== -1) {
+ $ERROR('#2: y = 1; y /= -1; y === -1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T3.js
new file mode 100644
index 0000000000..73e14f237d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T3.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T3
+description: Checking Expression and Variable statements for x %= y
+---*/
+
+//CHECK#1
+var x = -1;
+x %= 2;
+if (x !== -1) {
+ $ERROR('#1: var x = -1; x %= 2; x === -1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = -1;
+y %= 2;
+if (y !== -1) {
+ $ERROR('#2: y = -1; y %= 2; y === -1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T4.js
new file mode 100644
index 0000000000..e3610177f3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T4.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T4
+description: Checking Expression and Variable statements for x += y
+---*/
+
+//CHECK#1
+var x = 1;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 1; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y += 1;
+if (y !== 2) {
+ $ERROR('#2: y = 1; y += 1; y === 2. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T5.js
new file mode 100644
index 0000000000..26bc4d0c76
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T5.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T5
+description: Checking Expression and Variable statements for x -= y
+---*/
+
+//CHECK#1
+var x = -1;
+x -= 1;
+if (x !== -2) {
+ $ERROR('#1: var x = -1; x -= 1; x === -2. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = -1;
+y -= 1;
+if (y !== -2) {
+ $ERROR('#2: y = -1; y -= 1; y === -2. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T6.js
new file mode 100644
index 0000000000..602f10a337
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T6.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T6
+description: Checking Expression and Variable statements for x <<= y
+---*/
+
+//CHECK#1
+var x = 1;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 1; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y <<= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 1; y <<= 1; y === 2. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T7.js
new file mode 100644
index 0000000000..efc31d47ba
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T7.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T7
+description: Checking Expression and Variable statements for x >>= y
+---*/
+
+//CHECK#1
+var x = 4;
+x >>= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 4; x >>= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 4;
+y >>= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 4; y >>= 1; y === 2. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T8.js
new file mode 100644
index 0000000000..64e664b76c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T8.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T8
+description: Checking Expression and Variable statements for x >>>= y
+---*/
+
+//CHECK#1
+var x = 4;
+x >>>= 1;
+if (x !== 2) {
+ $ERROR('#1: var x = 4; x >>>= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 4;
+y >>>= 1;
+if (y !== 2) {
+ $ERROR('#2: y = 4; y >>>= 1; y === 2. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T9.js
new file mode 100644
index 0000000000..4d656a28b1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.1_T9.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y uses PutValue(x, x @ y)
+es5id: 11.13.2_A3.1_T9
+description: Checking Expression and Variable statements for x &= y
+---*/
+
+//CHECK#1
+var x = 1;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: var x = 1; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+var y;
+y = 1;
+y &= 1;
+if (y !== 1) {
+ $ERROR('#2: y = 1; y &= 1; y === 1. Actual: ' + (y));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T1.js
new file mode 100644
index 0000000000..553f6a8fd4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T1
+description: Checking Expression and Variable statements for x *= y
+---*/
+
+//CHECK#1
+var x = 1;
+var x1 = (x *= -1);
+if (x1 !== -1) {
+ $ERROR('#1: var x = 1; var x1 = (x *= -1); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y *= -1);
+if (y1 !== -1) {
+ $ERROR('#2: y = 1; y1 = (y *= -1); y1 === -1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T10.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T10.js
new file mode 100644
index 0000000000..b3508b0417
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T10.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T10
+description: Checking Expression and Variable statements for x ^= y
+---*/
+
+//CHECK#1
+var x = 0;
+var x1 = (x ^= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 0; var x1 = (x ^= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y ^= 0);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y ^= 0); y1 === 1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T11.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T11.js
new file mode 100644
index 0000000000..54bdf4bfa7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T11.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T11
+description: Checking Expression and Variable statements for x |= y
+---*/
+
+//CHECK#1
+var x = 0;
+var x1 = (x |= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 0; var x1 = (x |= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y |= 0);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y |= 0); y1 === 1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T2.js
new file mode 100644
index 0000000000..1e7beedd6a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T2
+description: Checking Expression and Variable statements for x /= y
+---*/
+
+//CHECK#1
+var x = 1;
+var x1 = (x /= -1);
+if (x1 !== -1) {
+ $ERROR('#1: var x = 1; var x1 = (x /= -1); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y /= -1);
+if (y1 !== -1) {
+ $ERROR('#2: y = 1; y1 = (y /= -1); y1 === -1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T3.js
new file mode 100644
index 0000000000..ee181eecef
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T3.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T3
+description: Checking Expression and Variable statements for x %= y
+---*/
+
+//CHECK#1
+var x = -1;
+var x1 = (x %= 2);
+if (x1 !== -1) {
+ $ERROR('#1: var x = -1; var x1 = (x %= 2); x1 === -1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = -1;
+y1 = (y %= 2);
+if (y1 !== -1) {
+ $ERROR('#2: y = -1; y1 = (y %= 2); y1 === -1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T4.js
new file mode 100644
index 0000000000..fd2cb9f49e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T4.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T4
+description: Checking Expression and Variable statements for x += y
+---*/
+
+//CHECK#1
+var x = 1;
+var x1 = (x += 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 1; var x1 = (x += 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y += 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 1; y1 = (y += 1); y1 === 2. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T5.js
new file mode 100644
index 0000000000..186503156f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T5.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T5
+description: Checking Expression and Variable statements for x -= y
+---*/
+
+//CHECK#1
+var x = -1;
+var x1 = (x -= 1);
+if (x1 !== -2) {
+ $ERROR('#1: var x = -1; var x1 = (x -= 1); x1 === -2. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = -1;
+y1 = (y -= 1);
+if (y1 !== -2) {
+ $ERROR('#2: y = -1; y1 = (y -= 1); y1 === -2. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T6.js
new file mode 100644
index 0000000000..b031055018
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T6
+description: Checking Expression and Variable statements for x <<= y
+---*/
+
+//CHECK#1
+var x = 1;
+var x1 = (x <<= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 1; var x1 = (x <<= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y <<= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 1; y1 = (y <<= 1); y1 === 2. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T7.js
new file mode 100644
index 0000000000..0daba1a240
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T7.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T7
+description: Checking Expression and Variable statements for x >>= y
+---*/
+
+//CHECK#1
+var x = 4;
+var x1 = (x >>= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 4; var x1 = (x >>= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 4;
+y1 = (y >>= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 4; y1 = (y >>= 1); y1 === 2. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T8.js
new file mode 100644
index 0000000000..ed96bb64df
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T8.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T8
+description: Checking Expression and Variable statements for x >>>= y
+---*/
+
+//CHECK#1
+var x = 4;
+var x1 = (x >>>= 1);
+if (x1 !== 2) {
+ $ERROR('#1: var x = 4; var x1 = (x >>>= 1); x1 === 2. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 4;
+y1 = (y >>>= 1);
+if (y1 !== 2) {
+ $ERROR('#2: y = 4; y1 = (y >>>= 1); y1 === 2. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T9.js
new file mode 100644
index 0000000000..671d7909a4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A3.2_T9.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Operator x @= y returns x @ y
+es5id: 11.13.2_A3.2_T9
+description: Checking Expression and Variable statements for x &= y
+---*/
+
+//CHECK#1
+var x = 1;
+var x1 = (x &= 1);
+if (x1 !== 1) {
+ $ERROR('#1: var x = 1; var x1 = (x &= 1); x1 === 1. Actual: ' + (x1));
+}
+
+//CHECK#2
+var y;
+var y1;
+y = 1;
+y1 = (y &= 1);
+if (y1 !== 1) {
+ $ERROR('#2: y = 1; y1 = (y &= 1); y1 === 1. Actual: ' + (y1));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.1.js
new file mode 100644
index 0000000000..06c17bee9d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x ^= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.2.js
new file mode 100644
index 0000000000..199cadeea9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.3.js
new file mode 100644
index 0000000000..b161603fb5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#5: x = "x"; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x ^= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x ^= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.4.js
new file mode 100644
index 0000000000..c9245d8397
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x ^= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x ^= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x ^= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x ^= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x ^= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x ^= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.1.js
new file mode 100644
index 0000000000..b6cbf8da97
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x ^= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.2.js
new file mode 100644
index 0000000000..9cf8d885e9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x ^= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x ^= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x ^= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#9: x = "x"; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x ^= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x ^= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.3.js
new file mode 100644
index 0000000000..2a47bbf7a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.4.js
new file mode 100644
index 0000000000..2f80f50e49
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= 1;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.5.js
new file mode 100644
index 0000000000..0c2deb1e29
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x ^= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x ^= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x ^= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x ^= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x ^= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x ^= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x ^= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x ^= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.6.js
new file mode 100644
index 0000000000..fce8c90f85
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new String("1"); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.7.js
new file mode 100644
index 0000000000..076e86e894
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= "1";
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new String("1"); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.8.js
new file mode 100644
index 0000000000..c511d763c2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x ^= true;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x ^= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x ^= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x ^= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x ^= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.9.js
new file mode 100644
index 0000000000..76221ab22d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.10_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x ^= y is the same as x = x ^ y
+es5id: 11.13.2_A4.10_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x ^= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x ^= true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x ^= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x ^= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x ^= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x ^= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x ^= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.1.js
new file mode 100644
index 0000000000..ae977ea716
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x |= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.2.js
new file mode 100644
index 0000000000..4d41566ebf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.3.js
new file mode 100644
index 0000000000..c8ce5094eb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x |= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x |= "1";
+if (x !== 1) {
+ $ERROR('#5: x = "x"; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x |= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x |= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.4.js
new file mode 100644
index 0000000000..340a082edc
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x |= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x |= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x |= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x |= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x |= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x |= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.1.js
new file mode 100644
index 0000000000..1d03fd6db7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x |= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.2.js
new file mode 100644
index 0000000000..4a54706f17
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x |= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x |= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x |= 1;
+if (x !== 1) {
+ $ERROR('#9: x = "x"; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x |= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x |= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.3.js
new file mode 100644
index 0000000000..090f2109f5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.4.js
new file mode 100644
index 0000000000..9e23a9b82e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= 1;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.5.js
new file mode 100644
index 0000000000..f201a70d5e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x |= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.6.js
new file mode 100644
index 0000000000..3542790a52
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.7.js
new file mode 100644
index 0000000000..78d4c955aa
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= "1";
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new String("1"); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.8.js
new file mode 100644
index 0000000000..e4d0b27381
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = undefined; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = undefined; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.9.js
new file mode 100644
index 0000000000..f1a0e1d6d0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.11_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x |= y is the same as x = x | y
+es5id: 11.13.2_A4.11_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x |= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x |= true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x |= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x |= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x |= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x |= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x |= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.1.js
new file mode 100644
index 0000000000..4d46ba42e5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x *= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.2.js
new file mode 100644
index 0000000000..23fdc020e6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x *= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.3.js
new file mode 100644
index 0000000000..296e409255
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x *= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x *= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x *= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x *= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x *= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x *= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.4.js
new file mode 100644
index 0000000000..743ba1fd3f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.1.js
new file mode 100644
index 0000000000..0c7541f55b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Number (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x *= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.2.js
new file mode 100644
index 0000000000..878ba7045c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x *= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x *= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x *= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x *= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x *= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x *= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x *= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x *= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x *= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x *= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.3.js
new file mode 100644
index 0000000000..47c049f8be
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.4.js
new file mode 100644
index 0000000000..397e0f0534
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.5.js
new file mode 100644
index 0000000000..ed90b5bbf1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) amd Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x *= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x *= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x *= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x *= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x *= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x *= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x *= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x *= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x *= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.6.js
new file mode 100644
index 0000000000..16fb46490a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ primitive String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.7.js
new file mode 100644
index 0000000000..dfce163614
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.8.js
new file mode 100644
index 0000000000..11f4d3db34
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x *= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x *= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x *= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x *= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x *= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.9.js
new file mode 100644
index 0000000000..24a8e7eee5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.1_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x *= y is the same as the production x = x * y
+es5id: 11.13.2_A4.1_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x *= null;
+if (x !== 0) {
+ $ERROR('#1: x = true; x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x *= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x *= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x *= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x *= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x *= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x *= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.1.js
new file mode 100644
index 0000000000..8f605be3d2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x /= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.2.js
new file mode 100644
index 0000000000..98f7e9646b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x /= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.3.js
new file mode 100644
index 0000000000..8c9ff391cf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x /= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x /= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x /= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x /= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x /= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x /= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.4.js
new file mode 100644
index 0000000000..75efee1b0e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= null;
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = null; x /= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.1.js
new file mode 100644
index 0000000000..0716feee66
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x /= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.2.js
new file mode 100644
index 0000000000..925a2b6e0e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x /= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x /= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x /= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x /= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x /= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x /= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x /= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x /= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x /= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x /= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.3.js
new file mode 100644
index 0000000000..62c3b39b1c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = 1; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new Number(1); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.4.js
new file mode 100644
index 0000000000..690a5329ad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.5.js
new file mode 100644
index 0000000000..4fb6ce8404
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x /= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x /= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x /= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x /= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x /= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x /= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x /= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x /= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x /= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.6.js
new file mode 100644
index 0000000000..c811310ccb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.7.js
new file mode 100644
index 0000000000..709aeb7940
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = "1"; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new String("1"); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.8.js
new file mode 100644
index 0000000000..9d997e90ad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x /= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x /= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x /= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x /= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x /= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.9.js
new file mode 100644
index 0000000000..1c07d8d070
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.2_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x /= y is the same as x = x / y
+es5id: 11.13.2_A4.2_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#1: x = true; x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x /= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x /= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x /= null;
+if (x !== Number.POSITIVE_INFINITY) {
+ $ERROR('#3: x = new Boolean(true); x /= null; x === +Infinity. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x /= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x /= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.1.js
new file mode 100644
index 0000000000..8f211acdd3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x %= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.2.js
new file mode 100644
index 0000000000..e833367f08
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x %= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.3.js
new file mode 100644
index 0000000000..27e83b25bf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x %= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x %= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x %= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x %= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x %= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.4.js
new file mode 100644
index 0000000000..3896c37dc8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = null; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.1.js
new file mode 100644
index 0000000000..3b0829a486
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x %= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.2.js
new file mode 100644
index 0000000000..74638f988a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x %= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x %= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x %= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x %= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x %= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x %= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.3.js
new file mode 100644
index 0000000000..e8f0405cdb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.4.js
new file mode 100644
index 0000000000..de74cd6362
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.5.js
new file mode 100644
index 0000000000..830336343d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x %= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.6.js
new file mode 100644
index 0000000000..1c4769000d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.7.js
new file mode 100644
index 0000000000..608e404513
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.8.js
new file mode 100644
index 0000000000..4a49762b90
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x %= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x %= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x %= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x %= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x %= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.9.js
new file mode 100644
index 0000000000..ea1a7bd80a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.3_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x %= y is the same as x = x % y
+es5id: 11.13.2_A4.3_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x %= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x %= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x %= null;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x %= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x %= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x %= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.1.js
new file mode 100644
index 0000000000..5cc8ffa588
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x += true;
+if (x !== 2) {
+ $ERROR('#1: x = true; x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x += true;
+if (x !== 2) {
+ $ERROR('#2: x = new Boolean(true); x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#3: x = true; x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = new Boolean(true); x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.2.js
new file mode 100644
index 0000000000..22bac28faf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: x = 1; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x += 1;
+if (x !== 2) {
+ $ERROR('#2: x = new Number(1); x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#3: x = 1; x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#4: x = new Number(1); x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.3.js
new file mode 100644
index 0000000000..d83dca03b0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.3.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T1.3
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x += null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.4.js
new file mode 100644
index 0000000000..4bee990876
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T1.4.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T1.4
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x += "1";
+if (x !== "11") {
+ $ERROR('#1: x = "1"; x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x += "1";
+if (x !== "11") {
+ $ERROR('#2: x = new String("1"); x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#3: x = "1"; x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#4: x = new String("1"); x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#5
+if ("x" + "1" !=="x1") {
+ $ERROR('#5: x = "x"; x += "1"; x === "x1". Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x += "x";
+if (x !== "1x") {
+ $ERROR('#6: x = "1"; x += "x"; x === "1x". Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.1.js
new file mode 100644
index 0000000000..31bfa4bc42
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x += 1;
+if (x !== 2) {
+ $ERROR('#1: x = true; x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x += true;
+if (x !== 2) {
+ $ERROR('#2: x = 1; x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += 1;
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x += 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = 1; x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = true; x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x += true;
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x += true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x += new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x += new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x += new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x += new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.2.js
new file mode 100644
index 0000000000..e06f4f08a7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x += null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += 1;
+if (x !== 1) {
+ $ERROR('#2: x = null; x += 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x += null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = null; x += new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.3.js
new file mode 100644
index 0000000000..6a106e3824
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x += new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.4.js
new file mode 100644
index 0000000000..fa1e9586a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x += true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x += undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x += new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.5.js
new file mode 100644
index 0000000000..20944302d3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.5.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x += null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += true;
+if (x !== 1) {
+ $ERROR('#2: x = null; x += true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x += null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = null; x += new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.6.js
new file mode 100644
index 0000000000..ea9a9b2d5c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.6.js
@@ -0,0 +1,82 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x += 1;
+if (x !== "11") {
+ $ERROR('#1: x = "1"; x += 1; x === "11". Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x += "1";
+if (x !== "11") {
+ $ERROR('#2: x = 1; x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += 1;
+if (x !== "11") {
+ $ERROR('#3: x = new String("1"); x += 1; x === "11". Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#4: x = 1; x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x += new Number(1);
+if (x !== "11") {
+ $ERROR('#5: x = "1"; x += new Number(1); x === "11". Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x += "1";
+if (x !== "11") {
+ $ERROR('#6: x = new Number(1); x += "1"; x === "11". Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x += new Number(1);
+if (x !== "11") {
+ $ERROR('#7: x = new String("1"); x += new Number(1); x === "11". Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x += new String("1");
+if (x !== "11") {
+ $ERROR('#8: x = new Number(1); x += new String("1"); x === "11". Actual: ' + (x));
+}
+
+//CHECK#9
+if ("x" + 1 !=="x1") {
+ $ERROR('#9: x = "x"; x += 1; x === "x1". Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x += "x";
+if (x !== "1x") {
+ $ERROR('#10: x = 1; x += "x"; x === "1x". Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.7.js
new file mode 100644
index 0000000000..ebcfa0da94
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.7.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x += "1";
+if (x !== "true1") {
+ $ERROR('#1: x = true; x += "1"; x === "true1". Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x += true;
+if (x !== "1true") {
+ $ERROR('#2: x = "1"; x += true; x === "1true". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x += "1";
+if (x !== "true1") {
+ $ERROR('#3: x = new Boolean(true); x += "1"; x === "true1". Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x += new Boolean(true);
+if (x !== "1true") {
+ $ERROR('#4: x = "1"; x += new Boolean(true); x === "1true". Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x += new String("1");
+if (x !== "true1") {
+ $ERROR('#5: x = true; x += new String("1"); x === "true1". Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x += true;
+if (x !== "1true") {
+ $ERROR('#6: x = new String("1"); x += true; x === "1true". Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x += new String("1");
+if (x !== "true1") {
+ $ERROR('#7: x = new Boolean(true); x += new String("1"); x === "true1". Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x += new Boolean(true);
+if (x !== "1true") {
+ $ERROR('#8: x = new String("1"); x += new Boolean(true); x === "1true". Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.8.js
new file mode 100644
index 0000000000..366b568349
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x += undefined;
+if (x !== "1undefined") {
+ $ERROR('#1: x = "1"; x += undefined; x === "1undefined". Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x += "1";
+if (x !== "undefined1") {
+ $ERROR('#2: x = undefined; x += "1"; x === "undefined1". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += undefined;
+if (x !== "1undefined") {
+ $ERROR('#3: x = new String("1"); x += undefined; x === "1undefined". Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x += new String("1");
+if (x !== "undefined1") {
+ $ERROR('#4: x = undefined; x += new String("1"); x === "undefined1". Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.9.js
new file mode 100644
index 0000000000..a999463b2c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.4_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x += y is the same as x = x + y
+es5id: 11.13.2_A4.4_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x += null;
+if (x !== "1null") {
+ $ERROR('#1: x = "1"; x += null; x === "1null". Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x += "1";
+if (x !== "null1") {
+ $ERROR('#2: x = null; x += "1"; x === "null1". Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x += null;
+if (x !== "1null") {
+ $ERROR('#3: x = new String("1"); x += null; x === "1null". Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x += new String("1");
+if (x !== "null1") {
+ $ERROR('#4: x = null; x += new String("1"); x === "null1". Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.1.js
new file mode 100644
index 0000000000..83671bec99
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x -= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.2.js
new file mode 100644
index 0000000000..85605703cb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x -= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.3.js
new file mode 100644
index 0000000000..3af53c55b7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x -= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x -= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x -= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#5: x = "x"; x -= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x -= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#6: x = "1"; x -= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.4.js
new file mode 100644
index 0000000000..8e9d209bfa
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = null; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= null;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= null; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = undefined; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x -= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.1.js
new file mode 100644
index 0000000000..7819300ccf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x -= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.2.js
new file mode 100644
index 0000000000..9ff20e6d61
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x -= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x -= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x -= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x -= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x -= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x -= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x -= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#9: x = "x"; x -= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x -= "x";
+if (isNaN(x) !== true) {
+ $ERROR('#10: x = 1; x -= "x"; x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.3.js
new file mode 100644
index 0000000000..ff99eefc6a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= 1;
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= 1; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new Number(1);
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new Number(1); x === -1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.4.js
new file mode 100644
index 0000000000..9bfa9e015a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = 1; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= 1;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= 1; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Number(1); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new Number(1);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new Number(1); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.5.js
new file mode 100644
index 0000000000..d31fc22b5a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x -= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x -= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x -= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x -= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x -= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x -= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x -= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x -= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x -= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.6.js
new file mode 100644
index 0000000000..cd707f9892
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = "1"; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= "1";
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= "1"; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new String("1"); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new String("1");
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new String("1"); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.7.js
new file mode 100644
index 0000000000..01833b0a5b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= "1";
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= "1"; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new String("1");
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new String("1"); x === -1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.8.js
new file mode 100644
index 0000000000..62042d834a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#1: x = true; x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x -= true;
+if (isNaN(x) !== true) {
+ $ERROR('#2: x = undefined; x -= true; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= undefined;
+if (isNaN(x) !== true) {
+ $ERROR('#3: x = new Boolean(true); x -= undefined; x === Not-a-Number. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x -= new Boolean(true);
+if (isNaN(x) !== true) {
+ $ERROR('#4: x = undefined; x -= new Boolean(true); x === Not-a-Number. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.9.js
new file mode 100644
index 0000000000..51e5a6dcea
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.5_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x -= y is the same as x = x - y
+es5id: 11.13.2_A4.5_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x -= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x -= true;
+if (x !== -1) {
+ $ERROR('#2: x = null; x -= true; x === -1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x -= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x -= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x -= new Boolean(true);
+if (x !== -1) {
+ $ERROR('#4: x = null; x -= new Boolean(true); x === -1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.1.js
new file mode 100644
index 0000000000..75b7939a75
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x <<= true;
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = new Boolean(true); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#3: x = true; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = new Boolean(true); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.2.js
new file mode 100644
index 0000000000..8eef7a1c65
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = 1; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#2: x = new Number(1); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#3: x = 1; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#4: x = new Number(1); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.3.js
new file mode 100644
index 0000000000..57465acdd5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#1: x = "1"; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#2: x = new String("1"); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#3: x = "1"; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#4: x = new String("1"); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x <<= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x <<= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.4.js
new file mode 100644
index 0000000000..1430fc2119
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x <<= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x <<= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x <<= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x <<= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.1.js
new file mode 100644
index 0000000000..4a9c6442a4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = 1; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = 1; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = true; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x <<= true;
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.2.js
new file mode 100644
index 0000000000..fa70cc7e6e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#1: x = "1"; x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#2: x = 1; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= 1;
+if (x !== 2) {
+ $ERROR('#3: x = new String("1"); x <<= 1; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#4: x = 1; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#5: x = "1"; x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#6: x = new Number(1); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x <<= new Number(1);
+if (x !== 2) {
+ $ERROR('#7: x = new String("1"); x <<= new Number(1); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#8: x = new Number(1); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x <<= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x <<= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.3.js
new file mode 100644
index 0000000000..64b5ec1e03
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.4.js
new file mode 100644
index 0000000000..b69cfd3a8a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.5.js
new file mode 100644
index 0000000000..5f614bca32
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#1: x = true; x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x <<= true;
+if (x !== 2) {
+ $ERROR('#2: x = "1"; x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= "1";
+if (x !== 2) {
+ $ERROR('#3: x = new Boolean(true); x <<= "1"; x === 2. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#4: x = "1"; x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#5: x = true; x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x <<= true;
+if (x !== 2) {
+ $ERROR('#6: x = new String("1"); x <<= true; x === 2. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x <<= new String("1");
+if (x !== 2) {
+ $ERROR('#7: x = new Boolean(true); x <<= new String("1"); x === 2. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x <<= new Boolean(true);
+if (x !== 2) {
+ $ERROR('#8: x = new String("1"); x <<= new Boolean(true); x === 2. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.6.js
new file mode 100644
index 0000000000..748acdfd5f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.7.js
new file mode 100644
index 0000000000..9e468fbc00
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.8.js
new file mode 100644
index 0000000000..441ef0334f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x <<= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x <<= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x <<= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x <<= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x <<= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.9.js
new file mode 100644
index 0000000000..7ae3d1c224
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.6_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x <<= y is the same as x = x << y
+es5id: 11.13.2_A4.6_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x <<= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x <<= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x <<= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x <<= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x <<= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x <<= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x <<= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.1.js
new file mode 100644
index 0000000000..ccc10a46fd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.2.js
new file mode 100644
index 0000000000..69b85bcc86
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.3.js
new file mode 100644
index 0000000000..bd3d1a8c94
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x >>= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x >>= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.4.js
new file mode 100644
index 0000000000..ebc7029f98
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x >>= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x >>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x >>= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x >>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.1.js
new file mode 100644
index 0000000000..f0514a81e9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.2.js
new file mode 100644
index 0000000000..c02f24cc62
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x >>= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x >>= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.3.js
new file mode 100644
index 0000000000..292b3fd5e7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.4.js
new file mode 100644
index 0000000000..7a2867585c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.5.js
new file mode 100644
index 0000000000..37d172f4b3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x >>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.6.js
new file mode 100644
index 0000000000..2c6a0a8eca
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.7.js
new file mode 100644
index 0000000000..5f341b44ad
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.8.js
new file mode 100644
index 0000000000..0a80637ece
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.9.js
new file mode 100644
index 0000000000..1e11295fae
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.7_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>= y is the same as x = x >> y
+es5id: 11.13.2_A4.7_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.1.js
new file mode 100644
index 0000000000..2f0138e762
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = new Boolean(true); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#3: x = true; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = new Boolean(true); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.2.js
new file mode 100644
index 0000000000..da87371bac
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = new Number(1); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#3: x = 1; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = new Number(1); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.3.js
new file mode 100644
index 0000000000..56e6aaf0a6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = new String("1"); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#3: x = "1"; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = new String("1"); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x >>>= "x";
+if (x !== 1) {
+ $ERROR('#6: x = "1"; x >>>= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.4.js
new file mode 100644
index 0000000000..2c079f6d5d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x >>>= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x >>>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x >>>= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x >>>= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.1.js
new file mode 100644
index 0000000000..ed0eb5b8ab
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.2.js
new file mode 100644
index 0000000000..653259cfd3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = 1; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = 1; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#5: x = "1"; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#6: x = new Number(1); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#7: x = new String("1"); x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#8: x = new Number(1); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x >>>= "x";
+if (x !== 1) {
+ $ERROR('#10: x = 1; x >>>= "x"; x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.3.js
new file mode 100644
index 0000000000..1e8c0b6b77
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.4.js
new file mode 100644
index 0000000000..81183e1e84
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Number(1); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.5.js
new file mode 100644
index 0000000000..5466020b3b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#1: x = true; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = "1"; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = "1"; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#5: x = true; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#6: x = new String("1"); x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#7: x = new Boolean(true); x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#8: x = new String("1"); x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.6.js
new file mode 100644
index 0000000000..4dd2b0e9a1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.7.js
new file mode 100644
index 0000000000..f4263a120c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.8.js
new file mode 100644
index 0000000000..eb798329e1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= undefined;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>>= undefined; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.9.js
new file mode 100644
index 0000000000..2edcd8ddb1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.8_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x >>>= y is the same as x = x >>> y
+es5id: 11.13.2_A4.8_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#1: x = true; x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x >>>= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x >>>= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x >>>= null;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x >>>= null; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x >>>= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x >>>= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.1.js
new file mode 100644
index 0000000000..0f8ae0ad67
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T1.1
+description: >
+ Type(x) and Type(y) vary between primitive boolean and Boolean
+ object
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x &= true;
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Boolean(true);
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = new Boolean(true); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = true;
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#3: x = true; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Boolean(true);
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = new Boolean(true); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.2.js
new file mode 100644
index 0000000000..d0f07d6faf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T1.2
+description: Type(x) and Type(y) vary between primitive number and Number object
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = 1; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new Number(1);
+x &= 1;
+if (x !== 1) {
+ $ERROR('#2: x = new Number(1); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = 1;
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#3: x = 1; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new Number(1);
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#4: x = new Number(1); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.3.js
new file mode 100644
index 0000000000..2a113a01e9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.3.js
@@ -0,0 +1,54 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T1.3
+description: Type(x) and Type(y) vary between primitive string and String object
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x &= "1";
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = new String("1");
+x &= "1";
+if (x !== 1) {
+ $ERROR('#2: x = new String("1"); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = "1";
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#3: x = "1"; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = new String("1");
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = new String("1"); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "x";
+x &= "1";
+if (x !== 0) {
+ $ERROR('#5: x = "x"; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#6
+x = "1";
+x &= "x";
+if (x !== 0) {
+ $ERROR('#6: x = "1"; x &= "x"; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.4.js
new file mode 100644
index 0000000000..13d71255ae
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T1.4.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T1.4
+description: Type(x) and Type(y) vary between Null and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = null;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = null; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= null;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = undefined;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = undefined; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= null;
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= null; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.1.js
new file mode 100644
index 0000000000..4ab204cac8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.1.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.1
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = 1; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = 1; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = true; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x &= true;
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.2.js
new file mode 100644
index 0000000000..f6ea5de068
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.2.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.2
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and String (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x &= 1;
+if (x !== 1) {
+ $ERROR('#1: x = "1"; x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = 1;
+x &= "1";
+if (x !== 1) {
+ $ERROR('#2: x = 1; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= 1;
+if (x !== 1) {
+ $ERROR('#3: x = new String("1"); x &= 1; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = 1;
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#4: x = 1; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = "1";
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#5: x = "1"; x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new Number(1);
+x &= "1";
+if (x !== 1) {
+ $ERROR('#6: x = new Number(1); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new String("1");
+x &= new Number(1);
+if (x !== 1) {
+ $ERROR('#7: x = new String("1"); x &= new Number(1); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new Number(1);
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#8: x = new Number(1); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#9
+x = "x";
+x &= 1;
+if (x !== 0) {
+ $ERROR('#9: x = "x"; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#10
+x = 1;
+x &= "x";
+if (x !== 0) {
+ $ERROR('#10: x = 1; x &= "x"; x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.3.js
new file mode 100644
index 0000000000..d14cfdb0e4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.3
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= 1;
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.4.js
new file mode 100644
index 0000000000..6c143647a7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.4
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Number (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = 1;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = 1; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= 1;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= 1; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Number(1);
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new Number(1); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new Number(1);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new Number(1); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.5.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.5.js
new file mode 100644
index 0000000000..c10293c185
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.5.js
@@ -0,0 +1,70 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.5
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Boolean (primitive and object)
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x &= "1";
+if (x !== 1) {
+ $ERROR('#1: x = true; x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#2
+x = "1";
+x &= true;
+if (x !== 1) {
+ $ERROR('#2: x = "1"; x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= "1";
+if (x !== 1) {
+ $ERROR('#3: x = new Boolean(true); x &= "1"; x === 1. Actual: ' + (x));
+}
+
+//CHECK#4
+x = "1";
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#4: x = "1"; x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+//CHECK#5
+x = true;
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#5: x = true; x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#6
+x = new String("1");
+x &= true;
+if (x !== 1) {
+ $ERROR('#6: x = new String("1"); x &= true; x === 1. Actual: ' + (x));
+}
+
+//CHECK#7
+x = new Boolean(true);
+x &= new String("1");
+if (x !== 1) {
+ $ERROR('#7: x = new Boolean(true); x &= new String("1"); x === 1. Actual: ' + (x));
+}
+
+//CHECK#8
+x = new String("1");
+x &= new Boolean(true);
+if (x !== 1) {
+ $ERROR('#8: x = new String("1"); x &= new Boolean(true); x === 1. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.6.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.6.js
new file mode 100644
index 0000000000..88cdc39d5b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.6
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= "1";
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.7.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.7.js
new file mode 100644
index 0000000000..1185825509
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.7
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ String (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = "1";
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = "1"; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= "1";
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= "1"; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new String("1");
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new String("1"); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new String("1");
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new String("1"); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.8.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.8.js
new file mode 100644
index 0000000000..54802a9b5c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.8.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.8
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Undefined
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#1: x = true; x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = undefined;
+x &= true;
+if (x !== 0) {
+ $ERROR('#2: x = undefined; x &= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= undefined;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x &= undefined; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = undefined;
+x &= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = undefined; x &= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.9.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.9.js
new file mode 100644
index 0000000000..92cc2329e2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A4.9_T2.9.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The production x &= y is the same as x = x & y
+es5id: 11.13.2_A4.9_T2.9
+description: >
+ Type(x) is different from Type(y) and both types vary between
+ Boolean (primitive or object) and Null
+---*/
+
+var x;
+
+//CHECK#1
+x = true;
+x &= null;
+if (x !== 0) {
+ $ERROR('#1: x = true; x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#2
+x = null;
+x &= true;
+if (x !== 0) {
+ $ERROR('#2: x = null; x &= true; x === 0. Actual: ' + (x));
+}
+
+//CHECK#3
+x = new Boolean(true);
+x &= null;
+if (x !== 0) {
+ $ERROR('#3: x = new Boolean(true); x &= null; x === 0. Actual: ' + (x));
+}
+
+//CHECK#4
+x = null;
+x &= new Boolean(true);
+if (x !== 0) {
+ $ERROR('#4: x = null; x &= new Boolean(true); x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js
new file mode 100644
index 0000000000..4c8ab60794
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.10_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x ^= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x ^= 3;
+ }
+
+ if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js
new file mode 100644
index 0000000000..d60c5268e2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.10_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x ^= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x ^= 3;
+}
+
+if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js
new file mode 100644
index 0000000000..3ab81d0311
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.10_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.10_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x ^= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x ^= 3;
+ }
+}
+
+if (innerScope.x !== 1) {
+ $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js
new file mode 100644
index 0000000000..83c4d0a116
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.11_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x |= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x |= 4;
+ }
+
+ if (scope.x !== 6) {
+ $ERROR('#1: scope.x === 6. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js
new file mode 100644
index 0000000000..b5b2521404
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.11_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x |= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x |= 4;
+}
+
+if (scope.x !== 6) {
+ $ERROR('#1: scope.x === 6. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js
new file mode 100644
index 0000000000..765602825a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.11_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.11_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x |= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x |= 4;
+ }
+}
+
+if (innerScope.x !== 6) {
+ $ERROR('#1: innerScope.x === 6. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js
new file mode 100644
index 0000000000..0413dae848
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.1_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x *= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x *= 3;
+ }
+
+ if (scope.x !== 6) {
+ $ERROR('#1: scope.x === 6. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js
new file mode 100644
index 0000000000..8c3aeb44eb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.1_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x *= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x *= 3;
+}
+
+if (scope.x !== 6) {
+ $ERROR('#1: scope.x === 6. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js
new file mode 100644
index 0000000000..c16b1e28ba
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.1_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.1_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x *= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x *= 3;
+ }
+}
+
+if (innerScope.x !== 6) {
+ $ERROR('#1: innerScope.x === 6. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js
new file mode 100644
index 0000000000..ba068c7e8f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.2_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x /= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 6;
+ }
+ };
+
+ with (scope) {
+ x /= 3;
+ }
+
+ if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js
new file mode 100644
index 0000000000..1a49352745
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.2_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x /= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 6;
+ }
+};
+
+with (scope) {
+ x /= 3;
+}
+
+if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js
new file mode 100644
index 0000000000..bf6a1b075d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.2_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.2_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x /= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 6;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x /= 3;
+ }
+}
+
+if (innerScope.x !== 2) {
+ $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js
new file mode 100644
index 0000000000..98d661ee52
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.3_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x %= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+ };
+
+ with (scope) {
+ x %= 3;
+ }
+
+ if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js
new file mode 100644
index 0000000000..aae2d81967
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.3_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x %= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (scope) {
+ x %= 3;
+}
+
+if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js
new file mode 100644
index 0000000000..37fa612122
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.3_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.3_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x %= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x %= 3;
+ }
+}
+
+if (innerScope.x !== 2) {
+ $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js
new file mode 100644
index 0000000000..3eea3f5fd0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.4_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x += y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x += 1;
+ }
+
+ if (scope.x !== 3) {
+ $ERROR('#1: scope.x === 3. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js
new file mode 100644
index 0000000000..e2c206e5f8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.4_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x += y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x += 1;
+}
+
+if (scope.x !== 3) {
+ $ERROR('#1: scope.x === 3. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js
new file mode 100644
index 0000000000..253f443133
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.4_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.4_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x += y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x += 1;
+ }
+}
+
+if (innerScope.x !== 3) {
+ $ERROR('#1: innerScope.x === 3. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js
new file mode 100644
index 0000000000..db7be46259
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.5_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x -= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x -= 1;
+ }
+
+ if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js
new file mode 100644
index 0000000000..9f89630261
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.5_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x -= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x -= 1;
+}
+
+if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js
new file mode 100644
index 0000000000..e566b1071b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.5_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.5_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x -= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x -= 1;
+ }
+}
+
+if (innerScope.x !== 1) {
+ $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js
new file mode 100644
index 0000000000..d24ea1428a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.6_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x <<= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+ };
+
+ with (scope) {
+ x <<= 3;
+ }
+
+ if (scope.x !== 16) {
+ $ERROR('#1: scope.x === 16. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js
new file mode 100644
index 0000000000..de9ba12891
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.6_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x <<= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ x <<= 3;
+}
+
+if (scope.x !== 16) {
+ $ERROR('#1: scope.x === 16. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js
new file mode 100644
index 0000000000..02b9948958
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.6_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.6_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x <<= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x <<= 3;
+ }
+}
+
+if (innerScope.x !== 16) {
+ $ERROR('#1: innerScope.x === 16. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js
new file mode 100644
index 0000000000..ce62577f7d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.7_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x >>= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+ };
+
+ with (scope) {
+ x >>= 3;
+ }
+
+ if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js
new file mode 100644
index 0000000000..156f9dee5e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.7_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x >>= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (scope) {
+ x >>= 3;
+}
+
+if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js
new file mode 100644
index 0000000000..40fb3ac7d9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.7_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.7_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x >>= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x >>= 3;
+ }
+}
+
+if (innerScope.x !== 2) {
+ $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js
new file mode 100644
index 0000000000..b5c12284a2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.8_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x >>>= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+ };
+
+ with (scope) {
+ x >>>= 3;
+ }
+
+ if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js
new file mode 100644
index 0000000000..c639ede74b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.8_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x >>>= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (scope) {
+ x >>>= 3;
+}
+
+if (scope.x !== 2) {
+ $ERROR('#1: scope.x === 2. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js
new file mode 100644
index 0000000000..6a3ae27ed3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.8_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.8_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x >>>= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x >>>= 3;
+ }
+}
+
+if (innerScope.x !== 2) {
+ $ERROR('#1: innerScope.x === 2. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js
new file mode 100644
index 0000000000..c84fde3e59
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.9_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding function environment record is not changed.
+ Check operator is "x &= y".
+flags: [noStrict]
+---*/
+
+function testFunction() {
+ var x = 0;
+ var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+ };
+
+ with (scope) {
+ x &= 3;
+ }
+
+ if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+ }
+ if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+ }
+}
+testFunction();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js
new file mode 100644
index 0000000000..196f3fbb98
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T2.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.9_T2
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding global environment record is not changed.
+ Check operator is "x &= y".
+flags: [noStrict]
+---*/
+
+var x = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (scope) {
+ x &= 3;
+}
+
+if (scope.x !== 1) {
+ $ERROR('#1: scope.x === 1. Actual: ' + (scope.x));
+}
+if (x !== 0) {
+ $ERROR('#2: x === 0. Actual: ' + (x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js
new file mode 100644
index 0000000000..5de114342b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A5.9_T3.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A5.9_T3
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ object environment record. PutValue(lref, v) uses the initially
+ created Reference even if the environment binding is no longer present.
+ Binding in surrounding object environment record is not changed.
+ Check operator is "x &= y".
+flags: [noStrict]
+---*/
+
+var outerScope = {
+ x: 0
+};
+var innerScope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (outerScope) {
+ with (innerScope) {
+ x &= 3;
+ }
+}
+
+if (innerScope.x !== 1) {
+ $ERROR('#1: innerScope.x === 1. Actual: ' + (innerScope.x));
+}
+if (outerScope.x !== 0) {
+ $ERROR('#2: outerScope.x === 0. Actual: ' + (outerScope.x));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js
new file mode 100644
index 0000000000..39eff22930
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.10_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.10_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x ^= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 1;
+ var innerX = (function() {
+ x ^= (eval("var x = 2;"), 4);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 5) {
+ $ERROR('#2: x === 5. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js
new file mode 100644
index 0000000000..ddd7a7e7c6
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.11_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.11_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x |= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 1;
+ var innerX = (function() {
+ x |= (eval("var x = 2;"), 4);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 5) {
+ $ERROR('#2: x === 5. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js
new file mode 100644
index 0000000000..9a22cff2cf
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.1_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.1_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x *= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 3;
+ var innerX = (function() {
+ x *= (eval("var x = 2;"), 4);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 12) {
+ $ERROR('#2: x === 12. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js
new file mode 100644
index 0000000000..27d77cb35c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.2_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.2_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x /= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 15;
+ var innerX = (function() {
+ x /= (eval("var x = 2;"), 3);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 5) {
+ $ERROR('#2: x === 5. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js
new file mode 100644
index 0000000000..afe2057c22
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.3_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.3_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x %= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 7;
+ var innerX = (function() {
+ x %= (eval("var x = 2;"), 4);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 3) {
+ $ERROR('#2: x === 3. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js
new file mode 100644
index 0000000000..573afe3c37
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.4_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.4_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x += y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 3;
+ var innerX = (function() {
+ x += (eval("var x = 2;"), 1);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 4) {
+ $ERROR('#2: x === 4. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js
new file mode 100644
index 0000000000..68fe4a009e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.5_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.5_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x -= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 5;
+ var innerX = (function() {
+ x -= (eval("var x = 2;"), 1);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 4) {
+ $ERROR('#2: x === 4. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js
new file mode 100644
index 0000000000..000a29b38e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.6_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.6_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x <<= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 1;
+ var innerX = (function() {
+ x <<= (eval("var x = 2;"), 3);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 8) {
+ $ERROR('#2: x === 8. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js
new file mode 100644
index 0000000000..8d51dcd60a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.7_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.7_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x >>= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 8;
+ var innerX = (function() {
+ x >>= (eval("var x = 2;"), 1);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 4) {
+ $ERROR('#2: x === 4. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js
new file mode 100644
index 0000000000..cd2ad7b02e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.8_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.8_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x >>>= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 8;
+ var innerX = (function() {
+ x >>>= (eval("var x = 2;"), 1);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 4) {
+ $ERROR('#2: x === 4. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js
new file mode 100644
index 0000000000..b266099441
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A6.9_T1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2014 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator calls PutValue(lref, v)
+es5id: S11.13.2_A6.9_T1
+description: >
+ Evaluating LeftHandSideExpression lref returns Reference type; Reference
+ base value is an environment record and environment record kind is
+ declarative environment record. PutValue(lref, v) uses the initially
+ created Reference even if a more local binding is available.
+ Check operator is "x &= y".
+flags: [noStrict]
+---*/
+
+function testCompoundAssignment() {
+ var x = 5;
+ var innerX = (function() {
+ x &= (eval("var x = 2;"), 3);
+ return x;
+ })();
+
+ if (innerX !== 2) {
+ $ERROR('#1: innerX === 2. Actual: ' + (innerX));
+ }
+ if (x !== 1) {
+ $ERROR('#2: x === 1. Actual: ' + (x));
+ }
+}
+testCompoundAssignment();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T1.js
new file mode 100644
index 0000000000..bc61168e50
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x ^= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] ^= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] ^= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T2.js
new file mode 100644
index 0000000000..361c997e44
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x ^= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] ^= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] ^= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T3.js
new file mode 100644
index 0000000000..cbc693a502
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x ^= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] ^= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T4.js
new file mode 100644
index 0000000000..ff695c43a9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.10_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x ^= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] ^= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T1.js
new file mode 100644
index 0000000000..2a8d537bc9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x |= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] |= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] |= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T2.js
new file mode 100644
index 0000000000..c64182b4bd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x |= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] |= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] |= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T3.js
new file mode 100644
index 0000000000..9d1b880954
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x |= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] |= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T4.js
new file mode 100644
index 0000000000..15feb15855
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.11_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x |= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] |= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T1.js
new file mode 100644
index 0000000000..1a347b8e4b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x *= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] *= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] *= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T2.js
new file mode 100644
index 0000000000..13a8dfa1b2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x *= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] *= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] *= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T3.js
new file mode 100644
index 0000000000..70e26985dd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x *= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] *= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T4.js
new file mode 100644
index 0000000000..5fba889a16
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.1_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x *= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] *= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T1.js
new file mode 100644
index 0000000000..a2e89c02cc
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x /= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] /= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] /= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T2.js
new file mode 100644
index 0000000000..cd548a0fb9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x /= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] /= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] /= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T3.js
new file mode 100644
index 0000000000..4e16925009
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x /= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] /= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T4.js
new file mode 100644
index 0000000000..7ed2022cb9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.2_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x /= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] /= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T1.js
new file mode 100644
index 0000000000..84fc7f688d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x %= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] %= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] %= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T2.js
new file mode 100644
index 0000000000..68a57350d3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x %= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] %= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] %= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T3.js
new file mode 100644
index 0000000000..6b03bec247
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x %= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] %= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T4.js
new file mode 100644
index 0000000000..b406b3a09f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.3_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x %= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] %= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T1.js
new file mode 100644
index 0000000000..a07f4dd0c9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x += y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] += expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] += expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T2.js
new file mode 100644
index 0000000000..d5d768e6fb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x += y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] += expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] += expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T3.js
new file mode 100644
index 0000000000..1c7929451f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x += y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] += expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T4.js
new file mode 100644
index 0000000000..ecf20f1f9b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.4_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x += y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] += expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T1.js
new file mode 100644
index 0000000000..4dab9eaec1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x -= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] -= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] -= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T2.js
new file mode 100644
index 0000000000..dc392ca4cd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x -= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] -= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] -= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T3.js
new file mode 100644
index 0000000000..c3f1a810a0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x -= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] -= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T4.js
new file mode 100644
index 0000000000..296954a4ae
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.5_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x -= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] -= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T1.js
new file mode 100644
index 0000000000..f5dfa4ba78
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x <<= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] <<= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] <<= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T2.js
new file mode 100644
index 0000000000..ca5f9b0a8f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x <<= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] <<= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] <<= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T3.js
new file mode 100644
index 0000000000..df4b1a5b9e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x <<= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] <<= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T4.js
new file mode 100644
index 0000000000..67605051a4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.6_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x <<= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] <<= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T1.js
new file mode 100644
index 0000000000..624101d171
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x >>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] >>= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T2.js
new file mode 100644
index 0000000000..5059a528e4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x >>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] >>= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T3.js
new file mode 100644
index 0000000000..3d8ef6b5f9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x >>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T4.js
new file mode 100644
index 0000000000..f4ed7f80ec
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.7_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x >>= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] >>= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T1.js
new file mode 100644
index 0000000000..8441f9076e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x >>>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] >>>= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T2.js
new file mode 100644
index 0000000000..11a77a9016
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x >>>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] >>>= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T3.js
new file mode 100644
index 0000000000..d223555424
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x >>>= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] >>>= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T4.js
new file mode 100644
index 0000000000..6e8afd8de5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.8_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x >>>= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] >>>= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T1.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T1.js
new file mode 100644
index 0000000000..4cd0058c43
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T1.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ null value.
+ Check operator is "x &= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = null;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] &= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = null;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] &= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T2.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T2.js
new file mode 100644
index 0000000000..58e4ae89d8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T2.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. base is the
+ undefined value.
+ Check operator is "x &= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = undefined;
+ var prop = function() {
+ throw new DummyError();
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop()] &= expr();
+});
+
+assert.throws(TypeError, function() {
+ var base = undefined;
+ var prop = {
+ toString: function() {
+ $ERROR("property key evaluated");
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] &= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T3.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T3.js
new file mode 100644
index 0000000000..345ed367ce
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T3.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. Evaluating
+ ToPropertyKey(prop) throws an error.
+ Check operator is "x &= y".
+---*/
+
+function DummyError() { }
+
+assert.throws(DummyError, function() {
+ var base = {};
+ var prop = {
+ toString: function() {
+ throw new DummyError();
+ }
+ };
+ var expr = function() {
+ $ERROR("right-hand side expression evaluated");
+ };
+
+ base[prop] &= expr();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T4.js b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T4.js
new file mode 100644
index 0000000000..fcb6adb0a8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/S11.13.2_A7.9_T4.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Compound Assignment Operator evaluates its operands from left to right.
+description: >
+ The left-hand side expression is evaluated before the right-hand side.
+ Left-hand side expression is MemberExpression: base[prop]. ToPropertyKey(prop)
+ is only called once.
+ Check operator is "x &= y".
+---*/
+
+var propKeyEvaluated = false;
+var base = {};
+var prop = {
+ toString: function() {
+ assert(!propKeyEvaluated);
+ propKeyEvaluated = true;
+ return "";
+ }
+};
+var expr = function() {
+ return 0;
+};
+
+base[prop] &= expr();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/add-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/add-arguments-strict-strict.js
new file mode 100644
index 0000000000..145758b184
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/add-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-15-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(+=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments += 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/add-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/add-eval-strict-strict.js
new file mode 100644
index 0000000000..57bdddf5e1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/add-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-4-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(+=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval += 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/add-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/add-non-simple.js
new file mode 100644
index 0000000000..1f94eb9e8e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/add-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound addition assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 += 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/add-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/add-whitespace.js
new file mode 100644
index 0000000000..6e63978f49
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/add-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T4
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x += y
+---*/
+
+var x;
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+0009 (expression)');
+assert.sameValue(x, -2, 'U+0009 (side effect)');
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+000B (expression)');
+assert.sameValue(x, -2, 'U+000B (side effect)');
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+000C (expression)');
+assert.sameValue(x, -2, 'U+000C (side effect)');
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+0020 (expression)');
+assert.sameValue(x, -2, 'U+0020 (side effect)');
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+00A0 (expression)');
+assert.sameValue(x, -2, 'U+00A0 (side effect)');
+
+x = -1;
+assert.sameValue(x
++=
+-1, -2, 'U+000A (expression)');
+assert.sameValue(x, -2, 'U+000A (side effect)');
+
+x = -1;
+assert.sameValue(x += -1, -2, 'U+000D (expression)');
+assert.sameValue(x, -2, 'U+000D (side effect)');
+
+x = -1;
+assert.sameValue(x
+=
-1, -2, 'U+2028 (expression)');
+assert.sameValue(x, -2, 'U+2028 (side effect)');
+
+x = -1;
+assert.sameValue(x
+=
-1, -2, 'U+2029 (expression)');
+assert.sameValue(x, -2, 'U+2029 (side effect)');
+
+x = -1;
+assert.sameValue(x  
+ 

+=  
+ 

-1, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/and-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/and-arguments-strict-strict.js
new file mode 100644
index 0000000000..65f5b03bc3
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/and-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-20-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(&=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments &= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/and-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/and-eval-strict-strict.js
new file mode 100644
index 0000000000..4706382651
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/and-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-9-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(&=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval &= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/and-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/and-whitespace.js
new file mode 100644
index 0000000000..b4805bb278
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/and-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T9
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x &= y
+---*/
+
+var x;
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+0009 (expression)');
+assert.sameValue(x, 1, 'U+0009 (side effect)');
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+000B (expression)');
+assert.sameValue(x, 1, 'U+000B (side effect)');
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+000C (expression)');
+assert.sameValue(x, 1, 'U+000C (side effect)');
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+0020 (expression)');
+assert.sameValue(x, 1, 'U+0020 (side effect)');
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+00A0 (expression)');
+assert.sameValue(x, 1, 'U+00A0 (side effect)');
+
+x = 1;
+assert.sameValue(x
+&=
+1, 1, 'U+000A (expression)');
+assert.sameValue(x, 1, 'U+000A (side effect)');
+
+x = 1;
+assert.sameValue(x &= 1, 1, 'U+000D (expression)');
+assert.sameValue(x, 1, 'U+000D (side effect)');
+
+x = 1;
+assert.sameValue(x
&=
1, 1, 'U+2028 (expression)');
+assert.sameValue(x, 1, 'U+2028 (side effect)');
+
+x = 1;
+assert.sameValue(x
&=
1, 1, 'U+2029 (expression)');
+assert.sameValue(x, 1, 'U+2029 (side effect)');
+
+x = 1;
+assert.sameValue(x  
+ 

&=  
+ 

1, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/browser.js b/js/src/tests/test262/language/expressions/compound-assignment/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/browser.js
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/btws-and-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/btws-and-non-simple.js
new file mode 100644
index 0000000000..9b8361ef9e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/btws-and-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "bitwise and" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 &= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/btws-or-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/btws-or-non-simple.js
new file mode 100644
index 0000000000..d52e29b340
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/btws-or-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "bitwise or" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 |= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/btws-xor-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/btws-xor-non-simple.js
new file mode 100644
index 0000000000..9dff195e9b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/btws-xor-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "bitwise xor" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 ^= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--1.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--1.js
new file mode 100644
index 0000000000..de0fa45112
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--1.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.10_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x ^= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--10.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--10.js
new file mode 100644
index 0000000000..696b2a8784
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--10.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.4_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x += 1;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--11.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--11.js
new file mode 100644
index 0000000000..f4d614ae06
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--11.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.4_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x += 1;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--12.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--12.js
new file mode 100644
index 0000000000..c589c1206e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--12.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.5_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x -= 1;
+ count++;
+ });
+ count++;
+})();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--13.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--13.js
new file mode 100644
index 0000000000..35bc18dc14
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--13.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.5_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x -= 1;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--14.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--14.js
new file mode 100644
index 0000000000..1e9c6279b4
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--14.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.6_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x <<= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--15.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--15.js
new file mode 100644
index 0000000000..ae2a62b447
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--15.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.6_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x <<= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--16.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--16.js
new file mode 100644
index 0000000000..fdaa5b9b3f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--16.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.7_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x >>= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--17.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--17.js
new file mode 100644
index 0000000000..d9d57f34ab
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--17.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.7_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 16;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x >>= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--18.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--18.js
new file mode 100644
index 0000000000..db1ec52a06
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--18.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.8_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 16;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x >>>= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--19.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--19.js
new file mode 100644
index 0000000000..3b6a864575
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--19.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.8_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 16;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x >>>= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--2.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--2.js
new file mode 100644
index 0000000000..7cbe910c9c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--2.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.11_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x |= 4;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--20.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--20.js
new file mode 100644
index 0000000000..c106d4dd97
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--20.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.9_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x &= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--21.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--21.js
new file mode 100644
index 0000000000..f758fa4426
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--21.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.9_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 5;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x &= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--3.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--3.js
new file mode 100644
index 0000000000..37c46072fd
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--3.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.11_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x |= 4;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--4.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--4.js
new file mode 100644
index 0000000000..cb3deef671
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--4.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.1_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x *= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--5.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--5.js
new file mode 100644
index 0000000000..143fa2d1df
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--5.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.1_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 2;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x *= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--6.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--6.js
new file mode 100644
index 0000000000..ac41064fec
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--6.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.2_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 6;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x /= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--7.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--7.js
new file mode 100644
index 0000000000..caf84805a9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--7.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.2_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 6;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x /= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--8.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--8.js
new file mode 100644
index 0000000000..e593221296
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--8.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.3_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 5;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x %= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--9.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--9.js
new file mode 100644
index 0000000000..90fe161825
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v--9.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.3_T5)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+Object.defineProperty(this, "x", {
+ configurable: true,
+ get: function() {
+ delete this.x;
+ return 5;
+ }
+});
+
+(function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x %= 3;
+ count++;
+ });
+ count++;
+})();
+
+assert.sameValue(count, 2);
+assert(!('x' in this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v-.js b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v-.js
new file mode 100644
index 0000000000..4f13b58d74
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/compound-assignment-operator-calls-putvalue-lref--v-.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object-environment-records-setmutablebinding-n-v-s
+description: >
+ Compound Assignment Operator calls PutValue(lref, v) (formerly S11.13.2_A5.10_T4)
+info: |
+ The concrete Environment Record method SetMutableBinding for object Environment
+ Records attempts to set the value of the Environment Record's associated binding
+ object's property whose name is the value of the argument N to the value of argument V.
+ A property named N normally already exists but if it does not or is not currently writable,
+ error handling is determined by the value of the Boolean argument S.
+
+ Let stillExists be ? HasProperty(bindings, N).
+ If stillExists is false and S is true, throw a ReferenceError exception.
+flags: [noStrict]
+---*/
+var count = 0;
+var scope = {
+ get x() {
+ delete this.x;
+ return 2;
+ }
+};
+
+with (scope) {
+ (function() {
+ "use strict";
+ assert.throws(ReferenceError, () => {
+ count++;
+ x ^= 3;
+ count++;
+ });
+ count++;
+ })();
+}
+
+assert.sameValue(count, 2);
+assert(!('x' in scope));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/div-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/div-arguments-strict-strict.js
new file mode 100644
index 0000000000..83b57671c8
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/div-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-13-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(/=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments /= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/div-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/div-eval-strict-strict.js
new file mode 100644
index 0000000000..d65990a988
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/div-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-2-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(/=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval /= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/div-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/div-non-simple.js
new file mode 100644
index 0000000000..ce5a54be44
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/div-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound division assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 /= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/div-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/div-whitespace.js
new file mode 100644
index 0000000000..5491504675
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/div-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T2
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x /= y
+---*/
+
+var x;
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+0009 (expression)');
+assert.sameValue(x, 1, 'U+0009 (side effect)');
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+000B (expression)');
+assert.sameValue(x, 1, 'U+000B (side effect)');
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+000C (expression)');
+assert.sameValue(x, 1, 'U+000C (side effect)');
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+0020 (expression)');
+assert.sameValue(x, 1, 'U+0020 (side effect)');
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+00A0 (expression)');
+assert.sameValue(x, 1, 'U+00A0 (side effect)');
+
+x = -1;
+assert.sameValue(x
+/=
+-1, 1, 'U+000A (expression)');
+assert.sameValue(x, 1, 'U+000A (side effect)');
+
+x = -1;
+assert.sameValue(x /= -1, 1, 'U+000D (expression)');
+assert.sameValue(x, 1, 'U+000D (side effect)');
+
+x = -1;
+assert.sameValue(x
/=
-1, 1, 'U+2028 (expression)');
+assert.sameValue(x, 1, 'U+2028 (side effect)');
+
+x = -1;
+assert.sameValue(x
/=
-1, 1, 'U+2029 (expression)');
+assert.sameValue(x, 1, 'U+2029 (side effect)');
+
+x = -1;
+assert.sameValue(x  
+ 

/=  
+ 

-1, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/left-shift-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/left-shift-non-simple.js
new file mode 100644
index 0000000000..829fbaee21
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/left-shift-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "left shift" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 <<= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/lshift-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/lshift-arguments-strict-strict.js
new file mode 100644
index 0000000000..7704c1372c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/lshift-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-17-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(<<=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments <<= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/lshift-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/lshift-eval-strict-strict.js
new file mode 100644
index 0000000000..c292a4521e
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/lshift-eval-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-6-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment
+ operator(<<=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval <<= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/lshift-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/lshift-whitespace.js
new file mode 100644
index 0000000000..3036e42e4b
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/lshift-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T6
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x <<= y
+---*/
+
+var x;
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+0009 (expression)');
+assert.sameValue(x, 2, 'U+0009 (side effect)');
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+000B (expression)');
+assert.sameValue(x, 2, 'U+000B (side effect)');
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+000C (expression)');
+assert.sameValue(x, 2, 'U+000C (side effect)');
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+0020 (expression)');
+assert.sameValue(x, 2, 'U+0020 (side effect)');
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+00A0 (expression)');
+assert.sameValue(x, 2, 'U+00A0 (side effect)');
+
+x = 1;
+assert.sameValue(x
+<<=
+1, 2, 'U+000A (expression)');
+assert.sameValue(x, 2, 'U+000A (side effect)');
+
+x = 1;
+assert.sameValue(x <<= 1, 2, 'U+000D (expression)');
+assert.sameValue(x, 2, 'U+000D (side effect)');
+
+x = 1;
+assert.sameValue(x
<<=
1, 2, 'U+2028 (expression)');
+assert.sameValue(x, 2, 'U+2028 (side effect)');
+
+x = 1;
+assert.sameValue(x
<<=
1, 2, 'U+2029 (expression)');
+assert.sameValue(x, 2, 'U+2029 (side effect)');
+
+x = 1;
+assert.sameValue(x  
+ 

<<=  
+ 

1, 2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mod-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/mod-arguments-strict-strict.js
new file mode 100644
index 0000000000..cf5071d6da
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mod-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-14-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(%=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments %= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mod-div-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/mod-div-non-simple.js
new file mode 100644
index 0000000000..a66a73279d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mod-div-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "modular division" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 %= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mod-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/mod-eval-strict-strict.js
new file mode 100644
index 0000000000..9332c16cf5
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mod-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-3-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(%=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval %= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mod-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/mod-whitespace.js
new file mode 100644
index 0000000000..e9059eda6f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mod-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T3
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x %= y
+---*/
+
+var x;
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+0009 (expression)');
+assert.sameValue(x, -0, 'U+0009 (side effect)');
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+000B (expression)');
+assert.sameValue(x, -0, 'U+000B (side effect)');
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+000C (expression)');
+assert.sameValue(x, -0, 'U+000C (side effect)');
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+0020 (expression)');
+assert.sameValue(x, -0, 'U+0020 (side effect)');
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+00A0 (expression)');
+assert.sameValue(x, -0, 'U+00A0 (side effect)');
+
+x = -1;
+assert.sameValue(x
+%=
+-1, -0, 'U+000A (expression)');
+assert.sameValue(x, -0, 'U+000A (side effect)');
+
+x = -1;
+assert.sameValue(x %= -1, -0, 'U+000D (expression)');
+assert.sameValue(x, -0, 'U+000D (side effect)');
+
+x = -1;
+assert.sameValue(x
%=
-1, -0, 'U+2028 (expression)');
+assert.sameValue(x, -0, 'U+2028 (side effect)');
+
+x = -1;
+assert.sameValue(x
%=
-1, -0, 'U+2029 (expression)');
+assert.sameValue(x, -0, 'U+2029 (side effect)');
+
+x = -1;
+assert.sameValue(x  
+ 

%=  
+ 

-1, -0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, -0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mult-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/mult-arguments-strict-strict.js
new file mode 100644
index 0000000000..ff130c7fdb
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mult-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-12-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(*=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments *= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mult-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/mult-eval-strict-strict.js
new file mode 100644
index 0000000000..e3b9571c33
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mult-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-1-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(*=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval *= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mult-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/mult-non-simple.js
new file mode 100644
index 0000000000..ca674a09d7
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mult-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound multiplication assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 *= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/mult-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/mult-whitespace.js
new file mode 100644
index 0000000000..610f11b3a0
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/mult-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T1
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x *= y
+---*/
+
+var x;
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+0009 (expression)');
+assert.sameValue(x, 1, 'U+0009 (side effect)');
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+000B (expression)');
+assert.sameValue(x, 1, 'U+000B (side effect)');
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+000C (expression)');
+assert.sameValue(x, 1, 'U+000C (side effect)');
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+0020 (expression)');
+assert.sameValue(x, 1, 'U+0020 (side effect)');
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+00A0 (expression)');
+assert.sameValue(x, 1, 'U+00A0 (side effect)');
+
+x = -1;
+assert.sameValue(x
+*=
+-1, 1, 'U+000A (expression)');
+assert.sameValue(x, 1, 'U+000A (side effect)');
+
+x = -1;
+assert.sameValue(x *= -1, 1, 'U+000D (expression)');
+assert.sameValue(x, 1, 'U+000D (side effect)');
+
+x = -1;
+assert.sameValue(x
*=
-1, 1, 'U+2028 (expression)');
+assert.sameValue(x, 1, 'U+2028 (side effect)');
+
+x = -1;
+assert.sameValue(x
*=
-1, 1, 'U+2029 (expression)');
+assert.sameValue(x, 1, 'U+2029 (side effect)');
+
+x = -1;
+assert.sameValue(x  
+ 

*=  
+ 

-1, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/or-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/or-arguments-strict-strict.js
new file mode 100644
index 0000000000..6c2d92d29f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/or-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-22-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(|=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments |= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/or-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/or-eval-strict-strict.js
new file mode 100644
index 0000000000..65f633282a
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/or-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-11-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(|=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval |= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/or-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/or-whitespace.js
new file mode 100644
index 0000000000..a8558ffd7c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/or-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T11
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x |= y
+---*/
+
+var x;
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+0009 (expression)');
+assert.sameValue(x, 1, 'U+0009 (side effect)');
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+000B (expression)');
+assert.sameValue(x, 1, 'U+000B (side effect)');
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+000C (expression)');
+assert.sameValue(x, 1, 'U+000C (side effect)');
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+0020 (expression)');
+assert.sameValue(x, 1, 'U+0020 (side effect)');
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+00A0 (expression)');
+assert.sameValue(x, 1, 'U+00A0 (side effect)');
+
+x = 0;
+assert.sameValue(x
+|=
+1, 1, 'U+000A (expression)');
+assert.sameValue(x, 1, 'U+000A (side effect)');
+
+x = 0;
+assert.sameValue(x |= 1, 1, 'U+000D (expression)');
+assert.sameValue(x, 1, 'U+000D (side effect)');
+
+x = 0;
+assert.sameValue(x
|=
1, 1, 'U+2028 (expression)');
+assert.sameValue(x, 1, 'U+2028 (side effect)');
+
+x = 0;
+assert.sameValue(x
|=
1, 1, 'U+2029 (expression)');
+assert.sameValue(x, 1, 'U+2029 (side effect)');
+
+x = 0;
+assert.sameValue(x  
+ 

|=  
+ 

1, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 1, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/right-shift-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/right-shift-non-simple.js
new file mode 100644
index 0000000000..7e814e2223
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/right-shift-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "right shift" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 >>= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/shell.js b/js/src/tests/test262/language/expressions/compound-assignment/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/shell.js
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/srshift-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/srshift-arguments-strict-strict.js
new file mode 100644
index 0000000000..00ef900315
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/srshift-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-18-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(>>=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments >>= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/srshift-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/srshift-eval-strict-strict.js
new file mode 100644
index 0000000000..e197aab414
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/srshift-eval-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-7-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment
+ operator(>>=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval >>= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/srshift-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/srshift-whitespace.js
new file mode 100644
index 0000000000..4e4675045f
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/srshift-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T7
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x >>= y
+---*/
+
+var x;
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+0009 (expression)');
+assert.sameValue(x, 0, 'U+0009 (side effect)');
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+000B (expression)');
+assert.sameValue(x, 0, 'U+000B (side effect)');
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+000C (expression)');
+assert.sameValue(x, 0, 'U+000C (side effect)');
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+0020 (expression)');
+assert.sameValue(x, 0, 'U+0020 (side effect)');
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+00A0 (expression)');
+assert.sameValue(x, 0, 'U+00A0 (side effect)');
+
+x = 1;
+assert.sameValue(x
+>>=
+1, 0, 'U+000A (expression)');
+assert.sameValue(x, 0, 'U+000A (side effect)');
+
+x = 1;
+assert.sameValue(x >>= 1, 0, 'U+000D (expression)');
+assert.sameValue(x, 0, 'U+000D (side effect)');
+
+x = 1;
+assert.sameValue(x
>>=
1, 0, 'U+2028 (expression)');
+assert.sameValue(x, 0, 'U+2028 (side effect)');
+
+x = 1;
+assert.sameValue(x
>>=
1, 0, 'U+2029 (expression)');
+assert.sameValue(x, 0, 'U+2029 (side effect)');
+
+x = 1;
+assert.sameValue(x  
+ 

>>=  
+ 

1, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/sub-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/sub-arguments-strict-strict.js
new file mode 100644
index 0000000000..0bd8b2cd0c
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/sub-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-16-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(-=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments -= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/sub-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/sub-eval-strict-strict.js
new file mode 100644
index 0000000000..a8b98e484d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/sub-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-5-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(-=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval -= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/sub-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/sub-whitespace.js
new file mode 100644
index 0000000000..69f19463c9
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/sub-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T5
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x -= y
+---*/
+
+var x;
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+0009 (expression)');
+assert.sameValue(x, -2, 'U+0009 (side effect)');
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+000B (expression)');
+assert.sameValue(x, -2, 'U+000B (side effect)');
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+000C (expression)');
+assert.sameValue(x, -2, 'U+000C (side effect)');
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+0020 (expression)');
+assert.sameValue(x, -2, 'U+0020 (side effect)');
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+00A0 (expression)');
+assert.sameValue(x, -2, 'U+00A0 (side effect)');
+
+x = -1;
+assert.sameValue(x
+-=
+1, -2, 'U+000A (expression)');
+assert.sameValue(x, -2, 'U+000A (side effect)');
+
+x = -1;
+assert.sameValue(x -= 1, -2, 'U+000D (expression)');
+assert.sameValue(x, -2, 'U+000D (side effect)');
+
+x = -1;
+assert.sameValue(x
-=
1, -2, 'U+2028 (expression)');
+assert.sameValue(x, -2, 'U+2028 (side effect)');
+
+x = -1;
+assert.sameValue(x
-=
1, -2, 'U+2029 (expression)');
+assert.sameValue(x, -2, 'U+2029 (side effect)');
+
+x = -1;
+assert.sameValue(x  
+ 

-=  
+ 

1, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, -2, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/subtract-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/subtract-non-simple.js
new file mode 100644
index 0000000000..b7287ac573
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/subtract-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound subtraction assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 -= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/u-right-shift-non-simple.js b/js/src/tests/test262/language/expressions/compound-assignment/u-right-shift-non-simple.js
new file mode 100644
index 0000000000..3ebdab7788
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/u-right-shift-non-simple.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assignment-operators-static-semantics-early-errors
+info: |
+ It is an early Syntax Error if AssignmentTargetType of
+ LeftHandSideExpression is invalid or strict.
+description: Compound "unsigned right shift" assignment with non-simple target
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+1 >>>= 1;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/urshift-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/urshift-arguments-strict-strict.js
new file mode 100644
index 0000000000..234f7bd714
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/urshift-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-19-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(>>>=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments >>>= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/urshift-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/urshift-eval-strict-strict.js
new file mode 100644
index 0000000000..6db086ec18
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/urshift-eval-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-8-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment
+ operator(>>>=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval >>>= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/urshift-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/urshift-whitespace.js
new file mode 100644
index 0000000000..a17a46973d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/urshift-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T8
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x >>>= y
+---*/
+
+var x;
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+0009 (expression)');
+assert.sameValue(x, 0, 'U+0009 (side effect)');
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+000B (expression)');
+assert.sameValue(x, 0, 'U+000B (side effect)');
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+000C (expression)');
+assert.sameValue(x, 0, 'U+000C (side effect)');
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+0020 (expression)');
+assert.sameValue(x, 0, 'U+0020 (side effect)');
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+00A0 (expression)');
+assert.sameValue(x, 0, 'U+00A0 (side effect)');
+
+x = 1;
+assert.sameValue(x
+>>>=
+1, 0, 'U+000A (expression)');
+assert.sameValue(x, 0, 'U+000A (side effect)');
+
+x = 1;
+assert.sameValue(x >>>= 1, 0, 'U+000D (expression)');
+assert.sameValue(x, 0, 'U+000D (side effect)');
+
+x = 1;
+assert.sameValue(x
>>>=
1, 0, 'U+2028 (expression)');
+assert.sameValue(x, 0, 'U+2028 (side effect)');
+
+x = 1;
+assert.sameValue(x
>>>=
1, 0, 'U+2029 (expression)');
+assert.sameValue(x, 0, 'U+2029 (side effect)');
+
+x = 1;
+assert.sameValue(x  
+ 

>>>=  
+ 

1, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/xor-arguments-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/xor-arguments-strict-strict.js
new file mode 100644
index 0000000000..0f50993e5d
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/xor-arguments-strict-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-21-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier arguments
+ appear as the LeftHandSideExpression of a Compound Assignment
+ operator(^=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+arguments ^= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/xor-eval-strict-strict.js b/js/src/tests/test262/language/expressions/compound-assignment/xor-eval-strict-strict.js
new file mode 100644
index 0000000000..55fb822df1
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/xor-eval-strict-strict.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 11.13.2-6-10-s
+esid: sec-assignment-operators
+description: >
+ Strict Mode - SyntaxError is thrown if the identifier eval appear
+ as the LeftHandSideExpression of a Compound Assignment operator(^=)
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+eval ^= 20;
diff --git a/js/src/tests/test262/language/expressions/compound-assignment/xor-whitespace.js b/js/src/tests/test262/language/expressions/compound-assignment/xor-whitespace.js
new file mode 100644
index 0000000000..7baad7be85
--- /dev/null
+++ b/js/src/tests/test262/language/expressions/compound-assignment/xor-whitespace.js
@@ -0,0 +1,59 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ White Space and Line Terminator between LeftHandSideExpression and "@="
+ or between "@=" and AssignmentExpression are allowed
+es5id: 11.13.2_A1_T10
+esid: sec-assignment-operators
+description: Checking by using eval, check operator is x ^= y
+---*/
+
+var x;
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+0009 (expression)');
+assert.sameValue(x, 0, 'U+0009 (side effect)');
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+000B (expression)');
+assert.sameValue(x, 0, 'U+000B (side effect)');
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+000C (expression)');
+assert.sameValue(x, 0, 'U+000C (side effect)');
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+0020 (expression)');
+assert.sameValue(x, 0, 'U+0020 (side effect)');
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+00A0 (expression)');
+assert.sameValue(x, 0, 'U+00A0 (side effect)');
+
+x = 1;
+assert.sameValue(x
+^=
+1, 0, 'U+000A (expression)');
+assert.sameValue(x, 0, 'U+000A (side effect)');
+
+x = 1;
+assert.sameValue(x ^= 1, 0, 'U+000D (expression)');
+assert.sameValue(x, 0, 'U+000D (side effect)');
+
+x = 1;
+assert.sameValue(x
^=
1, 0, 'U+2028 (expression)');
+assert.sameValue(x, 0, 'U+2028 (side effect)');
+
+x = 1;
+assert.sameValue(x
^=
1, 0, 'U+2029 (expression)');
+assert.sameValue(x, 0, 'U+2029 (side effect)');
+
+x = 1;
+assert.sameValue(x  
+ 

^=  
+ 

1, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (expression)');
+assert.sameValue(x, 0, 'U+0009U+000BU+000CU+0020U+00A0U+000AU+000DU+2028U+2029 (side effect)');
+
+reportCompare(0, 0);