JavaScriptCore:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jan 2006 17:28:05 +0000 (17:28 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jan 2006 17:28:05 +0000 (17:28 +0000)
        Reviewed by Maciej and Darin, landed by Darin.

        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=5939
          final comma in javascript object prevents parsing

        * kjs/grammar.y: Added rule to allow trailing comma in
        object construction.

LayoutTests:

        Reviewed by Maciej, reworked and landed by Darin.

        - test for http://bugzilla.opendarwin.org/show_bug.cgi?id=5939
          final comma in javascript object prevents parsing

        * fast/js/resources/object-extra-comma.js: Added.
        * fast/js/object-extra-comma.html: Added.
        * fast/js/object-extra-comma-expected.txt: Added.

        * fast/js/resources/js-test-pre.js: Fixed a typo.

        * fast/js/*: Set some MIME types.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/grammar.y
LayoutTests/ChangeLog
LayoutTests/fast/js/object-extra-comma-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/object-extra-comma.html [new file with mode: 0644]
LayoutTests/fast/js/resources/js-test-pre.js
LayoutTests/fast/js/resources/object-extra-comma.js [new file with mode: 0644]

index 72b0143..c3063b5 100644 (file)
@@ -1,5 +1,15 @@
 2006-01-11  Ricci Adams  <ricciadams@apple.com>
 
+        Reviewed by Maciej and Darin, landed by Darin.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=5939
+          final comma in javascript object prevents parsing
+
+        * kjs/grammar.y: Added rule to allow trailing comma in
+        object construction.
+
+2006-01-11  Ricci Adams  <ricciadams@apple.com>
+
         Reviewed by Geoff, landed by Darin.
 
         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=5308
index 0140195..ae9a1ac 100644 (file)
@@ -226,6 +226,8 @@ PrimaryExpr:
     PrimaryExprNoBrace
   | '{' '}'                             { $$ = new ObjectLiteralNode(); }
   | '{' PropertyList '}'                { $$ = new ObjectLiteralNode($2); }
+  /* allow extra comma, see http://bugzilla.opendarwin.org/show_bug.cgi?id=5939 */
+  | '{' PropertyList ',' '}'            { $$ = new ObjectLiteralNode($2); }
 ;
 
 PrimaryExprNoBrace:
@@ -985,10 +987,10 @@ static bool makeGetterOrSetterPropertyNode(PropertyNode*& result, Identifier& ge
     return true;
 }
 
-int yyerror(const char * /* s */)  /* Called by yyparse on error */
+/* called by yyparse on error */
+int yyerror(const char *)
 {
-  // fprintf(stderr, "ERROR: %s at line %d\n", s, KJS::Lexer::curr()->lineNo());
-  return 1;
+    return 1;
 }
 
 /* may we automatically insert a semicolon ? */
index d261efc..a3e7974 100644 (file)
@@ -1,5 +1,20 @@
 2006-01-11  Ricci Adams  <ricciadams@apple.com>
 
+        Reviewed by Maciej, reworked and landed by Darin.
+
+        - test for http://bugzilla.opendarwin.org/show_bug.cgi?id=5939
+          final comma in javascript object prevents parsing
+
+        * fast/js/resources/object-extra-comma.js: Added.
+        * fast/js/object-extra-comma.html: Added.
+        * fast/js/object-extra-comma-expected.txt: Added.
+
+        * fast/js/resources/js-test-pre.js: Fixed a typo.
+
+        * fast/js/*: Set some MIME types.
+
+2006-01-11  Ricci Adams  <ricciadams@apple.com>
+
         Reviewed by Geoff, reworked and landed by Darin.
 
         - test for http://bugzilla.opendarwin.org/show_bug.cgi?id=5308
diff --git a/LayoutTests/fast/js/object-extra-comma-expected.txt b/LayoutTests/fast/js/object-extra-comma-expected.txt
new file mode 100644 (file)
index 0000000..0dcae57
--- /dev/null
@@ -0,0 +1,14 @@
+This test checks some object construction cases, including 5939: final comma in javascript object prevents parsing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var foo = { 'bar' : 'YES' }; foo.bar is 'YES'
+PASS var foo = { 'bar' : 'YES', }; foo.bar is 'YES'
+PASS var foo = { 'bar' : 'YES' , }; foo.bar is 'YES'
+PASS var foo = { , 'bar' : 'YES' }; foo.bar threw exception SyntaxError: Parse error.
+PASS var foo = { 'bar' : 'YES',, }; foo.bar threw exception SyntaxError: Parse error.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/object-extra-comma.html b/LayoutTests/fast/js/object-extra-comma.html
new file mode 100644 (file)
index 0000000..009078f
--- /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="resources/object-extra-comma.js"></script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>
index 059d6db..034d4c6 100644 (file)
@@ -104,7 +104,7 @@ function shouldThrow(_a, _e)
     if (typeof _e == "undefined" || exception == _ev)
       testPassed(_a + " threw exception " + exception + ".");
     else
-      testFailed(_a + " should throw exception " + _e + ". Thre exception " + exception + ".");
+      testFailed(_a + " should throw exception " + _e + ". Threw exception " + exception + ".");
   } else if (typeof _av == "undefined")
     testFailed(_a + " should throw exception " + _e + ". Was undefined.");
   else
diff --git a/LayoutTests/fast/js/resources/object-extra-comma.js b/LayoutTests/fast/js/resources/object-extra-comma.js
new file mode 100644 (file)
index 0000000..09ec658
--- /dev/null
@@ -0,0 +1,12 @@
+description(
+    'This test checks some object construction cases, including ' +
+    '<a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=5939">5939: final comma in javascript object prevents parsing</a>' +
+    '.');
+
+shouldBe("var foo = { 'bar' : 'YES' }; foo.bar", "'YES'");
+shouldBe("var foo = { 'bar' : 'YES', }; foo.bar", "'YES'");
+shouldBe("var foo = { 'bar' : 'YES' , }; foo.bar", "'YES'");
+shouldThrow("var foo = { , 'bar' : 'YES' }; foo.bar");
+shouldThrow("var foo = { 'bar' : 'YES',, }; foo.bar");
+
+var successfullyParsed = true;