Bug 166060 - Modernize for loops in JSC
Summary: Modernize for loops in JSC
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Local Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Konstantin Tokarev
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-12-20 06:59 PST by Konstantin Tokarev
Modified: 2016-12-20 10:26 PST (History)
6 users (show)

See Also:


Attachments
Patch (42.84 KB, patch)
2016-12-20 07:01 PST, Konstantin Tokarev
no flags Details | Formatted Diff | Diff
Patch (44.87 KB, patch)
2016-12-20 09:42 PST, Konstantin Tokarev
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Konstantin Tokarev 2016-12-20 06:59:42 PST
Modernize for loops in JSC
Comment 1 Konstantin Tokarev 2016-12-20 07:01:12 PST
Created attachment 297519 [details]
Patch
Comment 2 Yusuke Suzuki 2016-12-20 08:25:17 PST
Comment on attachment 297519 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=297519&action=review

r=me with comments.

> Source/JavaScriptCore/API/JSCallbackObject.h:111
> +            for (auto& ptr : m_propertyMap) {
> +                if (ptr.value)
> +                    visitor.append(ptr.value);

Use the name like `pair` since it is no longer pointer.

> Source/JavaScriptCore/bytecode/CodeBlock.cpp:4068
> +        for (auto& exit : jitCode->osrExit) {
>              exit.considerAddingAsFrequentExitSite(profiledBlock);
>          }

Drop this brace.

> Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:205
> +    for (FunctionMetadataNode* function : functionStack) {
>          m_functionsToInitialize.append(std::make_pair(function, GlobalFunctionVariable));
>      }

Drop this brace. And use `auto*` instead.

> Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:294
> +        for (Node* node : *m_block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGGraph.cpp:1422
> +        for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGIntegerCheckCombiningPhase.cpp:195
> +        for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1112
> +                for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:105
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp:111
> +        for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:563
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1772
> +        for (auto& info : m_generationInfo) {
>              RELEASE_ASSERT(!info.alive());
>          }

Drop this brace.

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:8896
> +    for (BranchRecord& branch : m_branches) {
>          branch.jump.linkTo(m_jit.blockHeads()[branch.destination->index], &m_jit);
>      }

Drop this brace. And use `auto&`.

> Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:74
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:275
> +                    for (Node* subNode : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:307
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp:365
> +                    for (auto subNode : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGValidate.cpp:641
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp:62
> +            for (Node* node : *block) {

Let's use `auto*`.

> Source/JavaScriptCore/heap/HeapVerifier.cpp:149
> +    for (auto& objData : after.liveObjects) {
>          knownLiveSet.add(objData.obj);
>      }

Drop this brace.

> Source/JavaScriptCore/heap/MarkedAllocator.cpp:54
> +    for (MarkedBlock::Handle* block : m_blocks) {

Let's use `auto*`.

> Source/JavaScriptCore/jit/JIT.cpp:696
> +    for (SwitchRecord record : m_switches) {

Let's use `auto&`

> Source/JavaScriptCore/jit/JIT.cpp:698
>  

In the following code, we have the similar for statements. One for branchOffsets and one for offsetTable.
I think we can change them too.

> Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:41
> +    for (auto& iter : map) {

Instead of using `iter`, let's use `pair` since it is no longer iterator.

> Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:91
> +    for (auto& iter : map) {

Instead of using `iter`, let's use `pair` since it is no longer iterator.

> Source/JavaScriptCore/runtime/TypeProfiler.cpp:125
> +    for (TypeLocation* location : bucket) {

Use `auto*`.

> Source/JavaScriptCore/runtime/TypeSet.cpp:61
> +            for (RefPtr<StructureShape>& seenShape : m_structureHistory) {

Use `auto&`.

> Source/JavaScriptCore/runtime/TypeSet.cpp:116
> +    for (const RefPtr<StructureShape>& shape : m_structureHistory) {

Use `const auto&` here.

> Source/JavaScriptCore/runtime/WeakMapData.cpp:115
> +    for (auto& it : m_target->m_map) {
> +        if (!Heap::isMarked(it.key))
>              continue;
>          m_liveKeyCount++;
> -        visitor.append(it->value);
> +        visitor.append(it.value);

You can rename `it` to something like `pair` since it is no longer iterator.

> Source/JavaScriptCore/runtime/WeakMapData.cpp:133
> +        for (auto& it : m_target->m_map) {
> +            if (Heap::isMarked(it.key))
>                  continue;
> -            deadEntries.uncheckedAppend(it->key);
> +            deadEntries.uncheckedAppend(it.key);
>          }

You can rename `it` to something like `pair` since it is no longer iterator.

> Source/JavaScriptCore/runtime/WeakMapData.cpp:134
> +        for (auto& deadEntrie : deadEntries)

/deadEntrie/deadEntry/

> Source/JavaScriptCore/runtime/WeakMapData.cpp:141
> +        for (auto& it : m_target->m_map) {
> +            if (!Heap::isMarked(it.key))
>                  continue;
> -            newMap.add(it->key, it->value);
> +            newMap.add(it.key, it.value);

You can rename `it` to something like `pair` since it is no longer iterator.

> Source/JavaScriptCore/tools/ProfileTreeNode.h:91
> +        for (MapEntry* entry : entries) {

Use `auto*`.

> Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1946
> +            for (PatternTerm& term : alternative->m_terms) {

Use `auto&`.
Comment 3 Konstantin Tokarev 2016-12-20 09:03:17 PST
Comment on attachment 297519 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=297519&action=review

>> Source/JavaScriptCore/API/JSCallbackObject.h:111
>> +                    visitor.append(ptr.value);
> 
> Use the name like `pair` since it is no longer pointer.

Done

>> Source/JavaScriptCore/bytecode/CodeBlock.cpp:4068
>>          }
> 
> Drop this brace.

Done

>> Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:205
>>      }
> 
> Drop this brace. And use `auto*` instead.

Done

>> Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:294
>> +        for (Node* node : *m_block) {
> 
> Let's use `auto*`.

I thought that because both "auto" and "Node" are both 4-character identifiers, there is little incentive to prefer "auto" in places like this one

>> Source/JavaScriptCore/heap/HeapVerifier.cpp:149
>>      }
> 
> Drop this brace.

Done

>> Source/JavaScriptCore/heap/MarkedAllocator.cpp:54
>> +    for (MarkedBlock::Handle* block : m_blocks) {
> 
> Let's use `auto*`.

Done

>> Source/JavaScriptCore/jit/JIT.cpp:698
>>  
> 
> In the following code, we have the similar for statements. One for branchOffsets and one for offsetTable.
> I think we can change them too.

Loop at 705 cannot be converted straightforwardly because it operates with 2 parallel Vectors

Done for loops at 714 and 726

>> Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:41
>> +    for (auto& iter : map) {
> 
> Instead of using `iter`, let's use `pair` since it is no longer iterator.

Done

>> Source/JavaScriptCore/runtime/FunctionHasExecutedCache.cpp:91
>> +    for (auto& iter : map) {
> 
> Instead of using `iter`, let's use `pair` since it is no longer iterator.

Done

>> Source/JavaScriptCore/runtime/TypeProfiler.cpp:125
>> +    for (TypeLocation* location : bucket) {
> 
> Use `auto*`.

Done

>> Source/JavaScriptCore/runtime/TypeSet.cpp:61
>> +            for (RefPtr<StructureShape>& seenShape : m_structureHistory) {
> 
> Use `auto&`.

Done

>> Source/JavaScriptCore/runtime/TypeSet.cpp:116
>> +    for (const RefPtr<StructureShape>& shape : m_structureHistory) {
> 
> Use `const auto&` here.

Done

>> Source/JavaScriptCore/runtime/WeakMapData.cpp:115
>> +        visitor.append(it.value);
> 
> You can rename `it` to something like `pair` since it is no longer iterator.

Done

>> Source/JavaScriptCore/runtime/WeakMapData.cpp:133
>>          }
> 
> You can rename `it` to something like `pair` since it is no longer iterator.

Done

>> Source/JavaScriptCore/runtime/WeakMapData.cpp:134
>> +        for (auto& deadEntrie : deadEntries)
> 
> /deadEntrie/deadEntry/

Done

>> Source/JavaScriptCore/runtime/WeakMapData.cpp:141
>> +            newMap.add(it.key, it.value);
> 
> You can rename `it` to something like `pair` since it is no longer iterator.

Done

>> Source/JavaScriptCore/tools/ProfileTreeNode.h:91
>> +        for (MapEntry* entry : entries) {
> 
> Use `auto*`.

Done

>> Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1946
>> +            for (PatternTerm& term : alternative->m_terms) {
> 
> Use `auto&`.

Done
Comment 4 Konstantin Tokarev 2016-12-20 09:42:45 PST
Created attachment 297525 [details]
Patch
Comment 5 Konstantin Tokarev 2016-12-20 09:43:18 PST
Changed "Node* node" to use auto* as well
Comment 6 WebKit Commit Bot 2016-12-20 10:26:52 PST
Comment on attachment 297525 [details]
Patch

Clearing flags on attachment: 297525

Committed r210023: <http://trac.webkit.org/changeset/210023>
Comment 7 WebKit Commit Bot 2016-12-20 10:26:56 PST
All reviewed patches have been landed.  Closing bug.