| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
| * vim: set ts=8 sts=4 et sw=4 tw=99: |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #ifndef vm_SavedStacksInl_h |
| #define vm_SavedStacksInl_h |
| |
| #include "vm/SavedStacks.h" |
| |
| // Assert that if the given object is not null, it's Class is the |
| // SavedFrame::class_ or the given object is a cross-compartment or Xray wrapper |
| // around such an object. |
| // |
| // We allow wrappers here because the JSAPI functions for working with |
| // SavedFrame objects and the SavedFrame accessors themselves handle wrappers |
| // and use the original caller's compartment's principals to determine what |
| // level of data to present. Unwrapping and entering the referent's compartment |
| // would mess that up. See the module level documentation in |
| // `js/src/vm/SavedStacks.h` as well as the comments in `js/src/jsapi.h`. |
| inline void |
| js::AssertObjectIsSavedFrameOrWrapper(JSContext* cx, HandleObject stack) |
| { |
| MOZ_ASSERT_IF(stack, js::SavedFrame::isSavedFrameOrWrapperAndNotProto(*stack)); |
| } |
| |
| #endif // vm_SavedStacksInl_h |