Bug 17929: Incorrect decompilation with |const|, comma
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Mar 2008 06:17:10 +0000 (06:17 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Mar 2008 06:17:10 +0000 (06:17 +0000)
http://bugs.webkit.org/show_bug.cgi?id=17929

Reviewed by Mark Rowe

There were actually two bugs here. First we weren't correctly handling const
nodes with multiple declarations. The second issue was caused by us not
giving the correct precedence to the initialisers.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/nodes2string.cpp
LayoutTests/ChangeLog
LayoutTests/fast/js/function-toString-parentheses-expected.txt
LayoutTests/fast/js/resources/function-toString-parentheses.js

index 6ec2ee5..066577e 100644 (file)
@@ -1,3 +1,17 @@
+2008-03-18  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        Bug 17929: Incorrect decompilation with |const|, comma
+        http://bugs.webkit.org/show_bug.cgi?id=17929
+
+        There were actually two bugs here. First we weren't correctly handling const
+        nodes with multiple declarations. The second issue was caused by us not 
+        giving the correct precedence to the initialisers.
+
+        * kjs/nodes2string.cpp:
+        (KJS::ConstDeclNode::streamTo):
+
 2008-03-18  Darin Adler  <darin@apple.com>
 
         Reviewed by Maciej.
index a38e22d..ffe4033 100644 (file)
@@ -767,11 +767,11 @@ void ConstDeclNode::streamTo(SourceStream& s) const
 {
     s << m_ident;
     if (m_init)
-        s << " = " << m_init;
+        s << " = " << PrecAssignment << m_init;
     for (ConstDeclNode* n = m_next.get(); n; n = n->m_next.get()) {
-        s << ", " << m_ident;
+        s << ", " << n->m_ident;
         if (m_init)
-            s << " = " << m_init;
+            s << " = " << PrecAssignment << n->m_init;
     }
 }
 
index 81ec123..eb40c1e 100644 (file)
@@ -1,3 +1,14 @@
+2008-03-18  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        Bug 17929: Incorrect decompilation with |const|, comma
+        http://bugs.webkit.org/show_bug.cgi?id=17929
+
+        Test cases for converting const nodes to string.
+
+        * fast/js/resources/function-toString-parentheses.js:
+
 2008-03-18  Mark Rowe  <mrowe@apple.com>
 
         Reviewed by Oliver Hunt.
index 7f43986..fe68cce 100644 (file)
@@ -487,6 +487,12 @@ PASS compileAndSerializeLeftmostTest('var a, b') is 'var a, b'
 PASS compileAndSerializeLeftmostTest('var a = 1, b = 2') is 'var a = 1, b = 2'
 PASS compileAndSerializeLeftmostTest('var a, b, c') is 'var a, b, c'
 PASS compileAndSerializeLeftmostTest('var a = 1, b = 2, c = 3') is 'var a = 1, b = 2, c = 3'
+PASS compileAndSerializeLeftmostTest('const a = 1') is 'const a = 1'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2)') is 'const a = (1, 2)'
+PASS compileAndSerializeLeftmostTest('const a = 1, b = 1') is 'const a = 1, b = 1'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2), b = 1') is 'const a = (1, 2), b = 1'
+PASS compileAndSerializeLeftmostTest('const a = 1, b = (1, 2)') is 'const a = 1, b = (1, 2)'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2), b = (1, 2)') is 'const a = (1, 2), b = (1, 2)'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 75d126a..353d624 100644 (file)
@@ -205,4 +205,11 @@ shouldBe("compileAndSerializeLeftmostTest('var a = 1, b = 2')", "'var a = 1, b =
 shouldBe("compileAndSerializeLeftmostTest('var a, b, c')", "'var a, b, c'");
 shouldBe("compileAndSerializeLeftmostTest('var a = 1, b = 2, c = 3')", "'var a = 1, b = 2, c = 3'");
 
+shouldBe("compileAndSerializeLeftmostTest('const a = 1')", "'const a = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2)')", "'const a = (1, 2)'");
+shouldBe("compileAndSerializeLeftmostTest('const a = 1, b = 1')", "'const a = 1, b = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2), b = 1')", "'const a = (1, 2), b = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = 1, b = (1, 2)')", "'const a = 1, b = (1, 2)'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2), b = (1, 2)')", "'const a = (1, 2), b = (1, 2)'");
+
 var successfullyParsed = true;