From 15cc639131c8953e5038879c7d1acff98b46c5dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bargull?= <andre.bargull@gmail.com>
Date: Mon, 23 Mar 2015 17:34:52 +0100
Subject: [PATCH] Strict eval variable declarations are lexically scoped,
 assign expected result value to a previously declared global (issue #35)

Add missing variable declarations (issue #35)

Split S12.6.3_A10 and S12.6.3_A10.1 because both files seem to test implicit global variables (issue #35)

Changes (issue #35)

- Add missing noStrict flags.
- Change 13.2-15-1 and 13.2-18-1 to use assert.js and propertyHelper.js (simplifies writable and configurable checks while in strict mode).
- Add variable declarations for globals.
- Create copies of S13.2.1_A6_T1 and S13.2.1_A6_T2 instead of adding variable declarations, because both files seem to test implicit global variables.
- Split S13_A14 and S13_A16 to work in strict mode.
- Remove assignment to .name property.

Add missing noStrict flags (issue #35)

Add missing noStrict flags and variable declarations (issue #35)

Add missing noStrict flags (issue #35)
---
 test/language/statements/break/S12.8_A2.js    |  18 +--
 test/language/statements/continue/S12.7_A2.js |  18 +--
 .../statements/expression/S12.4_A2_T1.js      |   2 +-
 .../statements/expression/S12.4_A2_T2.js      |   2 +-
 .../{S12.6.3_A10.1.js => S12.6.3_A10.1_T1.js} |   1 +
 .../statements/for/S12.6.3_A10.1_T2.js        | 113 ++++++++++++++++++
 .../for/{S12.6.3_A10.js => S12.6.3_A10_T1.js} |   1 +
 .../language/statements/for/S12.6.3_A10_T2.js |  53 ++++++++
 test/language/statements/function/13.1-1-1.js |   1 +
 test/language/statements/function/13.1-1-2.js |   1 +
 test/language/statements/function/13.1-2-1.js |   1 +
 test/language/statements/function/13.1-2-2.js |   1 +
 test/language/statements/function/13.1-2-5.js |   1 +
 test/language/statements/function/13.1-2-6.js |   1 +
 test/language/statements/function/13.1-3-1.js |   1 +
 test/language/statements/function/13.1-3-2.js |   1 +
 test/language/statements/function/13.1-3-7.js |   1 +
 test/language/statements/function/13.1-3-8.js |   1 +
 .../language/statements/function/13.2-15-1.js |  30 ++---
 .../language/statements/function/13.2-18-1.js |  72 +++++------
 .../statements/function/S13.2.1_A6_T1.js      |   1 +
 .../statements/function/S13.2.1_A6_T2.js      |   1 +
 .../statements/function/S13.2.1_A6_T3.js      |  31 +++++
 .../statements/function/S13.2.1_A6_T4.js      |  31 +++++
 .../statements/function/S13.2.1_A7_T3.js      |   1 +
 .../statements/function/S13.2.2_A15_T2.js     |   2 +
 .../statements/function/S13.2.2_A15_T3.js     |   2 +
 .../statements/function/S13.2.2_A15_T4.js     |   2 +
 .../statements/function/S13.2.2_A17_T2.js     |   1 +
 .../statements/function/S13.2.2_A17_T3.js     |   1 +
 .../statements/function/S13.2.2_A18_T1.js     |   1 +
 .../statements/function/S13.2.2_A18_T2.js     |   1 +
 .../statements/function/S13.2.2_A19_T1.js     |   1 +
 .../statements/function/S13.2.2_A19_T2.js     |   1 +
 .../statements/function/S13.2.2_A19_T3.js     |   1 +
 .../statements/function/S13.2.2_A19_T4.js     |   1 +
 .../statements/function/S13.2.2_A19_T5.js     |   1 +
 .../statements/function/S13.2.2_A19_T6.js     |   1 +
 .../statements/function/S13.2.2_A19_T7.js     |   1 +
 .../statements/function/S13.2.2_A19_T8.js     |   1 +
 .../statements/function/S13.2.2_A1_T1.js      |   2 +-
 .../statements/function/S13.2.2_A1_T2.js      |   2 +-
 .../statements/function/S13.2.2_A2.js         |   2 +-
 .../statements/function/S13.2.2_A4_T2.js      |   2 +
 .../statements/function/S13.2.2_A5_T1.js      |   2 +
 .../statements/function/S13.2.2_A5_T2.js      |   2 +
 .../statements/function/S13.2.2_A6_T1.js      |   2 +
 .../statements/function/S13.2.2_A7_T2.js      |   2 +
 .../statements/function/S13_A11_T1.js         |   1 +
 .../statements/function/S13_A11_T2.js         |   1 +
 .../statements/function/S13_A12_T1.js         |   1 +
 .../statements/function/S13_A12_T2.js         |   1 +
 .../function/{S13_A14.js => S13_A14_T1.js}    |   1 +
 .../statements/function/S13_A14_T2.js         |  18 +++
 .../statements/function/S13_A15_T1.js         |   1 +
 .../statements/function/S13_A15_T2.js         |   1 +
 .../statements/function/S13_A15_T3.js         |   1 +
 .../statements/function/S13_A15_T4.js         |   1 +
 .../statements/function/S13_A15_T5.js         |   1 +
 .../function/{S13_A16.js => S13_A16_T1.js}    |   1 +
 .../statements/function/S13_A16_T2.js         |  40 +++++++
 test/language/statements/try/12.14-13.js      |   1 +
 test/language/statements/try/12.14-14.js      |   1 +
 test/language/statements/try/12.14-15.js      |   1 +
 test/language/statements/try/12.14-16.js      |   1 +
 .../language/statements/variable/12.2.1-11.js |   1 +
 .../language/statements/variable/12.2.1-12.js |   1 +
 test/language/statements/variable/S12.2_A2.js |   1 +
 test/language/statements/variable/S12.2_A5.js |   1 +
 test/language/statements/variable/S12.2_A9.js |   2 +
 test/language/statements/with/12.10-0-1.js    |   1 +
 test/language/statements/with/12.10-0-10.js   |   1 +
 test/language/statements/with/12.10-0-11.js   |   1 +
 test/language/statements/with/12.10-0-12.js   |   1 +
 test/language/statements/with/12.10-0-3.js    |   1 +
 test/language/statements/with/12.10-0-7.js    |   1 +
 test/language/statements/with/12.10-0-8.js    |   1 +
 test/language/statements/with/12.10-0-9.js    |   1 +
 test/language/statements/with/12.10-2-1.js    |   1 +
 test/language/statements/with/12.10-2-2.js    |   1 +
 test/language/statements/with/12.10-2-3.js    |   1 +
 test/language/statements/with/12.10-7-1.js    |   1 +
 82 files changed, 423 insertions(+), 87 deletions(-)
 rename test/language/statements/for/{S12.6.3_A10.1.js => S12.6.3_A10.1_T1.js} (99%)
 create mode 100644 test/language/statements/for/S12.6.3_A10.1_T2.js
 rename test/language/statements/for/{S12.6.3_A10.js => S12.6.3_A10_T1.js} (99%)
 create mode 100644 test/language/statements/for/S12.6.3_A10_T2.js
 create mode 100755 test/language/statements/function/S13.2.1_A6_T3.js
 create mode 100755 test/language/statements/function/S13.2.1_A6_T4.js
 rename test/language/statements/function/{S13_A14.js => S13_A14_T1.js} (97%)
 create mode 100755 test/language/statements/function/S13_A14_T2.js
 rename test/language/statements/function/{S13_A16.js => S13_A16_T1.js} (97%)
 create mode 100755 test/language/statements/function/S13_A16_T2.js

diff --git a/test/language/statements/break/S12.8_A2.js b/test/language/statements/break/S12.8_A2.js
index 9c231b2b7e..9c06bdbcf8 100644
--- a/test/language/statements/break/S12.8_A2.js
+++ b/test/language/statements/break/S12.8_A2.js
@@ -11,11 +11,13 @@ description: >
     Identifier
 ---*/
 
+var result;
+
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
 try{
-	eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\u000AFOR1;var y=2;} while(0);}");
-	if (i!==2) {
+	eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\u000AFOR1;var y=2;} while(0);} result = i;");
+	if (result!==2) {
 		$ERROR('#1: Since LineTerminator(U-000A) between break and Identifier not allowed break evaluates without label');
 	}
 } catch(e){
@@ -27,8 +29,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
 try{
-	eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\u000DFOR2;var y=2;} while(0);}");
-	if (i!==2) {
+	eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\u000DFOR2;var y=2;} while(0);} result = i;");
+	if (result!==2) {
 		$ERROR('#2: Since LineTerminator(U-000D) between break and Identifier not allowed break evaluates without label');
 	}
 } catch(e){
@@ -40,8 +42,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#3
 try{
-	eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\u2028FOR3;var y=2;} while(0);}");
-	if (i!==2) {
+	eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\u2028FOR3;var y=2;} while(0);} result = i;");
+	if (result!==2) {
 		$ERROR('#3: Since LineTerminator(U-2028) between break and Identifier not allowed break evaluates without label');
 	}
 } catch(e){
@@ -53,8 +55,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#4
 try{
-	eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\u2029FOR4;var y=2;} while(0);}");
-	if (i!==2) {
+	eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\u2029FOR4;var y=2;} while(0);} result = i;");
+	if (result!==2) {
 		$ERROR('#4: Since LineTerminator(U-2029) between break and Identifier not allowed break evaluates without label');
 	}
 } catch(e){
diff --git a/test/language/statements/continue/S12.7_A2.js b/test/language/statements/continue/S12.7_A2.js
index 1a4aa7c5fe..73bc2c6961 100644
--- a/test/language/statements/continue/S12.7_A2.js
+++ b/test/language/statements/continue/S12.7_A2.js
@@ -11,11 +11,13 @@ description: >
     and Identifier
 ---*/
 
+var result;
+
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
 try{
-	eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\u000AFOR1; } while(0);}");
-	if (j!==2) {
+	eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\u000AFOR1; } while(0);} result = j;");
+	if (result!==2) {
 		$ERROR('#1: Since LineTerminator(U-000A) between continue and Identifier not allowed continue evaluates without label');
 	}
 } catch(e){
@@ -27,8 +29,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
 try{
-	eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\u000DFOR2; } while(0);}");
-	if (j!==2) {
+	eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\u000DFOR2; } while(0);} result = j;");
+	if (result!==2) {
 		$ERROR('#2: Since LineTerminator(U-000D) between continue and Identifier not allowed continue evaluates without label');
 	}
 } catch(e){
@@ -40,8 +42,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#3
 try{
-	eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\u2028FOR3; } while(0);}");
-	if (j!==2) {
+	eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\u2028FOR3; } while(0);} result = j;");
+	if (result!==2) {
 		$ERROR('#3: Since LineTerminator(U-2028) between continue and Identifier not allowed continue evaluates without label');
 	}
 } catch(e){
@@ -53,8 +55,8 @@ try{
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#4
 try{
-	eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\u2029FOR4; } while(0);}");
-	if (j!==2) {
+	eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\u2029FOR4; } while(0);} result = j;");
+	if (result!==2) {
 		$ERROR('#4: Since LineTerminator(U-2029) between continue and Identifier not allowed continue evaluates without label');
 	}
 } catch(e){
diff --git a/test/language/statements/expression/S12.4_A2_T1.js b/test/language/statements/expression/S12.4_A2_T1.js
index e79747d9ce..f92959601d 100644
--- a/test/language/statements/expression/S12.4_A2_T1.js
+++ b/test/language/statements/expression/S12.4_A2_T1.js
@@ -11,7 +11,7 @@ es5id: 12.4_A2_T1
 description: Checking by using eval "(eval("x+1+x==1"))"
 ---*/
 
-var __evaluated;
+var x, __evaluated;
 
 x=1;
 
diff --git a/test/language/statements/expression/S12.4_A2_T2.js b/test/language/statements/expression/S12.4_A2_T2.js
index 50696d237d..cca391742f 100644
--- a/test/language/statements/expression/S12.4_A2_T2.js
+++ b/test/language/statements/expression/S12.4_A2_T2.js
@@ -11,7 +11,7 @@ es5id: 12.4_A2_T2
 description: Checking by using eval(eval(x), where x is any string)
 ---*/
 
-var __evaluated;
+var x, __evaluated;
 
 x="5+1|0===0";
 
diff --git a/test/language/statements/for/S12.6.3_A10.1.js b/test/language/statements/for/S12.6.3_A10.1_T1.js
similarity index 99%
rename from test/language/statements/for/S12.6.3_A10.1.js
rename to test/language/statements/for/S12.6.3_A10.1_T1.js
index 8d74ca271b..5cf7aafb0f 100644
--- a/test/language/statements/for/S12.6.3_A10.1.js
+++ b/test/language/statements/for/S12.6.3_A10.1_T1.js
@@ -7,6 +7,7 @@ es5id: 12.6.3_A10.1
 description: >
     Checking if executing nested "var-loops" nine blocks depth is
     evaluated properly
+flags: [noStrict]
 ---*/
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/for/S12.6.3_A10.1_T2.js b/test/language/statements/for/S12.6.3_A10.1_T2.js
new file mode 100644
index 0000000000..10dec59efc
--- /dev/null
+++ b/test/language/statements/for/S12.6.3_A10.1_T2.js
@@ -0,0 +1,113 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Nested "var-loops" nine blocks depth is evaluated properly
+es5id: 12.6.3_A10.1
+description: >
+    Checking if executing nested "var-loops" nine blocks depth is
+    evaluated properly
+---*/
+
+var __str, index2, index3, index6;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+try {
+	__in__deepest__loop=__in__deepest__loop;
+} catch (e) {
+	$ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+try {
+	index0=index0;
+} catch (e) {
+	$ERROR('#2: "index0=index0" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#3
+try {
+	index1=index1;
+} catch (e) {
+	$ERROR('#3: "index1=index1" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#4
+try {
+	index4=index4;
+} catch (e) {
+	$ERROR('#4: "index4=index4" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#5
+try {
+	index5=index5;
+} catch (e) {
+	$ERROR('#4: "index5=index5" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#6
+try {
+	index7=index7;
+} catch (e) {
+	$ERROR('#6: "index7=index7" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#7
+try {
+	index8=index8;
+} catch (e) {
+	$ERROR('#7: "index8=index8" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+for( var index0=0; index0<=1; index0++) {
+	for(var index1=0; index1<=index0; index1++) {
+		for( index2=0; index2<=index1; index2++) {
+			for( index3=0; index3<=index2; index3++) {
+				for(var index4=0; index4<=index3; index4++) {
+					for(var index5=0; index5<=index4; index5++) {
+						for( index6=0; index6<=index5; index6++) {
+							for(var index7=0; index7<=index6; index7++) {
+								for(var index8=0; index8<=index1; index8++) {
+									var __in__deepest__loop;
+									__str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n';
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") {
+	$ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual:  __str ==='+ __str  );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/for/S12.6.3_A10.js b/test/language/statements/for/S12.6.3_A10_T1.js
similarity index 99%
rename from test/language/statements/for/S12.6.3_A10.js
rename to test/language/statements/for/S12.6.3_A10_T1.js
index d2c7903dac..458c360347 100644
--- a/test/language/statements/for/S12.6.3_A10.js
+++ b/test/language/statements/for/S12.6.3_A10_T1.js
@@ -7,6 +7,7 @@ es5id: 12.6.3_A10
 description: >
     Checking if executing nested "var-loops" nine blocks depth is
     evaluated properly
+flags: [noStrict]
 ---*/
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/for/S12.6.3_A10_T2.js b/test/language/statements/for/S12.6.3_A10_T2.js
new file mode 100644
index 0000000000..6b4743e792
--- /dev/null
+++ b/test/language/statements/for/S12.6.3_A10_T2.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Nested "var-loops" nine blocks depth is evaluated properly
+es5id: 12.6.3_A10
+description: >
+    Checking if executing nested "var-loops" nine blocks depth is
+    evaluated properly
+---*/
+
+var __str, index0, index1, index2, index3, index4, index5, index6, index7, index8;
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#
+try {
+	__in__deepest__loop=__in__deepest__loop;
+} catch (e) {
+	$ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+__str="";
+
+for( index0=0; index0<=1; index0++) {
+	for( index1=0; index1<=index0; index1++) {
+		for( index2=0; index2<=index1; index2++) {
+			for( index3=0; index3<=index2; index3++) {
+				for( index4=0; index4<=index3; index4++) {
+					for( index5=0; index5<=index4; index5++) {
+						for( index6=0; index6<=index5; index6++) {
+							for( index7=0; index7<=index6; index7++) {
+								for( index8=0; index8<=index1; index8++) {
+									var __in__deepest__loop;
+									__str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n';
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#2
+if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") {
+	$ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual:  __str ==='+ __str  );
+}
+//
+//////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/13.1-1-1.js b/test/language/statements/function/13.1-1-1.js
index 1b83c23a85..e383345001 100644
--- a/test/language/statements/function/13.1-1-1.js
+++ b/test/language/statements/function/13.1-1-1.js
@@ -10,6 +10,7 @@ description: >
     Duplicate identifier allowed in non-strict function declaration
     parameter list
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-1-2.js b/test/language/statements/function/13.1-1-2.js
index 9b7ba19eab..93de15fbec 100644
--- a/test/language/statements/function/13.1-1-2.js
+++ b/test/language/statements/function/13.1-1-2.js
@@ -10,6 +10,7 @@ description: >
     Duplicate identifier allowed in non-strict function expression
     parameter list
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-2-1.js b/test/language/statements/function/13.1-2-1.js
index 018f0098c8..f0e7b84e2a 100644
--- a/test/language/statements/function/13.1-2-1.js
+++ b/test/language/statements/function/13.1-2-1.js
@@ -10,6 +10,7 @@ description: >
     eval allowed as formal parameter name of a non-strict function
     declaration
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-2-2.js b/test/language/statements/function/13.1-2-2.js
index b60482d5ed..a4cc5dc9ab 100644
--- a/test/language/statements/function/13.1-2-2.js
+++ b/test/language/statements/function/13.1-2-2.js
@@ -10,6 +10,7 @@ description: >
     eval allowed as formal parameter name of a non-strict function
     expression
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-2-5.js b/test/language/statements/function/13.1-2-5.js
index 9b069fbf61..942cd44e1f 100644
--- a/test/language/statements/function/13.1-2-5.js
+++ b/test/language/statements/function/13.1-2-5.js
@@ -10,6 +10,7 @@ description: >
     arguments allowed as formal parameter name of a non-strict
     function declaration
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-2-6.js b/test/language/statements/function/13.1-2-6.js
index 0bfb81b09c..06da750928 100644
--- a/test/language/statements/function/13.1-2-6.js
+++ b/test/language/statements/function/13.1-2-6.js
@@ -10,6 +10,7 @@ description: >
     arguments allowed as formal parameter name of a non-strict
     function expression
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-3-1.js b/test/language/statements/function/13.1-3-1.js
index d75777447d..7a6b4bbe27 100644
--- a/test/language/statements/function/13.1-3-1.js
+++ b/test/language/statements/function/13.1-3-1.js
@@ -10,6 +10,7 @@ description: >
     eval allowed as function identifier in non-strict function
     declaration
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-3-2.js b/test/language/statements/function/13.1-3-2.js
index 05b0720315..681270f6d8 100644
--- a/test/language/statements/function/13.1-3-2.js
+++ b/test/language/statements/function/13.1-3-2.js
@@ -10,6 +10,7 @@ description: >
     eval allowed as function identifier in non-strict function
     expression
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-3-7.js b/test/language/statements/function/13.1-3-7.js
index 0a059e4692..07275c58f9 100644
--- a/test/language/statements/function/13.1-3-7.js
+++ b/test/language/statements/function/13.1-3-7.js
@@ -10,6 +10,7 @@ description: >
     arguments allowed as function identifier in non-strict function
     declaration
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.1-3-8.js b/test/language/statements/function/13.1-3-8.js
index 356dbc78ae..3b95fcc5f9 100644
--- a/test/language/statements/function/13.1-3-8.js
+++ b/test/language/statements/function/13.1-3-8.js
@@ -10,6 +10,7 @@ description: >
     arguments allowed as function identifier in non-strict function
     expression
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase()
diff --git a/test/language/statements/function/13.2-15-1.js b/test/language/statements/function/13.2-15-1.js
index 0e2952a34e..0105301bec 100644
--- a/test/language/statements/function/13.2-15-1.js
+++ b/test/language/statements/function/13.2-15-1.js
@@ -9,30 +9,14 @@ es5id: 13.2-15-1
 description: >
     Function Object has length as its own property and does not invoke
     the setter defined on Function.prototype.length (Step 15)
-includes: [runTestCase.js]
+includes: [assert.js, propertyHelper.js]
 ---*/
 
-function testcase() {
-            var fun = function (x, y) { };
+var fun = function (x, y) { };
 
-            var verifyValue = false;
-            verifyValue = (fun.hasOwnProperty("length") && fun.length === 2);
+assert(fun.hasOwnProperty("length"));
+assert.sameValue(fun.length, 2);
 
-            var verifyWritable = false;
-            fun.length = 1001;
-            verifyWritable = (fun.length === 1001);
-
-            var verifyEnumerable = false;
-            for (var p in fun) {
-                if (p === "length") {
-                    verifyEnumerable = true;
-                }
-            }
-
-            var verifyConfigurable = false;
-            delete fun.length;
-            verifyConfigurable = fun.hasOwnProperty("length");
-
-            return verifyValue && !verifyWritable && !verifyEnumerable && !verifyConfigurable;
-        }
-runTestCase(testcase);
+verifyNotEnumerable(fun, "length");
+verifyNotWritable(fun, "length");
+verifyConfigurable(fun, "length");
diff --git a/test/language/statements/function/13.2-18-1.js b/test/language/statements/function/13.2-18-1.js
index 8d7b8af248..653d4829bb 100644
--- a/test/language/statements/function/13.2-18-1.js
+++ b/test/language/statements/function/13.2-18-1.js
@@ -10,48 +10,34 @@ description: >
     Function Object has 'prototype' as its own property, it is not
     enumerable and does not invoke the setter defined on
     Function.prototype (Step 18)
-includes: [runTestCase.js]
+includes: [assert.js, propertyHelper.js]
 ---*/
 
-function testcase() {
-        try {
-            var getFunc = function () {
-                return 100;
-            };
-
-            var data = "data";
-            var setFunc = function (value) {
-                data = value;
-            };
-            Object.defineProperty(Function.prototype, "prototype", {
-                get: getFunc,
-                set: setFunc,
-                configurable: true
-            });
-
-            var fun = function () { };
-
-            var verifyValue = false;
-            verifyValue = (fun.prototype !== 100 && fun.prototype.toString() === "[object Object]");
-
-            var verifyEnumerable = false;
-            for (var p in fun) {
-                if (p === "prototype" && fun.hasOwnProperty("prototype")) {
-                    verifyEnumerable = true;
-                }
-            }
-
-            var verifyConfigurable = false;
-            delete fun.prototype;
-            verifyConfigurable = fun.hasOwnProperty("prototype");
-
-            var verifyWritable = false;
-            fun.prototype = 12
-            verifyWritable = (fun.prototype === 12);
-
-            return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable && data === "data";
-        } finally {
-            delete Function.prototype.prototype;
-        }
-    }
-runTestCase(testcase);
+try {
+    var getFunc = function () {
+        return 100;
+    };
+
+    var data = "data";
+    var setFunc = function (value) {
+        data = value;
+    };
+    Object.defineProperty(Function.prototype, "prototype", {
+        get: getFunc,
+        set: setFunc,
+        configurable: true
+    });
+
+    var fun = function () { };
+
+    assert.notSameValue(fun.prototype, 100);
+    assert.sameValue(fun.prototype.toString(), "[object Object]");
+
+    verifyNotEnumerable(fun, "prototype");
+    verifyWritable(fun, "prototype");
+    verifyNotConfigurable(fun, "prototype");
+
+    assert.sameValue(data, "data");
+} finally {
+    delete Function.prototype.prototype;
+}
diff --git a/test/language/statements/function/S13.2.1_A6_T1.js b/test/language/statements/function/S13.2.1_A6_T1.js
index 1afa267111..6e51aa8fe2 100644
--- a/test/language/statements/function/S13.2.1_A6_T1.js
+++ b/test/language/statements/function/S13.2.1_A6_T1.js
@@ -5,6 +5,7 @@
 info: Primitive types are passed by value
 es5id: 13.2.1_A6_T1
 description: Declaring a function with "function __func(arg1, arg2)"
+flags: [noStrict]
 ---*/
 
 function __func(arg1, arg2){
diff --git a/test/language/statements/function/S13.2.1_A6_T2.js b/test/language/statements/function/S13.2.1_A6_T2.js
index a20aa33feb..78f562d500 100644
--- a/test/language/statements/function/S13.2.1_A6_T2.js
+++ b/test/language/statements/function/S13.2.1_A6_T2.js
@@ -5,6 +5,7 @@
 info: Primitive types are passed by value
 es5id: 13.2.1_A6_T2
 description: Declaring a function with "__func = function(arg1, arg2)"
+flags: [noStrict]
 ---*/
 
 __func = function(arg1, arg2){
diff --git a/test/language/statements/function/S13.2.1_A6_T3.js b/test/language/statements/function/S13.2.1_A6_T3.js
new file mode 100755
index 0000000000..6f7ca5fbc1
--- /dev/null
+++ b/test/language/statements/function/S13.2.1_A6_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Primitive types are passed by value
+es5id: 13.2.1_A6_T1
+description: Declaring a function with "function __func(arg1, arg2)"
+---*/
+
+var __func, y, b;
+
+function __func(arg1, arg2){
+    arg1++;
+    arg2+="BA";
+};
+
+var x=1;
+y=2;
+var a="AB"
+b="SAM";
+
+__func(x,a);
+__func(y,b);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") {
+	$ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/S13.2.1_A6_T4.js b/test/language/statements/function/S13.2.1_A6_T4.js
new file mode 100755
index 0000000000..e3a6cd749b
--- /dev/null
+++ b/test/language/statements/function/S13.2.1_A6_T4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Primitive types are passed by value
+es5id: 13.2.1_A6_T2
+description: Declaring a function with "__func = function(arg1, arg2)"
+---*/
+
+var __func, y, b;
+
+__func = function(arg1, arg2){
+    arg1++;
+    arg2+="BA";
+};
+
+var x=1;
+y=2;
+var a="AB"
+b="SAM";
+
+__func(x,a);
+__func(y,b);
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") {
+	$ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/S13.2.1_A7_T3.js b/test/language/statements/function/S13.2.1_A7_T3.js
index 7fc0140bff..8b5d1356a8 100644
--- a/test/language/statements/function/S13.2.1_A7_T3.js
+++ b/test/language/statements/function/S13.2.1_A7_T3.js
@@ -9,6 +9,7 @@ info: >
 es5id: 13.2.1_A7_T3
 description: Returning number. Declaring a function with "function __func()"
 includes: [Test262Error.js]
+flags: [noStrict]
 ---*/
 
 function __func(){
diff --git a/test/language/statements/function/S13.2.2_A15_T2.js b/test/language/statements/function/S13.2.2_A15_T2.js
index 94c9ad3e02..cf8ac4aa40 100644
--- a/test/language/statements/function/S13.2.2_A15_T2.js
+++ b/test/language/statements/function/S13.2.2_A15_T2.js
@@ -11,6 +11,8 @@ description: >
     declared with "obj = {}"
 ---*/
 
+var obj;
+
 var __obj = new __FACTORY();
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/S13.2.2_A15_T3.js b/test/language/statements/function/S13.2.2_A15_T3.js
index f2ef353f4b..48af37853b 100644
--- a/test/language/statements/function/S13.2.2_A15_T3.js
+++ b/test/language/statements/function/S13.2.2_A15_T3.js
@@ -11,6 +11,8 @@ description: >
     declared with "var obj = {}"
 ---*/
 
+var __FACTORY, __obj;
+
 __FACTORY = function (){
     this.prop = 1;
     var obj = {};
diff --git a/test/language/statements/function/S13.2.2_A15_T4.js b/test/language/statements/function/S13.2.2_A15_T4.js
index cba1f2d3dc..761ad82e55 100644
--- a/test/language/statements/function/S13.2.2_A15_T4.js
+++ b/test/language/statements/function/S13.2.2_A15_T4.js
@@ -11,6 +11,8 @@ description: >
     declared with "obj = {}"
 ---*/
 
+var __FACTORY, __obj, obj;
+
 __FACTORY = function(){
     this.prop = 1;
     obj = {};
diff --git a/test/language/statements/function/S13.2.2_A17_T2.js b/test/language/statements/function/S13.2.2_A17_T2.js
index 950ee3dd83..403014d044 100644
--- a/test/language/statements/function/S13.2.2_A17_T2.js
+++ b/test/language/statements/function/S13.2.2_A17_T2.js
@@ -5,6 +5,7 @@
 info: FunctionExpression containing "with" statement is admitted
 es5id: 13.2.2_A17_T2
 description: Throwing an exception within "with" statement
+flags: [noStrict]
 ---*/
 
 this.p1="alert";
diff --git a/test/language/statements/function/S13.2.2_A17_T3.js b/test/language/statements/function/S13.2.2_A17_T3.js
index 24accb026c..a1d5c333c8 100644
--- a/test/language/statements/function/S13.2.2_A17_T3.js
+++ b/test/language/statements/function/S13.2.2_A17_T3.js
@@ -9,6 +9,7 @@ description: >
     var getRight declaration adds variable to function scope  but
     getRight in statement resolves within with(__obj) scope and
     searchs getRight in __obj first
+flags: [noStrict]
 ---*/
 
 p1="alert";
diff --git a/test/language/statements/function/S13.2.2_A18_T1.js b/test/language/statements/function/S13.2.2_A18_T1.js
index 1c7b2f98fd..1b2022b84e 100644
--- a/test/language/statements/function/S13.2.2_A18_T1.js
+++ b/test/language/statements/function/S13.2.2_A18_T1.js
@@ -7,6 +7,7 @@ info: >
     function is admitted
 es5id: 13.2.2_A18_T1
 description: "Object is declared with \"var __obj={callee:\"a\"}\""
+flags: [noStrict]
 ---*/
 
 var callee=0, b;
diff --git a/test/language/statements/function/S13.2.2_A18_T2.js b/test/language/statements/function/S13.2.2_A18_T2.js
index e923408c3c..ea34b4fbb4 100644
--- a/test/language/statements/function/S13.2.2_A18_T2.js
+++ b/test/language/statements/function/S13.2.2_A18_T2.js
@@ -7,6 +7,7 @@ info: >
     function is admitted
 es5id: 13.2.2_A18_T2
 description: "Object is declared with \"__obj={callee:\"a\"}\""
+flags: [noStrict]
 ---*/
 
 this.callee = 0;
diff --git a/test/language/statements/function/S13.2.2_A19_T1.js b/test/language/statements/function/S13.2.2_A19_T1.js
index 714c0d55e6..4a7e06babc 100644
--- a/test/language/statements/function/S13.2.2_A19_T1.js
+++ b/test/language/statements/function/S13.2.2_A19_T1.js
@@ -5,6 +5,7 @@
 info: Function's scope chain is started when it is declared
 es5id: 13.2.2_A19_T1
 description: Function is declared in the global scope
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T2.js b/test/language/statements/function/S13.2.2_A19_T2.js
index 42beeafad2..f5ae024751 100644
--- a/test/language/statements/function/S13.2.2_A19_T2.js
+++ b/test/language/statements/function/S13.2.2_A19_T2.js
@@ -5,6 +5,7 @@
 info: Function's scope chain is started when it is declared
 es5id: 13.2.2_A19_T2
 description: Function is declared in the object scope. Using "with" statement
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T3.js b/test/language/statements/function/S13.2.2_A19_T3.js
index 1a2c076781..baf7e4f311 100644
--- a/test/language/statements/function/S13.2.2_A19_T3.js
+++ b/test/language/statements/function/S13.2.2_A19_T3.js
@@ -7,6 +7,7 @@ es5id: 13.2.2_A19_T3
 description: >
     Function is declared in the object scope and then an exception is
     thrown
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T4.js b/test/language/statements/function/S13.2.2_A19_T4.js
index a3020aae54..edd4dfa34f 100644
--- a/test/language/statements/function/S13.2.2_A19_T4.js
+++ b/test/language/statements/function/S13.2.2_A19_T4.js
@@ -7,6 +7,7 @@ es5id: 13.2.2_A19_T4
 description: >
     Function is declared in the hierarchical object scope and then an
     exception is thrown
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T5.js b/test/language/statements/function/S13.2.2_A19_T5.js
index 9b275ccdaa..52b88a1fa6 100644
--- a/test/language/statements/function/S13.2.2_A19_T5.js
+++ b/test/language/statements/function/S13.2.2_A19_T5.js
@@ -7,6 +7,7 @@ es5id: 13.2.2_A19_T5
 description: >
     Function is declared in the object scope, then an exception is
     thrown and the object is deleted
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T6.js b/test/language/statements/function/S13.2.2_A19_T6.js
index 99da95ff30..90c2f36de8 100644
--- a/test/language/statements/function/S13.2.2_A19_T6.js
+++ b/test/language/statements/function/S13.2.2_A19_T6.js
@@ -7,6 +7,7 @@ es5id: 13.2.2_A19_T6
 description: >
     Function is declared in the "object->do-while" scope, then the
     object is deleted and another object with the same name is declared
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T7.js b/test/language/statements/function/S13.2.2_A19_T7.js
index dbb588905b..f2b00a9cea 100644
--- a/test/language/statements/function/S13.2.2_A19_T7.js
+++ b/test/language/statements/function/S13.2.2_A19_T7.js
@@ -5,6 +5,7 @@
 info: Function's scope chain is started when it is declared
 es5id: 13.2.2_A19_T7
 description: Function is declared in the object scope as a variable
+flags: [noStrict]
 ---*/
 
 var a = 1;
diff --git a/test/language/statements/function/S13.2.2_A19_T8.js b/test/language/statements/function/S13.2.2_A19_T8.js
index 32ff0251a7..feeee3f0f5 100644
--- a/test/language/statements/function/S13.2.2_A19_T8.js
+++ b/test/language/statements/function/S13.2.2_A19_T8.js
@@ -5,6 +5,7 @@
 info: Function's scope chain is started when it is declared
 es5id: 13.2.2_A19_T8
 description: Function is declared multiply times
+flags: [noStrict]
 ---*/
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/S13.2.2_A1_T1.js b/test/language/statements/function/S13.2.2_A1_T1.js
index 4abaf96d27..aef9ccf7cb 100644
--- a/test/language/statements/function/S13.2.2_A1_T1.js
+++ b/test/language/statements/function/S13.2.2_A1_T1.js
@@ -21,7 +21,7 @@ catch(e){
     $ERROR('#0: __PROTO.type=__MONSTER does not lead to throwing exception')
 }
 
-function __FACTORY(){this.name=__PREDATOR};
+function __FACTORY(){};
 
 __FACTORY.prototype=__PROTO;
 
diff --git a/test/language/statements/function/S13.2.2_A1_T2.js b/test/language/statements/function/S13.2.2_A1_T2.js
index 32c124b4d9..b0cc1ebf0c 100644
--- a/test/language/statements/function/S13.2.2_A1_T2.js
+++ b/test/language/statements/function/S13.2.2_A1_T2.js
@@ -22,7 +22,7 @@ catch(e){
     $FAIL('#0: __PROTO.type=__MONSTER does not lead to throwing exception')
 }
 
-var __FACTORY = function(){this.name=__PREDATOR};
+var __FACTORY = function(){};
 
 __FACTORY.prototype=__PROTO;
 
diff --git a/test/language/statements/function/S13.2.2_A2.js b/test/language/statements/function/S13.2.2_A2.js
index ac9d419f15..b004dfebf4 100644
--- a/test/language/statements/function/S13.2.2_A2.js
+++ b/test/language/statements/function/S13.2.2_A2.js
@@ -21,7 +21,7 @@ catch(e){
     $ERROR('#0: __PROTO.type=__PLANT does not lead to throwing exception')
 }
 
-function __FACTORY(){this.name=__ROSE};
+function __FACTORY(){};
 
 __FACTORY.prototype=__PROTO;
 
diff --git a/test/language/statements/function/S13.2.2_A4_T2.js b/test/language/statements/function/S13.2.2_A4_T2.js
index 678c08b0eb..661364523f 100644
--- a/test/language/statements/function/S13.2.2_A4_T2.js
+++ b/test/language/statements/function/S13.2.2_A4_T2.js
@@ -12,6 +12,8 @@ es5id: 13.2.2_A4_T2
 description: Declaring a function with "__FACTORY = function()"
 ---*/
 
+var __CUBE, __FACTORY, __device;
+
 __CUBE="cube";
 
 __FACTORY = function(){};
diff --git a/test/language/statements/function/S13.2.2_A5_T1.js b/test/language/statements/function/S13.2.2_A5_T1.js
index 5899ec92be..4e8c8cf00c 100644
--- a/test/language/statements/function/S13.2.2_A5_T1.js
+++ b/test/language/statements/function/S13.2.2_A5_T1.js
@@ -11,6 +11,8 @@ es5id: 13.2.2_A5_T1
 description: Declaring a function with "function __FACTORY(arg1, arg2)"
 ---*/
 
+var __VOLUME, __RED, __ID, __TOP, __BOTTOM, __LEFT, color, top, left, __device;
+
 __VOLUME=8;
 __RED="red";
 __ID=12342;
diff --git a/test/language/statements/function/S13.2.2_A5_T2.js b/test/language/statements/function/S13.2.2_A5_T2.js
index c73bab462b..8636c8e16b 100644
--- a/test/language/statements/function/S13.2.2_A5_T2.js
+++ b/test/language/statements/function/S13.2.2_A5_T2.js
@@ -11,6 +11,8 @@ es5id: 13.2.2_A5_T2
 description: Declaring a function with "__FACTORY = function(arg1, arg2)"
 ---*/
 
+var __VOLUME, __RED, __ID, __TOP, __BOTTOM, __LEFT, __FACTORY, color, top, left, __device;
+
 __VOLUME=8;
 __RED="red";
 __ID=12342;
diff --git a/test/language/statements/function/S13.2.2_A6_T1.js b/test/language/statements/function/S13.2.2_A6_T1.js
index 128a071f1e..8cf1b704cd 100644
--- a/test/language/statements/function/S13.2.2_A6_T1.js
+++ b/test/language/statements/function/S13.2.2_A6_T1.js
@@ -12,6 +12,8 @@ es5id: 13.2.2_A6_T1
 description: Declaring a function with "__func = function(arg)"
 ---*/
 
+var __FOO, __BAR, __func, __obj;
+
 __FOO="fooValue";
 __BAR="barValue";
 
diff --git a/test/language/statements/function/S13.2.2_A7_T2.js b/test/language/statements/function/S13.2.2_A7_T2.js
index 80774ed54a..30ecf2a2c0 100644
--- a/test/language/statements/function/S13.2.2_A7_T2.js
+++ b/test/language/statements/function/S13.2.2_A7_T2.js
@@ -12,6 +12,8 @@ es5id: 13.2.2_A7_T2
 description: Declaring a "function as function __func (arg)"
 ---*/
 
+var __FRST, __SCND, __func, __obj__;
+
 __FRST="one";
 __SCND="two";
 
diff --git a/test/language/statements/function/S13_A11_T1.js b/test/language/statements/function/S13_A11_T1.js
index 8f60d3a26a..1f61478f42 100644
--- a/test/language/statements/function/S13_A11_T1.js
+++ b/test/language/statements/function/S13_A11_T1.js
@@ -7,6 +7,7 @@ info: >
     can be deleted
 es5id: 13_A11_T1
 description: Returning result of "delete arguments"
+flags: [noStrict]
 ---*/
 
 function __func(){ return delete arguments;}
diff --git a/test/language/statements/function/S13_A11_T2.js b/test/language/statements/function/S13_A11_T2.js
index 430413931a..d98c18017e 100644
--- a/test/language/statements/function/S13_A11_T2.js
+++ b/test/language/statements/function/S13_A11_T2.js
@@ -9,6 +9,7 @@ es5id: 13_A11_T2
 description: >
     Checking if deleting the arguments property fails and then
     returning it
+flags: [noStrict]
 ---*/
 
 function __func(){ 
diff --git a/test/language/statements/function/S13_A12_T1.js b/test/language/statements/function/S13_A12_T1.js
index 5d927f44f6..b665fe9df7 100644
--- a/test/language/statements/function/S13_A12_T1.js
+++ b/test/language/statements/function/S13_A12_T1.js
@@ -7,6 +7,7 @@ es5id: 13_A12_T1
 description: >
     Checking if deleting a function that is declared in global scope
     fails
+flags: [noStrict]
 ---*/
 
 ALIVE="Letov is alive"
diff --git a/test/language/statements/function/S13_A12_T2.js b/test/language/statements/function/S13_A12_T2.js
index 24f83d0c3c..46f81baae1 100644
--- a/test/language/statements/function/S13_A12_T2.js
+++ b/test/language/statements/function/S13_A12_T2.js
@@ -7,6 +7,7 @@ es5id: 13_A12_T2
 description: >
     Checking if deleting a function that is declared in function scope
     fails
+flags: [noStrict]
 ---*/
 
 ALIVE="Letov is alive"
diff --git a/test/language/statements/function/S13_A14.js b/test/language/statements/function/S13_A14_T1.js
similarity index 97%
rename from test/language/statements/function/S13_A14.js
rename to test/language/statements/function/S13_A14_T1.js
index b323b1bce8..6051776242 100644
--- a/test/language/statements/function/S13_A14.js
+++ b/test/language/statements/function/S13_A14_T1.js
@@ -5,6 +5,7 @@
 info: Unicode symbols in function name are allowed
 es5id: 13_A14
 description: Defining function name with unicode symbols
+flags: [noStrict]
 ---*/
 
 eval("function __func\u0041(__arg){return __arg;};");
diff --git a/test/language/statements/function/S13_A14_T2.js b/test/language/statements/function/S13_A14_T2.js
new file mode 100755
index 0000000000..f28b51c5f8
--- /dev/null
+++ b/test/language/statements/function/S13_A14_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Unicode symbols in function name are allowed
+es5id: 13_A14
+description: Defining function name with unicode symbols
+---*/
+
+var funcA = eval("function __func\u0041(__arg){return __arg;}; __funcA");
+
+//////////////////////////////////////////////////////////////////////////////
+//CHECK#1
+if (typeof funcA !== "function") {
+	$ERROR('#1: unicode symbols in function name are allowed');
+}
+//
+//////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/function/S13_A15_T1.js b/test/language/statements/function/S13_A15_T1.js
index 7255675703..8a4286423e 100644
--- a/test/language/statements/function/S13_A15_T1.js
+++ b/test/language/statements/function/S13_A15_T1.js
@@ -5,6 +5,7 @@
 info: "''arguments'' variable overrides ActivationObject.arguments"
 es5id: 13_A15_T1
 description: Declaring a function with "__func(arguments)"
+flags: [noStrict]
 ---*/
 
 function __func(arguments){
diff --git a/test/language/statements/function/S13_A15_T2.js b/test/language/statements/function/S13_A15_T2.js
index f3bf4276ec..241ee049c6 100644
--- a/test/language/statements/function/S13_A15_T2.js
+++ b/test/language/statements/function/S13_A15_T2.js
@@ -5,6 +5,7 @@
 info: "''arguments'' variable overrides ActivationObject.arguments"
 es5id: 13_A15_T2
 description: Overriding arguments within functions body
+flags: [noStrict]
 ---*/
 
 THE_ANSWER="Answer to Life, the Universe, and Everything";
diff --git a/test/language/statements/function/S13_A15_T3.js b/test/language/statements/function/S13_A15_T3.js
index 2931c034dc..f4f741928a 100644
--- a/test/language/statements/function/S13_A15_T3.js
+++ b/test/language/statements/function/S13_A15_T3.js
@@ -5,6 +5,7 @@
 info: "''arguments'' variable overrides ActivationObject.arguments"
 es5id: 13_A15_T3
 description: Declaring a variable named with "arguments" without a function
+flags: [noStrict]
 ---*/
 
 THE_ANSWER="Answer to Life, the Universe, and Everything";
diff --git a/test/language/statements/function/S13_A15_T4.js b/test/language/statements/function/S13_A15_T4.js
index 72acf77b12..9f8524db53 100644
--- a/test/language/statements/function/S13_A15_T4.js
+++ b/test/language/statements/function/S13_A15_T4.js
@@ -7,6 +7,7 @@ es5id: 13_A15_T4
 description: >
     Declaring a variable named with "arguments" and following a
     "return" statement within a function body
+flags: [noStrict]
 ---*/
 
 THE_ANSWER="Answer to Life, the Universe, and Everything";
diff --git a/test/language/statements/function/S13_A15_T5.js b/test/language/statements/function/S13_A15_T5.js
index 5e2cf9e661..9563b78390 100644
--- a/test/language/statements/function/S13_A15_T5.js
+++ b/test/language/statements/function/S13_A15_T5.js
@@ -5,6 +5,7 @@
 info: "''arguments'' variable overrides ActivationObject.arguments"
 es5id: 13_A15_T5
 description: Creating a variable named with "arguments" without a function
+flags: [noStrict]
 ---*/
 
 THE_ANSWER="Answer to Life, the Universe, and Everything";
diff --git a/test/language/statements/function/S13_A16.js b/test/language/statements/function/S13_A16_T1.js
similarity index 97%
rename from test/language/statements/function/S13_A16.js
rename to test/language/statements/function/S13_A16_T1.js
index 6d2bdbea98..11dba26c68 100644
--- a/test/language/statements/function/S13_A16.js
+++ b/test/language/statements/function/S13_A16_T1.js
@@ -5,6 +5,7 @@
 info: Any separators are admitted between declaration chunks
 es5id: 13_A16
 description: Inserting separators between declaration chunks
+flags: [noStrict]
 ---*/
 
 function
diff --git a/test/language/statements/function/S13_A16_T2.js b/test/language/statements/function/S13_A16_T2.js
new file mode 100755
index 0000000000..00fbf5995e
--- /dev/null
+++ b/test/language/statements/function/S13_A16_T2.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: Any separators are admitted between declaration chunks
+es5id: 13_A16
+description: Inserting separators between declaration chunks
+---*/
+
+function
+x
+(
+)
+{
+}
+;
+
+x();
+
+function                                                    y                                   (                                          )                                              {};
+
+y();
+
+function
+
+z
+
+(
+
+)
+
+{
+    
+}
+
+;
+
+z();
+
+eval("function\u0009\u2029w(\u000C)\u00A0{\u000D}; w()");
diff --git a/test/language/statements/try/12.14-13.js b/test/language/statements/try/12.14-13.js
index 01348f2bd7..e932ce8f0d 100644
--- a/test/language/statements/try/12.14-13.js
+++ b/test/language/statements/try/12.14-13.js
@@ -8,6 +8,7 @@
 es5id: 12.14-13
 description: catch introduces scope - updates are based on scope
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/try/12.14-14.js b/test/language/statements/try/12.14-14.js
index 20fc2a22d4..bba924909e 100644
--- a/test/language/statements/try/12.14-14.js
+++ b/test/language/statements/try/12.14-14.js
@@ -13,6 +13,7 @@ description: >
 includes:
     - runTestCase.js
     - fnGlobalObject.js
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/try/12.14-15.js b/test/language/statements/try/12.14-15.js
index 1c556ce2b2..6ce1bf9baf 100644
--- a/test/language/statements/try/12.14-15.js
+++ b/test/language/statements/try/12.14-15.js
@@ -13,6 +13,7 @@ description: >
 includes:
     - runTestCase.js
     - fnGlobalObject.js
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/try/12.14-16.js b/test/language/statements/try/12.14-16.js
index b0da76e863..326e1f9b21 100644
--- a/test/language/statements/try/12.14-16.js
+++ b/test/language/statements/try/12.14-16.js
@@ -13,6 +13,7 @@ description: >
 includes:
     - runTestCase.js
     - fnGlobalObject.js
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/variable/12.2.1-11.js b/test/language/statements/variable/12.2.1-11.js
index fce16af7b8..9cd6dc61de 100644
--- a/test/language/statements/variable/12.2.1-11.js
+++ b/test/language/statements/variable/12.2.1-11.js
@@ -8,6 +8,7 @@
 es5id: 12.2.1-11
 description: arguments as var identifier in eval code is allowed
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/variable/12.2.1-12.js b/test/language/statements/variable/12.2.1-12.js
index e9d81b7d3b..d89e436d73 100644
--- a/test/language/statements/variable/12.2.1-12.js
+++ b/test/language/statements/variable/12.2.1-12.js
@@ -8,6 +8,7 @@
 es5id: 12.2.1-12
 description: arguments as local var identifier is allowed
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/variable/S12.2_A2.js b/test/language/statements/variable/S12.2_A2.js
index 3b02e0318e..fcc3df72fe 100644
--- a/test/language/statements/variable/S12.2_A2.js
+++ b/test/language/statements/variable/S12.2_A2.js
@@ -10,6 +10,7 @@ es5id: 12.2_A2
 description: >
     Checking if deleting global variables that have the attributes
     {DontDelete} fails
+flags: [noStrict]
 ---*/
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/variable/S12.2_A5.js b/test/language/statements/variable/S12.2_A5.js
index f79de28b9b..877b9c7287 100644
--- a/test/language/statements/variable/S12.2_A5.js
+++ b/test/language/statements/variable/S12.2_A5.js
@@ -8,6 +8,7 @@ info: >
 es5id: 12.2_A5
 description: Executing eval("var x")
 includes: [$PRINT.js]
+flags: [noStrict]
 ---*/
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/test/language/statements/variable/S12.2_A9.js b/test/language/statements/variable/S12.2_A9.js
index 3b982ad1bf..7db9c3997d 100644
--- a/test/language/statements/variable/S12.2_A9.js
+++ b/test/language/statements/variable/S12.2_A9.js
@@ -9,6 +9,8 @@ description: >
     the declared variable
 ---*/
 
+var enumed;
+
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
 for (var __prop in this){
diff --git a/test/language/statements/with/12.10-0-1.js b/test/language/statements/with/12.10-0-1.js
index 93dd3acca7..dc6980749b 100644
--- a/test/language/statements/with/12.10-0-1.js
+++ b/test/language/statements/with/12.10-0-1.js
@@ -10,6 +10,7 @@ description: >
     with does not change declaration scope - vars in with are visible
     outside
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-10.js b/test/language/statements/with/12.10-0-10.js
index 3600da00b0..d08cbf76ed 100644
--- a/test/language/statements/with/12.10-0-10.js
+++ b/test/language/statements/with/12.10-0-10.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-10
 description: with introduces scope - name lookup finds function parameter
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-11.js b/test/language/statements/with/12.10-0-11.js
index cc4c97bb23..04e35866e0 100644
--- a/test/language/statements/with/12.10-0-11.js
+++ b/test/language/statements/with/12.10-0-11.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-11
 description: with introduces scope - name lookup finds inner variable
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-12.js b/test/language/statements/with/12.10-0-12.js
index bdf59c5d0f..875fd073ec 100644
--- a/test/language/statements/with/12.10-0-12.js
+++ b/test/language/statements/with/12.10-0-12.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-12
 description: with introduces scope - name lookup finds property
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-3.js b/test/language/statements/with/12.10-0-3.js
index 2795e32fc6..eed45d343d 100644
--- a/test/language/statements/with/12.10-0-3.js
+++ b/test/language/statements/with/12.10-0-3.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-3
 description: with introduces scope - that is captured by function expression
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-7.js b/test/language/statements/with/12.10-0-7.js
index b87ae05b92..9b9ec3356a 100644
--- a/test/language/statements/with/12.10-0-7.js
+++ b/test/language/statements/with/12.10-0-7.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-7
 description: with introduces scope - scope removed when exiting with statement
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-8.js b/test/language/statements/with/12.10-0-8.js
index f1898b810a..d87ed1c479 100644
--- a/test/language/statements/with/12.10-0-8.js
+++ b/test/language/statements/with/12.10-0-8.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-8
 description: with introduces scope - var initializer sets like named property
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-0-9.js b/test/language/statements/with/12.10-0-9.js
index 572df0e663..03cce99b44 100644
--- a/test/language/statements/with/12.10-0-9.js
+++ b/test/language/statements/with/12.10-0-9.js
@@ -8,6 +8,7 @@
 es5id: 12.10-0-9
 description: with introduces scope - name lookup finds outer variable
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-2-1.js b/test/language/statements/with/12.10-2-1.js
index 6860de42a5..5f5f440954 100644
--- a/test/language/statements/with/12.10-2-1.js
+++ b/test/language/statements/with/12.10-2-1.js
@@ -8,6 +8,7 @@
 es5id: 12.10-2-1
 description: with - expression being Number
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-2-2.js b/test/language/statements/with/12.10-2-2.js
index c60065f22a..c932264959 100644
--- a/test/language/statements/with/12.10-2-2.js
+++ b/test/language/statements/with/12.10-2-2.js
@@ -8,6 +8,7 @@
 es5id: 12.10-2-2
 description: with - expression being Boolean
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-2-3.js b/test/language/statements/with/12.10-2-3.js
index ffe633f9d0..a4b97544b3 100644
--- a/test/language/statements/with/12.10-2-3.js
+++ b/test/language/statements/with/12.10-2-3.js
@@ -8,6 +8,7 @@
 es5id: 12.10-2-3
 description: with - expression being string
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
diff --git a/test/language/statements/with/12.10-7-1.js b/test/language/statements/with/12.10-7-1.js
index dbde66efad..25ec0136b3 100644
--- a/test/language/statements/with/12.10-7-1.js
+++ b/test/language/statements/with/12.10-7-1.js
@@ -8,6 +8,7 @@
 es5id: 12.10-7-1
 description: with introduces scope - restores the earlier environment on exit
 includes: [runTestCase.js]
+flags: [noStrict]
 ---*/
 
 function testcase() {
-- 
GitLab