2011-07-06 Juan C. Montemayor <jmont@apple.com>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jul 2011 04:20:06 +0000 (04:20 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jul 2011 04:20:06 +0000 (04:20 +0000)
        ASSERT_NOT_REACHED running test 262
        https://bugs.webkit.org/show_bug.cgi?id=63951

        Added a test to check compliance with reserved words in strict mode.
        Updated test results.

        Reviewed by Gavin Barraclough.

        * fast/js/kde/parse-expected.txt:
        * fast/js/reserved-words-as-property-expected.txt:
        * fast/js/reserved-words-strict-expected.txt: Added.
        * fast/js/reserved-words-strict.html: Added.
        * fast/js/script-tests/reserved-words-strict.js: Added.
        (isReserved):
        * platform/chromium/fast/js/reserved-words-strict-expected.txt: Added.
        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T1-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T2-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T3-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T4-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T5-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T1-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T2-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T3-expected.txt:
        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T4-expected.txt:
        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt:
2011-07-06  Juan C. Montemayor  <jmont@apple.com>

        ASSERT_NOT_REACHED running test 262
        https://bugs.webkit.org/show_bug.cgi?id=63951

        Added a case to the switch statement where the code was failing. Fixed
        some logic as well that gave faulty error messages.

        Reviewed by Gavin Barraclough.

        * parser/JSParser.cpp:
        (JSC::JSParser::getTokenName):
        (JSC::JSParser::updateErrorMessageSpecialCase):
        (JSC::JSParser::updateErrorMessage):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@90535 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/js/kde/parse-expected.txt
LayoutTests/fast/js/reserved-words-as-property-expected.txt
LayoutTests/fast/js/reserved-words-strict-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/reserved-words-strict.html [new file with mode: 0644]
LayoutTests/fast/js/script-tests/reserved-words-strict.js [new file with mode: 0644]
LayoutTests/platform/chromium/fast/js/reserved-words-strict-expected.txt [new file with mode: 0644]
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T1-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T2-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T3-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T4-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T5-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T1-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T2-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T3-expected.txt
LayoutTests/sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T4-expected.txt
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/JSParser.cpp

index 1628320..fea7de4 100644 (file)
@@ -1,3 +1,31 @@
+2011-07-06  Juan C. Montemayor  <jmont@apple.com>
+
+        ASSERT_NOT_REACHED running test 262
+        https://bugs.webkit.org/show_bug.cgi?id=63951
+        
+        Added a test to check compliance with reserved words in strict mode. 
+        Updated test results.
+
+        Reviewed by Gavin Barraclough.
+
+        * fast/js/kde/parse-expected.txt:
+        * fast/js/reserved-words-as-property-expected.txt:
+        * fast/js/reserved-words-strict-expected.txt: Added.
+        * fast/js/reserved-words-strict.html: Added.
+        * fast/js/script-tests/reserved-words-strict.js: Added.
+        (isReserved):
+        * platform/chromium/fast/js/reserved-words-strict-expected.txt: Added.
+        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T1-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T2-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T3-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T4-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A5_T5-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T1-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T2-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T3-expected.txt:
+        * sputnik/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A6_T4-expected.txt:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt:
+
 2011-07-06  Johnny Ding  <jnd@chromium.org>
 
         https://bugs.webkit.org/show_bug.cgi?id=63857
index 15e9c39..1dc18ac 100644 (file)
@@ -20,9 +20,9 @@ PASS var f÷; threw exception SyntaxError: Invalid character '\u0247'.
 PASS var \u0061 = 102; a is 102
 PASS var f\u0030 = 103; f0 is 103
 PASS var \u00E9\u0100\u02AF\u0388\u18A8 = 104; \u00E9\u0100\u02AF\u0388\u18A8; is 104
-PASS var f\u00F7; threw exception SyntaxError: Expected an identifier but found 'f\u00F7' instead.
-PASS var \u0030; threw exception SyntaxError: Expected an identifier but found '\u0030' instead.
-PASS var test = { }; test.i= 0; test.i\u002b= 1; test.i; threw exception SyntaxError: Expected an identifier but found 'i\u002b' instead.
+PASS var f\u00F7; threw exception SyntaxError: Unrecognized token 'f\u00F7'.
+PASS var \u0030; threw exception SyntaxError: Unrecognized token '\u0030'.
+PASS var test = { }; test.i= 0; test.i\u002b= 1; test.i; threw exception SyntaxError: Unrecognized token 'i\u002b'.
 PASS var test = { }; test.i= 0; test.i+= 1; test.i; is 1
 PASS successfullyParsed is true
 
index fa6f4a8..cc7817a 100644 (file)
@@ -155,12 +155,12 @@ PASS try{}catch(new){} threw exception SyntaxError: Expected an identifier but f
 PASS (function(){try{}catch(new){}}) threw exception SyntaxError: Expected an identifier but found 'new' instead.
 PASS function new(){} threw exception SyntaxError: Unexpected token 'new'.
 PASS (function(){function new(){}}) threw exception SyntaxError: Unexpected token 'new'.
-PASS var return threw exception SyntaxError: Expected an identifier but found 'return' instead.
-PASS (function(){var return}) threw exception SyntaxError: Expected an identifier but found 'return' instead.
-PASS function g(return){} threw exception SyntaxError: Expected an identifier but found 'return' instead.
-PASS (function(){function g(return){}}) threw exception SyntaxError: Expected an identifier but found 'return' instead.
-PASS try{}catch(return){} threw exception SyntaxError: Expected an identifier but found 'return' instead.
-PASS (function(){try{}catch(return){}}) threw exception SyntaxError: Expected an identifier but found 'return' instead.
+PASS var return threw exception SyntaxError: Return statements are only valid inside functions.
+PASS (function(){var return}) threw exception SyntaxError: Return statements are only valid inside functions.
+PASS function g(return){} threw exception SyntaxError: Return statements are only valid inside functions.
+PASS (function(){function g(return){}}) threw exception SyntaxError: Return statements are only valid inside functions.
+PASS try{}catch(return){} threw exception SyntaxError: Return statements are only valid inside functions.
+PASS (function(){try{}catch(return){}}) threw exception SyntaxError: Return statements are only valid inside functions.
 PASS function return(){} threw exception SyntaxError: Return statements are only valid inside functions.
 PASS (function(){function return(){}}) threw exception SyntaxError: Return statements are only valid inside functions.
 PASS var switch threw exception SyntaxError: Expected an identifier but found 'switch' instead.
@@ -235,12 +235,12 @@ PASS try{}catch(with){} threw exception SyntaxError: Expected an identifier but
 PASS (function(){try{}catch(with){}}) threw exception SyntaxError: Expected an identifier but found 'with' instead.
 PASS function with(){} threw exception SyntaxError: Unexpected token 'with'.
 PASS (function(){function with(){}}) threw exception SyntaxError: Unexpected token 'with'.
-PASS var class threw exception SyntaxError: Expected an identifier but found 'class' instead.
-PASS (function(){var class}) threw exception SyntaxError: Expected an identifier but found 'class' instead.
-PASS function g(class){} threw exception SyntaxError: Expected an identifier but found 'class' instead.
-PASS (function(){function g(class){}}) threw exception SyntaxError: Expected an identifier but found 'class' instead.
-PASS try{}catch(class){} threw exception SyntaxError: Expected an identifier but found 'class' instead.
-PASS (function(){try{}catch(class){}}) threw exception SyntaxError: Expected an identifier but found 'class' instead.
+PASS var class threw exception SyntaxError: Use of reserved word 'class'.
+PASS (function(){var class}) threw exception SyntaxError: Use of reserved word 'class'.
+PASS function g(class){} threw exception SyntaxError: Use of reserved word 'class'.
+PASS (function(){function g(class){}}) threw exception SyntaxError: Use of reserved word 'class'.
+PASS try{}catch(class){} threw exception SyntaxError: Use of reserved word 'class'.
+PASS (function(){try{}catch(class){}}) threw exception SyntaxError: Use of reserved word 'class'.
 PASS function class(){} threw exception SyntaxError: Use of reserved word 'class'.
 PASS (function(){function class(){}}) threw exception SyntaxError: Use of reserved word 'class'.
 PASS var const threw exception SyntaxError: Expected an identifier but found 'const' instead.
@@ -251,44 +251,44 @@ PASS try{}catch(const){} threw exception SyntaxError: Expected an identifier but
 PASS (function(){try{}catch(const){}}) threw exception SyntaxError: Expected an identifier but found 'const' instead.
 PASS function const(){} threw exception SyntaxError: Unexpected token 'const'.
 PASS (function(){function const(){}}) threw exception SyntaxError: Unexpected token 'const'.
-PASS var enum threw exception SyntaxError: Expected an identifier but found 'enum' instead.
-PASS (function(){var enum}) threw exception SyntaxError: Expected an identifier but found 'enum' instead.
-PASS function g(enum){} threw exception SyntaxError: Expected an identifier but found 'enum' instead.
-PASS (function(){function g(enum){}}) threw exception SyntaxError: Expected an identifier but found 'enum' instead.
-PASS try{}catch(enum){} threw exception SyntaxError: Expected an identifier but found 'enum' instead.
-PASS (function(){try{}catch(enum){}}) threw exception SyntaxError: Expected an identifier but found 'enum' instead.
+PASS var enum threw exception SyntaxError: Use of reserved word 'enum'.
+PASS (function(){var enum}) threw exception SyntaxError: Use of reserved word 'enum'.
+PASS function g(enum){} threw exception SyntaxError: Use of reserved word 'enum'.
+PASS (function(){function g(enum){}}) threw exception SyntaxError: Use of reserved word 'enum'.
+PASS try{}catch(enum){} threw exception SyntaxError: Use of reserved word 'enum'.
+PASS (function(){try{}catch(enum){}}) threw exception SyntaxError: Use of reserved word 'enum'.
 PASS function enum(){} threw exception SyntaxError: Use of reserved word 'enum'.
 PASS (function(){function enum(){}}) threw exception SyntaxError: Use of reserved word 'enum'.
-PASS var export threw exception SyntaxError: Expected an identifier but found 'export' instead.
-PASS (function(){var export}) threw exception SyntaxError: Expected an identifier but found 'export' instead.
-PASS function g(export){} threw exception SyntaxError: Expected an identifier but found 'export' instead.
-PASS (function(){function g(export){}}) threw exception SyntaxError: Expected an identifier but found 'export' instead.
-PASS try{}catch(export){} threw exception SyntaxError: Expected an identifier but found 'export' instead.
-PASS (function(){try{}catch(export){}}) threw exception SyntaxError: Expected an identifier but found 'export' instead.
+PASS var export threw exception SyntaxError: Use of reserved word 'export'.
+PASS (function(){var export}) threw exception SyntaxError: Use of reserved word 'export'.
+PASS function g(export){} threw exception SyntaxError: Use of reserved word 'export'.
+PASS (function(){function g(export){}}) threw exception SyntaxError: Use of reserved word 'export'.
+PASS try{}catch(export){} threw exception SyntaxError: Use of reserved word 'export'.
+PASS (function(){try{}catch(export){}}) threw exception SyntaxError: Use of reserved word 'export'.
 PASS function export(){} threw exception SyntaxError: Use of reserved word 'export'.
 PASS (function(){function export(){}}) threw exception SyntaxError: Use of reserved word 'export'.
-PASS var extends threw exception SyntaxError: Expected an identifier but found 'extends' instead.
-PASS (function(){var extends}) threw exception SyntaxError: Expected an identifier but found 'extends' instead.
-PASS function g(extends){} threw exception SyntaxError: Expected an identifier but found 'extends' instead.
-PASS (function(){function g(extends){}}) threw exception SyntaxError: Expected an identifier but found 'extends' instead.
-PASS try{}catch(extends){} threw exception SyntaxError: Expected an identifier but found 'extends' instead.
-PASS (function(){try{}catch(extends){}}) threw exception SyntaxError: Expected an identifier but found 'extends' instead.
+PASS var extends threw exception SyntaxError: Use of reserved word 'extends'.
+PASS (function(){var extends}) threw exception SyntaxError: Use of reserved word 'extends'.
+PASS function g(extends){} threw exception SyntaxError: Use of reserved word 'extends'.
+PASS (function(){function g(extends){}}) threw exception SyntaxError: Use of reserved word 'extends'.
+PASS try{}catch(extends){} threw exception SyntaxError: Use of reserved word 'extends'.
+PASS (function(){try{}catch(extends){}}) threw exception SyntaxError: Use of reserved word 'extends'.
 PASS function extends(){} threw exception SyntaxError: Use of reserved word 'extends'.
 PASS (function(){function extends(){}}) threw exception SyntaxError: Use of reserved word 'extends'.
-PASS var import threw exception SyntaxError: Expected an identifier but found 'import' instead.
-PASS (function(){var import}) threw exception SyntaxError: Expected an identifier but found 'import' instead.
-PASS function g(import){} threw exception SyntaxError: Expected an identifier but found 'import' instead.
-PASS (function(){function g(import){}}) threw exception SyntaxError: Expected an identifier but found 'import' instead.
-PASS try{}catch(import){} threw exception SyntaxError: Expected an identifier but found 'import' instead.
-PASS (function(){try{}catch(import){}}) threw exception SyntaxError: Expected an identifier but found 'import' instead.
+PASS var import threw exception SyntaxError: Use of reserved word 'import'.
+PASS (function(){var import}) threw exception SyntaxError: Use of reserved word 'import'.
+PASS function g(import){} threw exception SyntaxError: Use of reserved word 'import'.
+PASS (function(){function g(import){}}) threw exception SyntaxError: Use of reserved word 'import'.
+PASS try{}catch(import){} threw exception SyntaxError: Use of reserved word 'import'.
+PASS (function(){try{}catch(import){}}) threw exception SyntaxError: Use of reserved word 'import'.
 PASS function import(){} threw exception SyntaxError: Use of reserved word 'import'.
 PASS (function(){function import(){}}) threw exception SyntaxError: Use of reserved word 'import'.
-PASS var super threw exception SyntaxError: Expected an identifier but found 'super' instead.
-PASS (function(){var super}) threw exception SyntaxError: Expected an identifier but found 'super' instead.
-PASS function g(super){} threw exception SyntaxError: Expected an identifier but found 'super' instead.
-PASS (function(){function g(super){}}) threw exception SyntaxError: Expected an identifier but found 'super' instead.
-PASS try{}catch(super){} threw exception SyntaxError: Expected an identifier but found 'super' instead.
-PASS (function(){try{}catch(super){}}) threw exception SyntaxError: Expected an identifier but found 'super' instead.
+PASS var super threw exception SyntaxError: Use of reserved word 'super'.
+PASS (function(){var super}) threw exception SyntaxError: Use of reserved word 'super'.
+PASS function g(super){} threw exception SyntaxError: Use of reserved word 'super'.
+PASS (function(){function g(super){}}) threw exception SyntaxError: Use of reserved word 'super'.
+PASS try{}catch(super){} threw exception SyntaxError: Use of reserved word 'super'.
+PASS (function(){try{}catch(super){}}) threw exception SyntaxError: Use of reserved word 'super'.
 PASS function super(){} threw exception SyntaxError: Use of reserved word 'super'.
 PASS (function(){function super(){}}) threw exception SyntaxError: Use of reserved word 'super'.
 PASS (obj=({true: true,false: true,null: true,break: true,case: true,catch: true,continue: true,debugger: true,default: true,delete: true,do: true,else: true,finally: true,for: true,function: true,if: true,in: true,instanceof: true,new: true,return: true,switch: true,this: true,throw: true,try: true,typeof: true,var: true,void: true,while: true,with: true,class: true,const: true,enum: true,export: true,extends: true,import: true,super: true, parsed: true })).parsed is true
diff --git a/LayoutTests/fast/js/reserved-words-strict-expected.txt b/LayoutTests/fast/js/reserved-words-strict-expected.txt
new file mode 100644 (file)
index 0000000..40db19a
--- /dev/null
@@ -0,0 +1,38 @@
+This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+SHOULD BE RESERVED:
+PASS isReserved('implements') is true
+PASS isReserved('interface') is true
+PASS isReserved('let') is true
+PASS isReserved('package') is true
+PASS isReserved('private') is true
+PASS isReserved('protected') is true
+PASS isReserved('public') is true
+PASS isReserved('static') is true
+PASS isReserved('yield') is true
+
+SHOULD NOT BE RESERVED:
+PASS isReserved('abstract') is false
+PASS isReserved('boolean') is false
+PASS isReserved('byte') is false
+PASS isReserved('char') is false
+PASS isReserved('double') is false
+PASS isReserved('final') is false
+PASS isReserved('float') is false
+PASS isReserved('goto') is false
+PASS isReserved('int') is false
+PASS isReserved('long') is false
+PASS isReserved('native') is false
+PASS isReserved('short') is false
+PASS isReserved('synchronized') is false
+PASS isReserved('throws') is false
+PASS isReserved('transient') is false
+PASS isReserved('volatile') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/reserved-words-strict.html b/LayoutTests/fast/js/reserved-words-strict.html
new file mode 100644 (file)
index 0000000..2fb362d
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="resources/js-test-style.css">
+<script src="resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/reserved-words-strict.js"></script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/script-tests/reserved-words-strict.js b/LayoutTests/fast/js/script-tests/reserved-words-strict.js
new file mode 100644 (file)
index 0000000..53d8faf
--- /dev/null
@@ -0,0 +1,67 @@
+function isReserved(word)
+{
+    try {
+        eval("\"use strict\";var " + word + ";");
+        return false;
+    } catch (e) {
+       var expectedError = "Use of reserved word '" + word + "' in strict mode";
+       if (expectedError == e.message)
+               return true;
+        else
+               return false;
+    }
+}
+
+var reservedWords = [
+    "implements",
+    "let",
+    "private",
+    "public",
+    "yield",
+    "interface",
+    "package",
+    "protected",
+    "static"
+];
+
+var unreservedWords = [
+    "abstract",
+    "boolean",
+    "byte",
+    "char",
+    "double",
+    "final",
+    "float",
+    "goto",
+    "int",
+    "long",
+    "native",
+    "short",
+    "synchronized",
+    "throws",
+    "transient",
+    "volatile"
+];
+
+description(
+"This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode."
+);
+
+reservedWords.sort();
+unreservedWords.sort();
+
+debug("SHOULD BE RESERVED:");
+for (var p in reservedWords) {
+    shouldBeTrue("isReserved('" + reservedWords[p] + "')");
+}
+
+debug("");
+
+debug("SHOULD NOT BE RESERVED:");
+for (var p in unreservedWords) {
+    shouldBeFalse("isReserved('" + unreservedWords[p] + "')");
+}
+
+debug("");
+
+var successfullyParsed = true;
diff --git a/LayoutTests/platform/chromium/fast/js/reserved-words-strict-expected.txt b/LayoutTests/platform/chromium/fast/js/reserved-words-strict-expected.txt
new file mode 100644 (file)
index 0000000..36be849
--- /dev/null
@@ -0,0 +1,38 @@
+This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+SHOULD BE RESERVED:
+FAIL isReserved('implements') should be true. Was false.
+FAIL isReserved('interface') should be true. Was false.
+FAIL isReserved('let') should be true. Was false.
+FAIL isReserved('package') should be true. Was false.
+FAIL isReserved('private') should be true. Was false.
+FAIL isReserved('protected') should be true. Was false.
+FAIL isReserved('public') should be true. Was false.
+FAIL isReserved('static') should be true. Was false.
+FAIL isReserved('yield') should be true. Was false.
+
+SHOULD NOT BE RESERVED:
+PASS isReserved('abstract') is false
+PASS isReserved('boolean') is false
+PASS isReserved('byte') is false
+PASS isReserved('char') is false
+PASS isReserved('double') is false
+PASS isReserved('final') is false
+PASS isReserved('float') is false
+PASS isReserved('goto') is false
+PASS isReserved('int') is false
+PASS isReserved('long') is false
+PASS isReserved('native') is false
+PASS isReserved('short') is false
+PASS isReserved('synchronized') is false
+PASS isReserved('throws') is false
+PASS isReserved('transient') is false
+PASS isReserved('volatile') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
index 3c4c934..1e44031 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u0009' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u0009'
 S7.2_A5_T1
 
 PASS Expected parsing failure
index 97383d5..f63469a 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u000B' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u000B'
 S7.2_A5_T2
 
 PASS Expected parsing failure
index e7350cc..c75699e 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u000C' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u000C'
 S7.2_A5_T3
 
 PASS Expected parsing failure
index 24a3588..0419f72 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u0020' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u0020'
 S7.2_A5_T4
 
 PASS Expected parsing failure
index 1778f3c..5588f92 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u00A0' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u00A0'
 S7.2_A5_T5
 
 PASS Expected parsing failure
index 63c0aa5..f044558 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u000A' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u000A'
 S7.3_A6_T1
 
 PASS Expected parsing failure
index 9f94bbf..ee636dc 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u000D' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u000D'
 S7.3_A6_T2
 
 PASS Expected parsing failure
index cdcae7b..4aff5dd 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u2028' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u2028'
 S7.3_A6_T3
 
 PASS Expected parsing failure
index fb67c00..62a01e4 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 76: SyntaxError: Expected an identifier but found '\u2029' instead
+CONSOLE MESSAGE: line 76: SyntaxError: Unrecognized token '\u2029'
 S7.3_A6_T4
 
 PASS Expected parsing failure
index af98dee..4ce00ed 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 80: SyntaxError: Expected an identifier but found '"22"' instead
+CONSOLE MESSAGE: line 80: SyntaxError: Unexpected string "22"
 S12.14_A16_T13
 
 PASS Expected parsing failure
index cd3c96d..bbc589b 100644 (file)
@@ -1,3 +1,18 @@
+2011-07-06  Juan C. Montemayor  <jmont@apple.com>
+
+        ASSERT_NOT_REACHED running test 262
+        https://bugs.webkit.org/show_bug.cgi?id=63951
+        
+        Added a case to the switch statement where the code was failing. Fixed
+        some logic as well that gave faulty error messages.
+
+        Reviewed by Gavin Barraclough.
+
+        * parser/JSParser.cpp:
+        (JSC::JSParser::getTokenName):
+        (JSC::JSParser::updateErrorMessageSpecialCase):
+        (JSC::JSParser::updateErrorMessage):
+
 2011-07-06  Filip Pizlo  <fpizlo@apple.com>
 
         DFG JIT implementation of op_call results in regressions on sunspider
index f97049d..20f22a5 100644 (file)
@@ -191,8 +191,6 @@ private:
             return "continue";
         case FUNCTION: 
             return "function";
-        case RETURN: 
-            return 0;
         case IF: 
             return "if";
         case THISTOKEN: 
@@ -205,9 +203,6 @@ private:
             return "switch";
         case WITH: 
             return "with";
-        case RESERVED_IF_STRICT:
-        case RESERVED: 
-            return 0;
         case THROW: 
             return "throw";
         case TRY: 
@@ -236,22 +231,12 @@ private:
             return ",";
         case QUESTION: 
             return "?";
-        case NUMBER: 
-            return 0;
-        case IDENT: 
-            return 0;
-        case STRING: 
-            return 0;
         case SEMICOLON: 
             return ";";
         case COLON: 
             return ":";
         case DOT: 
             return ".";
-        case ERRORTOK: 
-            return 0;
-        case EOFTOK: 
-            return 0;
         case EQUAL: 
             return "=";
         case PLUSEQUAL: 
@@ -338,6 +323,15 @@ private:
             return "/";
         case MOD: 
             return "%";
+        case RETURN: 
+        case RESERVED_IF_STRICT:
+        case RESERVED: 
+        case NUMBER:
+        case IDENT: 
+        case STRING: 
+        case ERRORTOK:
+        case EOFTOK: 
+            return 0;
         case LastUntaggedToken: 
             break;
         }
@@ -349,6 +343,12 @@ private:
     {
         String errorMessage;
         switch (expectedToken) {
+        case RESERVED_IF_STRICT:
+            errorMessage = "Use of reserved word '";
+            errorMessage += getToken().impl();
+            errorMessage += "' in strict mode";
+            m_errorMessage = errorMessage.impl();
+            return;
         case RESERVED:
             errorMessage = "Use of reserved word '";
             errorMessage += getToken().impl();
@@ -405,10 +405,14 @@ private:
     {
         m_error = true;
         const char* name = getTokenName(expectedToken);
-        if (!name) 
-            updateErrorMessageSpecialCase(expectedToken);
-        else
+        if (name)
             m_errorMessage = UString(String::format("Expected token '%s'", name).impl());
+        else {
+            if (!getTokenName(m_token.m_type))
+                updateErrorMessageSpecialCase(m_token.m_type);
+            else
+                updateErrorMessageSpecialCase(expectedToken);
+        } 
     }
     
     NEVER_INLINE void updateErrorWithNameAndMessage(const char* beforeMsg, UString name, const char* afterMsg)