OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/js-native-context-specialization.h" | 5 #include "src/compiler/js-native-context-specialization.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/compilation-dependencies.h" | 9 #include "src/compilation-dependencies.h" |
10 #include "src/compiler/access-builder.h" | 10 #include "src/compiler/access-builder.h" |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 if (access_mode == AccessMode::kStore) { | 238 if (access_mode == AccessMode::kStore) { |
239 Node* check = graph()->NewNode( | 239 Node* check = graph()->NewNode( |
240 simplified()->ReferenceEqual(Type::Tagged()), value, this_value); | 240 simplified()->ReferenceEqual(Type::Tagged()), value, this_value); |
241 this_control = this_effect = | 241 this_control = this_effect = |
242 graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state, | 242 graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state, |
243 this_effect, this_control); | 243 this_effect, this_control); |
244 } | 244 } |
245 } else { | 245 } else { |
246 DCHECK(access_info.IsDataField()); | 246 DCHECK(access_info.IsDataField()); |
247 FieldIndex const field_index = access_info.field_index(); | 247 FieldIndex const field_index = access_info.field_index(); |
248 FieldCheck const field_check = access_info.field_check(); | |
249 Type* const field_type = access_info.field_type(); | 248 Type* const field_type = access_info.field_type(); |
250 switch (field_check) { | |
251 case FieldCheck::kNone: | |
252 break; | |
253 case FieldCheck::kJSArrayBufferViewBufferNotNeutered: { | |
254 Node* this_buffer = this_effect = | |
255 graph()->NewNode(simplified()->LoadField( | |
256 AccessBuilder::ForJSArrayBufferViewBuffer()), | |
257 this_receiver, this_effect, this_control); | |
258 Node* this_buffer_bit_field = this_effect = | |
259 graph()->NewNode(simplified()->LoadField( | |
260 AccessBuilder::ForJSArrayBufferBitField()), | |
261 this_buffer, this_effect, this_control); | |
262 Node* check = graph()->NewNode( | |
263 machine()->Word32Equal(), | |
264 graph()->NewNode(machine()->Word32And(), this_buffer_bit_field, | |
265 jsgraph()->Int32Constant( | |
266 1 << JSArrayBuffer::WasNeutered::kShift)), | |
267 jsgraph()->Int32Constant(0)); | |
268 this_control = this_effect = | |
269 graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state, | |
270 this_effect, this_control); | |
271 break; | |
272 } | |
273 } | |
274 if (access_mode == AccessMode::kLoad && | 249 if (access_mode == AccessMode::kLoad && |
275 access_info.holder().ToHandle(&holder)) { | 250 access_info.holder().ToHandle(&holder)) { |
276 this_receiver = jsgraph()->Constant(holder); | 251 this_receiver = jsgraph()->Constant(holder); |
277 } | 252 } |
278 Node* this_storage = this_receiver; | 253 Node* this_storage = this_receiver; |
279 if (!field_index.is_inobject()) { | 254 if (!field_index.is_inobject()) { |
280 this_storage = this_effect = graph()->NewNode( | 255 this_storage = this_effect = graph()->NewNode( |
281 simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), | 256 simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), |
282 this_storage, this_effect, this_control); | 257 this_storage, this_effect, this_control); |
283 } | 258 } |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 } | 1129 } |
1155 | 1130 |
1156 | 1131 |
1157 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 1132 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { |
1158 return jsgraph()->simplified(); | 1133 return jsgraph()->simplified(); |
1159 } | 1134 } |
1160 | 1135 |
1161 } // namespace compiler | 1136 } // namespace compiler |
1162 } // namespace internal | 1137 } // namespace internal |
1163 } // namespace v8 | 1138 } // namespace v8 |
OLD | NEW |