The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.

Please select the desired protocol below to get the URL.

This URL has Read-Only access.

Statistics
| Branch: | Revision:

main_repo / deps / v8 / src / objects-visiting.cc @ f230a1cf

History | View | Annotate | Download (6.19 KB)

1
// Copyright 2011 the V8 project authors. All rights reserved.
2
// Redistribution and use in source and binary forms, with or without
3
// modification, are permitted provided that the following conditions are
4
// met:
5
//
6
//     * Redistributions of source code must retain the above copyright
7
//       notice, this list of conditions and the following disclaimer.
8
//     * Redistributions in binary form must reproduce the above
9
//       copyright notice, this list of conditions and the following
10
//       disclaimer in the documentation and/or other materials provided
11
//       with the distribution.
12
//     * Neither the name of Google Inc. nor the names of its
13
//       contributors may be used to endorse or promote products derived
14
//       from this software without specific prior written permission.
15
//
16
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27

    
28
#include "v8.h"
29

    
30
#include "ic-inl.h"
31
#include "objects-visiting.h"
32

    
33
namespace v8 {
34
namespace internal {
35

    
36

    
37
static inline bool IsShortcutCandidate(int type) {
38
  return ((type & kShortcutTypeMask) == kShortcutTypeTag);
39
}
40

    
41

    
42
StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
43
    int instance_type,
44
    int instance_size) {
45
  if (instance_type < FIRST_NONSTRING_TYPE) {
46
    switch (instance_type & kStringRepresentationMask) {
47
      case kSeqStringTag:
48
        if ((instance_type & kStringEncodingMask) == kOneByteStringTag) {
49
          return kVisitSeqOneByteString;
50
        } else {
51
          return kVisitSeqTwoByteString;
52
        }
53

    
54
      case kConsStringTag:
55
        if (IsShortcutCandidate(instance_type)) {
56
          return kVisitShortcutCandidate;
57
        } else {
58
          return kVisitConsString;
59
        }
60

    
61
      case kSlicedStringTag:
62
        return kVisitSlicedString;
63

    
64
      case kExternalStringTag:
65
        return GetVisitorIdForSize(kVisitDataObject,
66
                                   kVisitDataObjectGeneric,
67
                                   instance_size);
68
    }
69
    UNREACHABLE();
70
  }
71

    
72
  switch (instance_type) {
73
    case BYTE_ARRAY_TYPE:
74
      return kVisitByteArray;
75

    
76
    case FREE_SPACE_TYPE:
77
      return kVisitFreeSpace;
78

    
79
    case FIXED_ARRAY_TYPE:
80
      return kVisitFixedArray;
81

    
82
    case FIXED_DOUBLE_ARRAY_TYPE:
83
      return kVisitFixedDoubleArray;
84

    
85
    case CONSTANT_POOL_ARRAY_TYPE:
86
      return kVisitConstantPoolArray;
87

    
88
    case ODDBALL_TYPE:
89
      return kVisitOddball;
90

    
91
    case MAP_TYPE:
92
      return kVisitMap;
93

    
94
    case CODE_TYPE:
95
      return kVisitCode;
96

    
97
    case CELL_TYPE:
98
      return kVisitCell;
99

    
100
    case PROPERTY_CELL_TYPE:
101
      return kVisitPropertyCell;
102

    
103
    case JS_SET_TYPE:
104
      return GetVisitorIdForSize(kVisitStruct,
105
                                 kVisitStructGeneric,
106
                                 JSSet::kSize);
107

    
108
    case JS_MAP_TYPE:
109
      return GetVisitorIdForSize(kVisitStruct,
110
                                 kVisitStructGeneric,
111
                                 JSMap::kSize);
112

    
113
    case JS_WEAK_MAP_TYPE:
114
      return kVisitJSWeakMap;
115

    
116
    case JS_WEAK_SET_TYPE:
117
      return kVisitJSWeakSet;
118

    
119
    case JS_REGEXP_TYPE:
120
      return kVisitJSRegExp;
121

    
122
    case SHARED_FUNCTION_INFO_TYPE:
123
      return kVisitSharedFunctionInfo;
124

    
125
    case JS_PROXY_TYPE:
126
      return GetVisitorIdForSize(kVisitStruct,
127
                                 kVisitStructGeneric,
128
                                 JSProxy::kSize);
129

    
130
    case JS_FUNCTION_PROXY_TYPE:
131
      return GetVisitorIdForSize(kVisitStruct,
132
                                 kVisitStructGeneric,
133
                                 JSFunctionProxy::kSize);
134

    
135
    case FOREIGN_TYPE:
136
      return GetVisitorIdForSize(kVisitDataObject,
137
                                 kVisitDataObjectGeneric,
138
                                 Foreign::kSize);
139

    
140
    case SYMBOL_TYPE:
141
      return kVisitSymbol;
142

    
143
    case FILLER_TYPE:
144
      return kVisitDataObjectGeneric;
145

    
146
    case JS_ARRAY_BUFFER_TYPE:
147
      return kVisitJSArrayBuffer;
148

    
149
    case JS_TYPED_ARRAY_TYPE:
150
      return kVisitJSTypedArray;
151

    
152
    case JS_DATA_VIEW_TYPE:
153
      return kVisitJSDataView;
154

    
155
    case JS_OBJECT_TYPE:
156
    case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
157
    case JS_GENERATOR_OBJECT_TYPE:
158
    case JS_MODULE_TYPE:
159
    case JS_VALUE_TYPE:
160
    case JS_DATE_TYPE:
161
    case JS_ARRAY_TYPE:
162
    case JS_GLOBAL_PROXY_TYPE:
163
    case JS_GLOBAL_OBJECT_TYPE:
164
    case JS_BUILTINS_OBJECT_TYPE:
165
    case JS_MESSAGE_OBJECT_TYPE:
166
      return GetVisitorIdForSize(kVisitJSObject,
167
                                 kVisitJSObjectGeneric,
168
                                 instance_size);
169

    
170
    case JS_FUNCTION_TYPE:
171
      return kVisitJSFunction;
172

    
173
    case HEAP_NUMBER_TYPE:
174
    case EXTERNAL_PIXEL_ARRAY_TYPE:
175
    case EXTERNAL_BYTE_ARRAY_TYPE:
176
    case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
177
    case EXTERNAL_SHORT_ARRAY_TYPE:
178
    case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
179
    case EXTERNAL_INT_ARRAY_TYPE:
180
    case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
181
    case EXTERNAL_FLOAT_ARRAY_TYPE:
182
    case EXTERNAL_DOUBLE_ARRAY_TYPE:
183
      return GetVisitorIdForSize(kVisitDataObject,
184
                                 kVisitDataObjectGeneric,
185
                                 instance_size);
186

    
187
#define MAKE_STRUCT_CASE(NAME, Name, name) \
188
        case NAME##_TYPE:
189
      STRUCT_LIST(MAKE_STRUCT_CASE)
190
#undef MAKE_STRUCT_CASE
191
          if (instance_type == ALLOCATION_SITE_TYPE) {
192
            return kVisitAllocationSite;
193
          }
194

    
195
          return GetVisitorIdForSize(kVisitStruct,
196
                                     kVisitStructGeneric,
197
                                     instance_size);
198

    
199
    default:
200
      UNREACHABLE();
201
      return kVisitorIdCount;
202
  }
203
}
204

    
205
} }  // namespace v8::internal