[Webkit-unassigned] [Bug 17214] Regression: Extraneous parentheses in function.toString()

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Feb 7 22:57:21 PST 2008


http://bugs.webkit.org/show_bug.cgi?id=17214


rgovostes at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rgovostes at gmail.com
                URL|http://rgov.org/            |http://rgov.org/safaritest.h
                   |                            |tml




------- Comment #1 from rgovostes at gmail.com  2008-02-07 22:57 PDT -------
I added some debug info to my nodes2string.h to help trace this:

function foo()
[ScopeNode]
        {
        [VarStatementNode]
                var
                [CommaNode]
                        (
                        [CommaNode]
                                [AssignResolveNode]
                                x = 
                                        [StringNode]
                                                "a"
                                        [/StringNode]
                                [/AssignResolveNode]
                                , 
                                [AssignResolveNode]
                                        y = 
                                        [StringNode]
                                                "b"
                                        [/StringNode]
                                [/AssignResolveNode]
                        [/CommaNode]
                        ), 
                        [AssignResolveNode]
                                z = 
                                [StringNode]
                                        "c"
                                [/StringNode]
                        [/AssignResolveNode]
                [/CommaNode]
                ;
        [/VarStatementNode]
}[/ScopeNode]

It looks like where the first faulty parenthesis is going to be added, the
needsParens check in SourceStream::operator<<(const Node* n) is true because

1. m_precedence = 17
2. n->precedence() = 18

In other words, it's because the CommaNode's precedence is greater than the
AssignResolveNode.

Someone please double check this for me but I think the function should be
rewritten as:

-----
 SourceStream& SourceStream::operator<<(const Node* n)
    {
        if (!n) {
            m_precedence = PrecExpression;
            return *this;
        }

        bool needParens = (m_precedence < PrecAssignment && n->precedence() >
m_precedence) || (m_atStartOfStatement && n->needsParensIfLeftmost());
        // and so on
-----

(I moved the n == NULL check to the top because I think it could cause a NULL
pointer dereference as it stands in the current build.)

Furthermore, a test case should be added in the parenthesization tests to
ensure this problem does not creep up again.


-- 
Configure bugmail: http://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the webkit-unassigned mailing list