| Differences between
and this patch
- JavaScriptCore/ChangeLog +20 lines
Lines 1-3 JavaScriptCore/ChangeLog_sec1
1
2009-06-26  Alexandru Chiculita  <achicu@adobe.com>
2
3
        Reviewed by NOBODY (OOPS!).
4
        
5
        https://bugs.webkit.org/show_bug.cgi?id=19229
6
7
        Propagate identifier from AssignDotNode, 
8
        PropertyNode, AssignResolveNode to anonymous function nodes.
9
10
        * parser/NodeConstructors.h:
11
        (JSC::PropertyNode::PropertyNode):
12
        (JSC::AssignResolveNode::AssignResolveNode):
13
        (JSC::AssignDotNode::AssignDotNode):
14
        * parser/Nodes.h:
15
        (JSC::FunctionBodyNode::setContextualName):
16
        (JSC::FunctionBodyNode::contextualName):
17
        * runtime/JSFunction.cpp:
18
        (JSC::JSFunction::calculatedDisplayName):
19
        * runtime/JSFunction.h:
20
1
2009-06-26  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
21
2009-06-26  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
2
22
3
        Reviewed by Eric Seidel.
23
        Reviewed by Eric Seidel.
- JavaScriptCore/parser/NodeConstructors.h +29 lines
Lines 147-152 namespace JSC { JavaScriptCore/parser/NodeConstructors.h_sec1
147
        , m_assign(assign)
147
        , m_assign(assign)
148
        , m_type(type)
148
        , m_type(type)
149
    {
149
    {
150
        if (UNLIKELY(assign->isFuncExprNode())) {
151
            FuncExprNode* funcExprNode = static_cast<FuncExprNode*>(assign);
152
            funcExprNode->body()->setContextualName(name.ustring());
153
        }
150
    }
154
    }
151
155
152
    inline PropertyListNode::PropertyListNode(JSGlobalData* globalData, PropertyNode* node)
156
    inline PropertyListNode::PropertyListNode(JSGlobalData* globalData, PropertyNode* node)
Lines 602-607 namespace JSC { JavaScriptCore/parser/NodeConstructors.h_sec2
602
        , m_right(right)
606
        , m_right(right)
603
        , m_rightHasAssignments(rightHasAssignments)
607
        , m_rightHasAssignments(rightHasAssignments)
604
    {
608
    {
609
        if (UNLIKELY(right->isFuncExprNode())) {
610
            FuncExprNode* funcExprNode = static_cast<FuncExprNode*>(right);
611
            funcExprNode->body()->setContextualName(ident.ustring());
612
        }
605
    }
613
    }
606
614
607
    inline ReadModifyBracketNode::ReadModifyBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset)
615
    inline ReadModifyBracketNode::ReadModifyBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset)
Lines 635-640 namespace JSC { JavaScriptCore/parser/NodeConstructors.h_sec3
635
        , m_right(right)
643
        , m_right(right)
636
        , m_rightHasAssignments(rightHasAssignments)
644
        , m_rightHasAssignments(rightHasAssignments)
637
    {
645
    {
646
        if (UNLIKELY(right->isFuncExprNode())) {
647
            FuncExprNode* funcExprNode = static_cast<FuncExprNode*>(right);
648
649
            UString name(ident.ustring());
650
            const UString dotString(".");
651
652
            ExpressionNode* baseIterator = base;
653
            while (baseIterator && baseIterator->isDotAccessorNode()) {
654
                DotAccessorNode* dotAccessorNode = static_cast<DotAccessorNode*>(baseIterator);
655
                name = dotAccessorNode->identifier().ustring() + dotString + name;
656
657
                baseIterator = dotAccessorNode->base();
658
            }
659
660
            if (baseIterator && baseIterator->isResolveNode()) {
661
                ResolveNode* const resolveNode = static_cast<ResolveNode*>(baseIterator);
662
                name = resolveNode->identifier().ustring() + dotString + name;
663
            }
664
665
            funcExprNode->body()->setContextualName(name);
666
        }
638
    }
667
    }
639
668
640
    inline ReadModifyDotNode::ReadModifyDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset)
