1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci// 3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci// You may obtain a copy of the License at 6425bb815Sopenharmony_ci// 7425bb815Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci// 9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci// limitations under the License. 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_cifunction parse (txt) { 16425bb815Sopenharmony_ci try { 17425bb815Sopenharmony_ci eval (txt) 18425bb815Sopenharmony_ci assert (false) 19425bb815Sopenharmony_ci } catch (e) { 20425bb815Sopenharmony_ci assert (e instanceof SyntaxError) 21425bb815Sopenharmony_ci } 22425bb815Sopenharmony_ci} 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_civar a = 21; 25425bb815Sopenharmony_civar b = 10; 26425bb815Sopenharmony_civar c; 27425bb815Sopenharmony_ci 28425bb815Sopenharmony_ciparse ("c = a++b"); 29425bb815Sopenharmony_ciparse ("c = a--b"); 30425bb815Sopenharmony_ci 31425bb815Sopenharmony_ciparse ("c = a +* b"); 32425bb815Sopenharmony_ciparse ("c = a -* b"); 33425bb815Sopenharmony_ciparse ("c = a +/ b"); 34425bb815Sopenharmony_ciparse ("c = a -/ b"); 35425bb815Sopenharmony_ciparse ("c = a +% b"); 36425bb815Sopenharmony_ciparse ("c = a -% b"); 37425bb815Sopenharmony_ci 38425bb815Sopenharmony_ciparse ("a =* b"); 39425bb815Sopenharmony_ciparse ("a =/ b"); 40425bb815Sopenharmony_ciparse ("a =% b"); 41425bb815Sopenharmony_ci 42425bb815Sopenharmony_ciparse ("c = a+"); 43425bb815Sopenharmony_ciparse ("c = a-"); 44425bb815Sopenharmony_ci 45425bb815Sopenharmony_ciparse("a++\n()"); 46425bb815Sopenharmony_ciparse("a--\n.b"); 47425bb815Sopenharmony_ci 48425bb815Sopenharmony_ciassert((-2 .toString()) === -2); 49425bb815Sopenharmony_ci 50425bb815Sopenharmony_ciNumber.prototype[0] = 123; 51425bb815Sopenharmony_ciassert(-2[0] === -123); 52425bb815Sopenharmony_ci 53425bb815Sopenharmony_cifunction f() { 54425bb815Sopenharmony_ci var a = 0; 55425bb815Sopenharmony_ci function g() {} 56425bb815Sopenharmony_ci 57425bb815Sopenharmony_ci try { 58425bb815Sopenharmony_ci eval ("g(this, 'a' = 1)"); 59425bb815Sopenharmony_ci assert (false); 60425bb815Sopenharmony_ci } catch (e) { 61425bb815Sopenharmony_ci assert (e instanceof ReferenceError); 62425bb815Sopenharmony_ci } 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_ci try { 65425bb815Sopenharmony_ci eval ("g(this, 'a' += 1)"); 66425bb815Sopenharmony_ci assert (false); 67425bb815Sopenharmony_ci } catch (e) { 68425bb815Sopenharmony_ci assert (e instanceof ReferenceError); 69425bb815Sopenharmony_ci } 70425bb815Sopenharmony_ci 71425bb815Sopenharmony_ci assert (a === 0); 72425bb815Sopenharmony_ci} 73425bb815Sopenharmony_cif(); 74425bb815Sopenharmony_ci 75425bb815Sopenharmony_cifunction g(a, b) 76425bb815Sopenharmony_ci{ 77425bb815Sopenharmony_ci assert(b === "undefined"); 78425bb815Sopenharmony_ci} 79425bb815Sopenharmony_cig(this, typeof undeclared_var) 80425bb815Sopenharmony_ci 81425bb815Sopenharmony_cifunction h() 82425bb815Sopenharmony_ci{ 83425bb815Sopenharmony_ci var done = false; 84425bb815Sopenharmony_ci var o = { a: function () { done = (this === o) } } 85425bb815Sopenharmony_ci function f() {} 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_ci with (o) { 88425bb815Sopenharmony_ci f(this, a()); 89425bb815Sopenharmony_ci } 90425bb815Sopenharmony_ci assert(done); 91425bb815Sopenharmony_ci} 92425bb815Sopenharmony_cih(); 93