Replace WTF::move with WTFMove
[WebKit-https.git] / Source / JavaScriptCore / runtime / ScopedArgumentsTable.cpp
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "config.h"
27 #include "ScopedArgumentsTable.h"
28
29 #include "JSCInlines.h"
30
31 namespace JSC {
32
33 const ClassInfo ScopedArgumentsTable::s_info = { "ScopedArgumentsTable", 0, 0, CREATE_METHOD_TABLE(ScopedArgumentsTable) };
34
35 ScopedArgumentsTable::ScopedArgumentsTable(VM& vm)
36     : Base(vm, vm.scopedArgumentsTableStructure.get())
37     , m_length(0)
38     , m_locked(false)
39 {
40 }
41
42 ScopedArgumentsTable::~ScopedArgumentsTable()
43 {
44 }
45
46 void ScopedArgumentsTable::destroy(JSCell* cell)
47 {
48     static_cast<ScopedArgumentsTable*>(cell)->ScopedArgumentsTable::~ScopedArgumentsTable();
49 }
50
51 ScopedArgumentsTable* ScopedArgumentsTable::create(VM& vm)
52 {
53     ScopedArgumentsTable* result =
54         new (NotNull, allocateCell<ScopedArgumentsTable>(vm.heap)) ScopedArgumentsTable(vm);
55     result->finishCreation(vm);
56     return result;
57 }
58
59 ScopedArgumentsTable* ScopedArgumentsTable::create(VM& vm, uint32_t length)
60 {
61     ScopedArgumentsTable* result = create(vm);
62     result->m_length = length;
63     result->m_arguments = std::make_unique<ScopeOffset[]>(length);
64     return result;
65 }
66
67 ScopedArgumentsTable* ScopedArgumentsTable::clone(VM& vm)
68 {
69     ScopedArgumentsTable* result = create(vm, m_length);
70     for (unsigned i = m_length; i--;)
71         result->m_arguments[i] = m_arguments[i];
72     return result;
73 }
74
75 ScopedArgumentsTable* ScopedArgumentsTable::setLength(VM& vm, uint32_t newLength)
76 {
77     if (LIKELY(!m_locked)) {
78         std::unique_ptr<ScopeOffset[]> newArguments = std::make_unique<ScopeOffset[]>(newLength);
79         for (unsigned i = std::min(m_length, newLength); i--;)
80             newArguments[i] = m_arguments[i];
81         m_length = newLength;
82         m_arguments = WTFMove(newArguments);
83         return this;
84     }
85     
86     ScopedArgumentsTable* result = create(vm, newLength);
87     for (unsigned i = std::min(m_length, newLength); i--;)
88         result->m_arguments[i] = m_arguments[i];
89     return result;
90 }
91
92 ScopedArgumentsTable* ScopedArgumentsTable::set(VM& vm, uint32_t i, ScopeOffset value)
93 {
94     ScopedArgumentsTable* result;
95     if (UNLIKELY(m_locked))
96         result = clone(vm);
97     else
98         result = this;
99     result->at(i) = value;
100     return result;
101 }
102
103 Structure* ScopedArgumentsTable::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
104 {
105     return Structure::create(vm, globalObject, prototype, TypeInfo(CellType, StructureFlags), info());
106 }
107
108 } // namespace JSC
109