669
    inline ReadModifyDotNode::ReadModifyDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset)
- JavaScriptCore/parser/Nodes.h -1 / +5 lines
Lines 1586-1592 namespace JSC { JavaScriptCore/parser/Nodes.h_sec1
1586
            ASSERT(m_code);
1586
            ASSERT(m_code);
1587
            return *m_code;
1587
            return *m_code;
1588
        }
1588
        }
1589
        
1589
1590
        void setContextualName(const UString& name) { m_contextualName = name; }
1591
        UString contextualName() const { return m_contextualName; }
1592
1590
    private:
1593
    private:
1591
        FunctionBodyNode(JSGlobalData*);
1594
        FunctionBodyNode(JSGlobalData*);
1592
        FunctionBodyNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants);
1595
        FunctionBodyNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants);
Lines 1597-1602 namespace JSC { JavaScriptCore/parser/Nodes.h_sec2
1597
#endif
1600
#endif
1598
        Identifier* m_parameters;
1601
        Identifier* m_parameters;
1599
        size_t m_parameterCount;
1602
        size_t m_parameterCount;
1603
        UString m_contextualName;
1600
        OwnPtr<CodeBlock> m_code;
1604
        OwnPtr<CodeBlock> m_code;
1601
    };
1605
    };
1602
1606
- JavaScriptCore/runtime/JSFunction.cpp +10 lines
Lines 212-215 JSObject* JSFunction::construct(ExecStat JavaScriptCore/runtime/JSFunction.cpp_sec1
212
    return asObject(result);
212
    return asObject(result);
213
}
213
}
214
214
215
const UString JSFunction::calculatedDisplayName(JSGlobalData* globalData)
216
{
217
    const UString calculatedDisplayName = InternalFunction::calculatedDisplayName(globalData);
218
219
    if (m_body.get() && calculatedDisplayName.isEmpty())
220
        return m_body->contextualName();
221
    
222
    return calculatedDisplayName;
223
}
224
215
} // namespace JSC
225
} // namespace JSC
- JavaScriptCore/runtime/JSFunction.h +2 lines
Lines 89-94 namespace JSC { JavaScriptCore/runtime/JSFunction.h_sec1
89
89
90
        virtual ConstructType getConstructData(ConstructData&);
90
        virtual ConstructType getConstructData(ConstructData&);
91
        virtual CallType getCallData(CallData&);
91
        virtual CallType getCallData(CallData&);
92
        
93
        const UString calculatedDisplayName(JSGlobalData*);
92
94
93
    private:
95
    private:
94
        virtual const ClassInfo* classInfo() const { return &info; }
96
        virtual const ClassInfo* classInfo() const { return &info; }
- WebCore/ChangeLog +14 lines
Lines 1-3 WebCore/ChangeLog_sec1
1
2009-06-26  Alexandru Chiculita  <achicu@adobe.com>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        https://bugs.webkit.org/show_bug.cgi?id=19229
6
7
        Propagate identifier from AssignDotNode, 
8
        PropertyNode, AssignResolveNode to anonymous function nodes.
9
10
        Test: fast/profiler/name-anonymous-functions.html
11
12
        * inspector/JavaScriptDebugServer.cpp:
13
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
14
1
2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>
15
2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>
2
16
3
        Reviewed by Eric Seidel.
17
        Reviewed by Eric Seidel.
- WebCore/inspector/JavaScriptDebugServer.cpp +1 lines
Lines 583-588 void JavaScriptDebugServer::recompileAll WebCore/inspector/JavaScriptDebugServer.cpp_sec1
583
        RefPtr<FunctionBodyNode> newBody = globalData->parser->parse<FunctionBodyNode>(exec, 0, sourceCode);
583
        RefPtr<FunctionBodyNode> newBody = globalData->parser->parse<FunctionBodyNode>(exec, 0, sourceCode);
584
        ASSERT(newBody);
584
        ASSERT(newBody);
585
        newBody->finishParsing(oldBody->copyParameters(), oldBody->parameterCount());
585
        newBody->finishParsing(oldBody->copyParameters(), oldBody->parameterCount());
586
        newBody->setContextualName(oldBody->contextualName());
586
587
587
        result.first->second = newBody;
588
        result.first->second = newBody;
588
        function->setBody(newBody.release());
589
        function->setBody(newBody.release());
- LayoutTests/ChangeLog +24 lines
Lines 1-3 LayoutTests/ChangeLog_sec1
1
2009-06-26  Alexandru Chiculita  <achicu@adobe.com>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        https://bugs.webkit.org/show_bug.cgi?id=19229
6
7
        Propagate identifier from AssignDotNode, 
8
        PropertyNode, AssignResolveNode to anonymous function nodes.
9
        
10
        Changed old tests to force use anonymous functions.        
11
12
        * fast/profiler/anonymous-event-handler-expected.txt:
13
        * fast/profiler/anonymous-function-calls-eval-expected.txt:
14
        * fast/profiler/anonymous-function-calls-eval.html:
15
        * fast/profiler/built-in-function-calls-anonymous-expected.txt:
16
        * fast/profiler/built-in-function-calls-anonymous.html:
17
        * fast/profiler/name-anonymous-functions-expected.txt: Added.
18
        * fast/profiler/name-anonymous-functions.html: Added.
19
        * fast/profiler/nested-anonymous-functon-expected.txt:
20
        * fast/profiler/nested-anonymous-functon.html:
21
        * fast/profiler/resources/profiler-test-JS-resources.js:
22
        (var):
23
        ():
24
1
2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>
25
2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>
2
26
3
        Reviewed by Eric Seidel.
27
        Reviewed by Eric Seidel.
- LayoutTests/fast/profiler/anonymous-event-handler-expected.txt -1 / +1 lines
Lines 7-13 Thread_1 (no file) (line 0) LayoutTests/fast/profiler/anonymous-event-handler-expected.txt_sec1
7
   startTest anonymous-event-handler.html (line 11)
7
   startTest anonymous-event-handler.html (line 11)
8
      getElementById (no file) (line 0)
8
      getElementById (no file) (line 0)
9
      click (no file) (line 0)
9
      click (no file) (line 0)
10
         (anonymous function) anonymous-event-handler.html (line 15)
10
         buttonWithAnonymousHandler.onclick anonymous-event-handler.html (line 15)
11
            insertNewText profiler-test-JS-resources.js (line 17)
11
            insertNewText profiler-test-JS-resources.js (line 17)
12
               createElement (no file) (line 0)
12
               createElement (no file) (line 0)
13
               createTextNode (no file) (line 0)
13
               createTextNode (no file) (line 0)
- LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt +1 lines
Lines 5-10 To run this test manually, load it in th LayoutTests/fast/profiler/anonymous-function-calls-eval-expected.txt_sec1
5
Profile title: Anonymous function calles eval
5
Profile title: Anonymous function calles eval
6
Thread_1 (no file) (line 0)
6
Thread_1 (no file) (line 0)
7
   startTest anonymous-function-calls-eval.html (line 11)
7
   startTest anonymous-function-calls-eval.html (line 11)
8
      makeFunctionAnonymous profiler-test-JS-resources.js (line 104)
8
      (anonymous function) anonymous-function-calls-eval.html (line 14)
9
      (anonymous function) anonymous-function-calls-eval.html (line 14)
9
         eval (no file) (line 0)
10
         eval (no file) (line 0)
10
            (program) (no file) (line 1)
11
            (program) (no file) (line 1)
- LayoutTests/fast/profiler/anonymous-function-calls-eval.html -2 / +2 lines
Lines 11-19 function startTest() LayoutTests/fast/profiler/anonymous-function-calls-eval.html_sec1
11
{
11
{
12
    console.profile("Anonymous function calles eval");
12
    console.profile("Anonymous function calles eval");
13
13
14
    var variableThatPointsToAnAnonymousFunction = function() {
14
    var variableThatPointsToAnAnonymousFunction = makeFunctionAnonymous(function() {
15
        eval("insertNewText()");
15
        eval("insertNewText()");
16
    }
16
    });
17
17
18
    variableThatPointsToAnAnonymousFunction();
18
    variableThatPointsToAnAnonymousFunction();
19
    endTest();
19
    endTest();
- LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt +1 lines
Lines 5-10 To run this test manually, load it in th LayoutTests/fast/profiler/built-in-function-calls-anonymous-expected.txt_sec1
5
Profile title: Built-in function calls an anonymous function
5
Profile title: Built-in function calls an anonymous function
6
Thread_1 (no file) (line 0)
6
Thread_1 (no file) (line 0)
7
   startTest built-in-function-calls-anonymous.html (line 11)
7
   startTest built-in-function-calls-anonymous.html (line 11)
8
      makeFunctionAnonymous profiler-test-JS-resources.js (line 104)
8
      Array (no file) (line 0)
9
      Array (no file) (line 0)
9
      map (no file) (line 0)
10
      map (no file) (line 0)
10
         (anonymous function) built-in-function-calls-anonymous.html (line 14)
11
         (anonymous function) built-in-function-calls-anonymous.html (line 14)
- LayoutTests/fast/profiler/built-in-function-calls-anonymous.html -2 / +2 lines
Lines 11-19 function startTest() LayoutTests/fast/profiler/built-in-function-calls-anonymous.html_sec1
11
{
11
{
12
    console.profile("Built-in function calls an anonymous function");
12
    console.profile("Built-in function calls an anonymous function");
13
13
14
    var myFunction = function(arrayElement) {
14
    var myFunction = makeFunctionAnonymous(function(arrayElement) {
15
        return arrayOperatorFunction(arrayElement);
15
        return arrayOperatorFunction(arrayElement);
16
    }
16
    });
17
17
18
    var myArray = new Array (0, 1, 2);
18
    var myArray = new Array (0, 1, 2);
19
    myArray.map(myFunction);
19
    myArray.map(myFunction);
- LayoutTests/fast/profiler/name-anonymous-functions-expected.txt +69 lines
Line 0 LayoutTests/fast/profiler/name-anonymous-functions-expected.txt_sec1
1
CONSOLE MESSAGE: line 23: anonFunc0
2
CONSOLE MESSAGE: line 25: anonFunc1
3
CONSOLE MESSAGE: line 27: anonFunc2
4
CONSOLE MESSAGE: line 31: anonFunc3
5
CONSOLE MESSAGE: line 34: anonFunc4
6
CONSOLE MESSAGE: line 37: anonFunc5
7
CONSOLE MESSAGE: line 42: anonFunc6
8
CONSOLE MESSAGE: line 45: anonFunc7
9
CONSOLE MESSAGE: line 49: anonClass8
10
CONSOLE MESSAGE: line 50: anonFunc9
11
CONSOLE MESSAGE: line 54: nonAnonymousClass10
12
CONSOLE MESSAGE: line 56: anonFunc11
13
This page's JavaScript calls an anonymous function from different contexts. 
14
15
To use this test, load it in the browser then load the WebInspector and look at the profile. Beneath onload and startTest it should show three children, an anonymous function, script context, and the endTest call.
16
17
Profile title: As many different ways we can think of to name an anonymous function.
18
Thread_1 (no file) (line 0)
19
   startTest name-anonymous-functions.html (line 11)
20
      (anonymous function) profiler-test-JS-resources.js (line 29)
21
         insertNewText profiler-test-JS-resources.js (line 17)
22
            createElement (no file) (line 0)
23
            createTextNode (no file) (line 0)
24
            appendChild (no file) (line 0)
25
            getElementById (no file) (line 0)
26
      eval (no file) (line 0)
27
         (program) (no file) (line 1)
28
            (anonymous function) profiler-test-JS-resources.js (line 29)
29
               insertNewText profiler-test-JS-resources.js (line 17)
30
                  createElement (no file) (line 0)
31
                  createTextNode (no file) (line 0)
32
                  appendChild (no file) (line 0)
33
                  getElementById (no file) (line 0)
34
      variableThatPointsToAnAnonymousFunction name-anonymous-functions.html (line 17)
35
         eval (no file) (line 0)
36
            (program) (no file) (line 1)
37
               (anonymous function) profiler-test-JS-resources.js (line 29)
38
                  insertNewText profiler-test-JS-resources.js (line 17)
39
                     createElement (no file) (line 0)
40
                     createTextNode (no file) (line 0)
41
                     appendChild (no file) (line 0)
42
                     getElementById (no file) (line 0)
43
      anonFunc0 name-anonymous-functions.html (line 23)
44
         log (no file) (line 0)
45
      myObject.anonFunc1 name-anonymous-functions.html (line 25)
46
         log (no file) (line 0)
47
      anonFunc2 name-anonymous-functions.html (line 27)
48
         log (no file) (line 0)
49
      anonFunc3 name-anonymous-functions.html (line 31)
50
         log (no file) (line 0)
51
      anonFunc4 name-anonymous-functions.html (line 34)
52
         log (no file) (line 0)
53
      myObject.anonFunc5 name-anonymous-functions.html (line 37)
54
         log (no file) (line 0)
55
      anonFunc6 name-anonymous-functions.html (line 42)
56
         log (no file) (line 0)
57
      anonFunc7 name-anonymous-functions.html (line 45)
58
         log (no file) (line 0)
59
      anonClass8 name-anonymous-functions.html (line 49)
60
         log (no file) (line 0)
61
      anonClass8.prototype.anonFunc9 name-anonymous-functions.html (line 50)
62
         log (no file) (line 0)
63
      nonAnonymousClass10 name-anonymous-functions.html (line 54)
64
         log (no file) (line 0)
65
      anonFunc11 name-anonymous-functions.html (line 56)
66
         log (no file) (line 0)
67
      endTest profiler-test-JS-resources.js (line 1)
68
69
- LayoutTests/fast/profiler/name-anonymous-functions.html +77 lines
Line 0 LayoutTests/fast/profiler/name-anonymous-functions.html_sec1
1
<html>
2
<head>
3
<script src="resources/profiler-test-JS-resources.js"></script>
4
<script>
5
if (window.layoutTestController) {
6
    layoutTestController.dumpAsText();
7
    layoutTestController.setJavaScriptProfilingEnabled(true);
8
}
9
10
function startTest()
11
{
12
    console.profile("As many different ways we can think of to name an anonymous function.");
13
14
    anonymousFunction();
15
    eval("anonymousFunction()");
16
17
    var variableThatPointsToAnAnonymousFunction = function() {
18
        eval("anonymousFunction()");
19
    }
20
21
    variableThatPointsToAnAnonymousFunction();
22
23
    var myObject = { anonFunc0:function() { console.log('anonFunc0'); } };
24
    myObject.anonFunc0();
25
    myObject.anonFunc1 = function() { console.log('anonFunc1'); };
26
    myObject.anonFunc1();
27
    var anonFunc2 = function() { console.log('anonFunc2'); };
28
    myObject.anonFunc2Alias = anonFunc2;
29
    myObject.anonFunc2Alias();
30
31
    var anonFunc3 = function() { console.log('anonFunc3'); };
32
    anonFunc3();
33
34
    this.anonFunc4 = function() { console.log('anonFunc4'); };
35
    this.anonFunc4();
36
37
    myObject.anonFunc5 = function() { console.log('anonFunc5'); };
38
    var myOtherObject = {};
39
    myOtherObject.anonFunc5Alias = myObject.anonFunc5;
40
    myOtherObject.anonFunc5Alias();
41
42
    this.anonFunc6 = function() { console.log('anonFunc6'); };
43
    this.anonFunc6();
44
    
45
    this.anonFunc7 = function() { console.log('anonFunc7'); };
46
    var anonFunc7Alias = this.anonFunc7;
47
    anonFunc7Alias();
48
49
    var anonClass8 = function() { console.log('anonClass8'); };
50
    anonClass8.prototype.anonFunc9 = function(){ console.log('anonFunc9'); }
51
    var anonObject8 = new anonClass8();
52
    anonObject8.anonFunc9();
53
54
    function nonAnonymousClass10(){ console.log('nonAnonymousClass10'); }
55
    nonAnonymousClass10.prototype = {
56
        anonFunc11: function(){ console.log('anonFunc11'); }
57
    };
58
    var nonAnonymousObject10 = new nonAnonymousClass10();
59
    nonAnonymousObject10.anonFunc11();
60
61
    endTest();
62
63
}
64
65
</script>
66
</head>
67
68
<body onload="startTest()">
69
This page's JavaScript calls an anonymous function from different contexts.
70
<br>
71
<br>
72
To use this test, load it in the browser then load the WebInspector and look at
73
the profile.  Beneath onload and startTest it should show three children, an
74
anonymous function, script context, and the endTest call.
75
<div id="output"></div>
76
</body>
77
</html>
- LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt +1 lines
Lines 5-10 To run this test manually, load it in th LayoutTests/fast/profiler/nested-anonymous-functon-expected.txt_sec1
5
Profile title: Nested anonymous functions called
5
Profile title: Nested anonymous functions called
6
Thread_1 (no file) (line 0)
6
Thread_1 (no file) (line 0)
7
   startTest nested-anonymous-functon.html (line 11)
7
   startTest nested-anonymous-functon.html (line 11)
8
      makeFunctionAnonymous profiler-test-JS-resources.js (line 104)
8
      (anonymous function) nested-anonymous-functon.html (line 14)
9
      (anonymous function) nested-anonymous-functon.html (line 14)
9
         (anonymous function) profiler-test-JS-resources.js (line 29)
10
         (anonymous function) profiler-test-JS-resources.js (line 29)
10
            insertNewText profiler-test-JS-resources.js (line 17)
11
            insertNewText profiler-test-JS-resources.js (line 17)
- LayoutTests/fast/profiler/nested-anonymous-functon.html -2 / +2 lines
Lines 11-19 function startTest() LayoutTests/fast/profiler/nested-anonymous-functon.html_sec1
11
{
11
{
12
    console.profile("Nested anonymous functions called");
12
    console.profile("Nested anonymous functions called");
13
13
14
    var AnonymousFunctionWichCallsAnAnonymousFunction = function() {
14
    var AnonymousFunctionWichCallsAnAnonymousFunction = makeFunctionAnonymous(function() {
15
        anonymousFunction();
15
        anonymousFunction();
16
    }
16
    });
17
17
18
    AnonymousFunctionWichCallsAnAnonymousFunction();
18
    AnonymousFunctionWichCallsAnAnonymousFunction();
19
19
- LayoutTests/fast/profiler/resources/profiler-test-JS-resources.js -2 / +7 lines
Lines 26-33 function arrayOperatorFunction(arrayElem LayoutTests/fast/profiler/resources/profiler-test-JS-resources.js_sec1
26
    return arrayElement + 5;
26
    return arrayElement + 5;
27
}
27
}
28
28
29
var anonymousFunction = function () { insertNewText(); };
29
var anonymousFunction = makeFunctionAnonymous(function () { insertNewText(); });
30
var anotherAnonymousFunction = function () { insertGivenText("Another anonymous function was called.") };
30
var anotherAnonymousFunction = makeFunctionAnonymous(function () { insertGivenText("Another anonymous function was called.") });
31
31
32
function intermediaryFunction()
32
function intermediaryFunction()
33
{
33
{
Lines 99-101 function printProfileNodeWithoutTime(pre LayoutTests/fast/profiler/resources/profiler-test-JS-resources.js_sec2
99
    for (var i = 0; i < children.length; ++i)
99
    for (var i = 0; i < children.length; ++i)
100
        printProfileNodeWithoutTime(preElement, children[i], indentLevel);
100
        printProfileNodeWithoutTime(preElement, children[i], indentLevel);
101
}
101
}
102
103
function makeFunctionAnonymous(f)
104
{
105
    return f;
106
}

Return to Bug 19229