%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/execution/interrupts-scope.h" #include "src/execution/isolate.h" namespace v8 { namespace internal { InterruptsScope::InterruptsScope(Isolate* isolate, intptr_t intercept_mask, Mode mode) : stack_guard_(isolate->stack_guard()), intercept_mask_(intercept_mask), intercepted_flags_(0), mode_(mode) { if (mode_ != kNoop) stack_guard_->PushInterruptsScope(this); } bool InterruptsScope::Intercept(StackGuard::InterruptFlag flag) { InterruptsScope* last_postpone_scope = nullptr; for (InterruptsScope* current = this; current; current = current->prev_) { // We only consider scopes related to passed flag. if (!(current->intercept_mask_ & flag)) continue; if (current->mode_ == kRunInterrupts) { // If innermost scope is kRunInterrupts scope, prevent interrupt from // being intercepted. break; } else { DCHECK_EQ(current->mode_, kPostponeInterrupts); last_postpone_scope = current; } } // If there is no postpone scope for passed flag then we should not intercept. if (!last_postpone_scope) return false; last_postpone_scope->intercepted_flags_ |= flag; return true; } } // namespace internal } // namespace v8