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(); |
248 Type* const field_type = access_info.field_type(); | 249 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 } |
249 if (access_mode == AccessMode::kLoad && | 274 if (access_mode == AccessMode::kLoad && |
250 access_info.holder().ToHandle(&holder)) { | 275 access_info.holder().ToHandle(&holder)) { |
251 this_receiver = jsgraph()->Constant(holder); | 276 this_receiver = jsgraph()->Constant(holder); |
252 } | 277 } |
253 Node* this_storage = this_receiver; | 278 Node* this_storage = this_receiver; |
254 if (!field_index.is_inobject()) { | 279 if (!field_index.is_inobject()) { |
255 this_storage = this_effect = graph()->NewNode( | 280 this_storage = this_effect = graph()->NewNode( |
256 simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), | 281 simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), |
257 this_storage, this_effect, this_control); | 282 this_storage, this_effect, this_control); |
258 } | 283 } |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1129 } | 1154 } |
1130 | 1155 |
1131 | 1156 |
1132 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 1157 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { |
1133 return jsgraph()->simplified(); | 1158 return jsgraph()->simplified(); |
1134 } | 1159 } |
1135 | 1160 |
1136 } // namespace compiler | 1161 } // namespace compiler |
1137 } // namespace internal | 1162 } // namespace internal |
1138 } // namespace v8 | 1163 } // namespace v8 |
OLD | NEW |