Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: src/api.h

Issue 2350933007: Make sure to use the correct context for eval checks (Closed)
Patch Set: updates Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/builtins/builtins.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_API_H_ 5 #ifndef V8_API_H_
6 #define V8_API_H_ 6 #define V8_API_H_
7 7
8 #include "include/v8-testing.h" 8 #include "include/v8-testing.h"
9 #include "src/contexts.h" 9 #include "src/contexts.h"
10 #include "src/factory.h" 10 #include "src/factory.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 explicit HandleScopeImplementer(Isolate* isolate) 382 explicit HandleScopeImplementer(Isolate* isolate)
383 : isolate_(isolate), 383 : isolate_(isolate),
384 blocks_(0), 384 blocks_(0),
385 entered_contexts_(0), 385 entered_contexts_(0),
386 saved_contexts_(0), 386 saved_contexts_(0),
387 microtask_context_(nullptr), 387 microtask_context_(nullptr),
388 spare_(NULL), 388 spare_(NULL),
389 call_depth_(0), 389 call_depth_(0),
390 microtasks_depth_(0), 390 microtasks_depth_(0),
391 microtasks_suppressions_(0), 391 microtasks_suppressions_(0),
392 entered_context_count_during_microtasks_(0),
392 #ifdef DEBUG 393 #ifdef DEBUG
393 debug_microtasks_depth_(0), 394 debug_microtasks_depth_(0),
394 #endif 395 #endif
395 microtasks_policy_(v8::MicrotasksPolicy::kAuto), 396 microtasks_policy_(v8::MicrotasksPolicy::kAuto),
396 last_handle_before_deferred_block_(NULL) { } 397 last_handle_before_deferred_block_(NULL) { }
397 398
398 ~HandleScopeImplementer() { 399 ~HandleScopeImplementer() {
399 DeleteArray(spare_); 400 DeleteArray(spare_);
400 } 401 }
401 402
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 inline void LeaveContext(); 448 inline void LeaveContext();
448 inline bool LastEnteredContextWas(Handle<Context> context); 449 inline bool LastEnteredContextWas(Handle<Context> context);
449 450
450 // Returns the last entered context or an empty handle if no 451 // Returns the last entered context or an empty handle if no
451 // contexts have been entered. 452 // contexts have been entered.
452 inline Handle<Context> LastEnteredContext(); 453 inline Handle<Context> LastEnteredContext();
453 454
454 inline void EnterMicrotaskContext(Handle<Context> context); 455 inline void EnterMicrotaskContext(Handle<Context> context);
455 inline void LeaveMicrotaskContext(); 456 inline void LeaveMicrotaskContext();
456 inline Handle<Context> MicrotaskContext(); 457 inline Handle<Context> MicrotaskContext();
458 inline bool MicrotaskContextIsLastEnteredContext() const {
459 return microtask_context_ &&
460 entered_context_count_during_microtasks_ ==
461 entered_contexts_.length();
462 }
457 463
458 inline void SaveContext(Context* context); 464 inline void SaveContext(Context* context);
459 inline Context* RestoreContext(); 465 inline Context* RestoreContext();
460 inline bool HasSavedContexts(); 466 inline bool HasSavedContexts();
461 467
462 inline List<internal::Object**>* blocks() { return &blocks_; } 468 inline List<internal::Object**>* blocks() { return &blocks_; }
463 Isolate* isolate() const { return isolate_; } 469 Isolate* isolate() const { return isolate_; }
464 470
465 void ReturnBlock(Object** block) { 471 void ReturnBlock(Object** block) {
466 DCHECK(block != NULL); 472 DCHECK(block != NULL);
467 if (spare_ != NULL) DeleteArray(spare_); 473 if (spare_ != NULL) DeleteArray(spare_);
468 spare_ = block; 474 spare_ = block;
469 } 475 }
470 476
471 private: 477 private:
472 void ResetAfterArchive() { 478 void ResetAfterArchive() {
473 blocks_.Initialize(0); 479 blocks_.Initialize(0);
474 entered_contexts_.Initialize(0); 480 entered_contexts_.Initialize(0);
475 saved_contexts_.Initialize(0); 481 saved_contexts_.Initialize(0);
476 microtask_context_ = nullptr; 482 microtask_context_ = nullptr;
483 entered_context_count_during_microtasks_ = 0;
477 spare_ = NULL; 484 spare_ = NULL;
478 last_handle_before_deferred_block_ = NULL; 485 last_handle_before_deferred_block_ = NULL;
479 call_depth_ = 0; 486 call_depth_ = 0;
480 } 487 }
481 488
482 void Free() { 489 void Free() {
483 DCHECK(blocks_.length() == 0); 490 DCHECK(blocks_.length() == 0);
484 DCHECK(entered_contexts_.length() == 0); 491 DCHECK(entered_contexts_.length() == 0);
485 DCHECK(saved_contexts_.length() == 0); 492 DCHECK(saved_contexts_.length() == 0);
486 DCHECK(!microtask_context_); 493 DCHECK(!microtask_context_);
(...skipping 14 matching lines...) Expand all
501 List<internal::Object**> blocks_; 508 List<internal::Object**> blocks_;
502 // Used as a stack to keep track of entered contexts. 509 // Used as a stack to keep track of entered contexts.
503 List<Context*> entered_contexts_; 510 List<Context*> entered_contexts_;
504 // Used as a stack to keep track of saved contexts. 511 // Used as a stack to keep track of saved contexts.
505 List<Context*> saved_contexts_; 512 List<Context*> saved_contexts_;
506 Context* microtask_context_; 513 Context* microtask_context_;
507 Object** spare_; 514 Object** spare_;
508 int call_depth_; 515 int call_depth_;
509 int microtasks_depth_; 516 int microtasks_depth_;
510 int microtasks_suppressions_; 517 int microtasks_suppressions_;
518 int entered_context_count_during_microtasks_;
511 #ifdef DEBUG 519 #ifdef DEBUG
512 int debug_microtasks_depth_; 520 int debug_microtasks_depth_;
513 #endif 521 #endif
514 v8::MicrotasksPolicy microtasks_policy_; 522 v8::MicrotasksPolicy microtasks_policy_;
515 Object** last_handle_before_deferred_block_; 523 Object** last_handle_before_deferred_block_;
516 // This is only used for threading support. 524 // This is only used for threading support.
517 HandleScopeData handle_scope_data_; 525 HandleScopeData handle_scope_data_;
518 526
519 void IterateThis(ObjectVisitor* v); 527 void IterateThis(ObjectVisitor* v);
520 char* RestoreThreadHelper(char* from); 528 char* RestoreThreadHelper(char* from);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 580
573 581
574 Handle<Context> HandleScopeImplementer::LastEnteredContext() { 582 Handle<Context> HandleScopeImplementer::LastEnteredContext() {
575 if (entered_contexts_.is_empty()) return Handle<Context>::null(); 583 if (entered_contexts_.is_empty()) return Handle<Context>::null();
576 return Handle<Context>(entered_contexts_.last()); 584 return Handle<Context>(entered_contexts_.last());
577 } 585 }
578 586
579 void HandleScopeImplementer::EnterMicrotaskContext(Handle<Context> context) { 587 void HandleScopeImplementer::EnterMicrotaskContext(Handle<Context> context) {
580 DCHECK(!microtask_context_); 588 DCHECK(!microtask_context_);
581 microtask_context_ = *context; 589 microtask_context_ = *context;
590 entered_context_count_during_microtasks_ = entered_contexts_.length();
582 } 591 }
583 592
584 void HandleScopeImplementer::LeaveMicrotaskContext() { 593 void HandleScopeImplementer::LeaveMicrotaskContext() {
585 DCHECK(microtask_context_); 594 DCHECK(microtask_context_);
586 microtask_context_ = nullptr; 595 microtask_context_ = nullptr;
596 entered_context_count_during_microtasks_ = 0;
587 } 597 }
588 598
589 Handle<Context> HandleScopeImplementer::MicrotaskContext() { 599 Handle<Context> HandleScopeImplementer::MicrotaskContext() {
590 if (microtask_context_) return Handle<Context>(microtask_context_); 600 if (microtask_context_) return Handle<Context>(microtask_context_);
591 return Handle<Context>::null(); 601 return Handle<Context>::null();
592 } 602 }
593 603
594 // If there's a spare block, use it for growing the current scope. 604 // If there's a spare block, use it for growing the current scope.
595 internal::Object** HandleScopeImplementer::GetSpareOrNewBlock() { 605 internal::Object** HandleScopeImplementer::GetSpareOrNewBlock() {
596 internal::Object** block = (spare_ != NULL) ? 606 internal::Object** block = (spare_ != NULL) ?
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 } 656 }
647 657
648 private: 658 private:
649 static v8::Testing::StressType stress_type_; 659 static v8::Testing::StressType stress_type_;
650 }; 660 };
651 661
652 } // namespace internal 662 } // namespace internal
653 } // namespace v8 663 } // namespace v8
654 664
655 #endif // V8_API_H_ 665 #endif // V8_API_H_
OLDNEW
« no previous file with comments | « no previous file | src/builtins/builtins.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698