OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 <iomanip> | 5 #include <iomanip> |
6 #include <sstream> | 6 #include <sstream> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 | 399 |
400 UNREACHABLE(); | 400 UNREACHABLE(); |
401 return MaybeHandle<Object>(); | 401 return MaybeHandle<Object>(); |
402 } | 402 } |
403 | 403 |
404 | 404 |
405 MaybeHandle<Object> Object::GetPropertyWithDefinedGetter( | 405 MaybeHandle<Object> Object::GetPropertyWithDefinedGetter( |
406 Handle<Object> receiver, | 406 Handle<Object> receiver, |
407 Handle<JSReceiver> getter) { | 407 Handle<JSReceiver> getter) { |
408 Isolate* isolate = getter->GetIsolate(); | 408 Isolate* isolate = getter->GetIsolate(); |
| 409 |
| 410 // Platforms with simulators like arm/arm64 expose a funny issue. If the |
| 411 // simulator has a separate JS stack pointer from the C++ stack pointer, it |
| 412 // can miss C++ stack overflows in the stack guard at the start of JavaScript |
| 413 // functions. It would be very expensive to check the C++ stack pointer at |
| 414 // that location. The best solution seems to be to break the impasse by |
| 415 // adding checks at possible recursion points. What's more, we don't put |
| 416 // this stack check behind the USE_SIMULATOR define in order to keep |
| 417 // behavior the same between hardware and simulators. |
| 418 StackLimitCheck check(isolate); |
| 419 if (check.JsHasOverflowed()) { |
| 420 isolate->StackOverflow(); |
| 421 return MaybeHandle<Object>(); |
| 422 } |
| 423 |
409 Debug* debug = isolate->debug(); | 424 Debug* debug = isolate->debug(); |
410 // Handle stepping into a getter if step into is active. | 425 // Handle stepping into a getter if step into is active. |
411 // TODO(rossberg): should this apply to getters that are function proxies? | 426 // TODO(rossberg): should this apply to getters that are function proxies? |
412 if (debug->is_active()) { | 427 if (debug->is_active()) { |
413 debug->HandleStepIn(getter, Handle<Object>::null(), 0, false); | 428 debug->HandleStepIn(getter, Handle<Object>::null(), 0, false); |
414 } | 429 } |
415 | 430 |
416 return Execution::Call(isolate, getter, receiver, 0, NULL, true); | 431 return Execution::Call(isolate, getter, receiver, 0, NULL, true); |
417 } | 432 } |
418 | 433 |
(...skipping 16751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17170 CompilationInfo* info) { | 17185 CompilationInfo* info) { |
17171 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo( | 17186 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo( |
17172 handle(cell->dependent_code(), info->isolate()), | 17187 handle(cell->dependent_code(), info->isolate()), |
17173 DependentCode::kPropertyCellChangedGroup, info->object_wrapper()); | 17188 DependentCode::kPropertyCellChangedGroup, info->object_wrapper()); |
17174 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); | 17189 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); |
17175 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( | 17190 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( |
17176 cell, info->zone()); | 17191 cell, info->zone()); |
17177 } | 17192 } |
17178 | 17193 |
17179 } } // namespace v8::internal | 17194 } } // namespace v8::internal |
OLD | NEW |