diff options
Diffstat (limited to 'js/src/vm/BytecodeLocation-inl.h')
-rw-r--r-- | js/src/vm/BytecodeLocation-inl.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/js/src/vm/BytecodeLocation-inl.h b/js/src/vm/BytecodeLocation-inl.h new file mode 100644 index 0000000000..46c945ddad --- /dev/null +++ b/js/src/vm/BytecodeLocation-inl.h @@ -0,0 +1,115 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * 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_BytecodeLocation_inl_h +#define vm_BytecodeLocation_inl_h + +#include "vm/BytecodeLocation.h" + +#include "vm/JSScript.h" + +#include "vm/BytecodeUtil-inl.h" +#include "vm/JSScript-inl.h" + +namespace js { + +inline uint32_t BytecodeLocation::bytecodeToOffset( + const JSScript* script) const { + MOZ_ASSERT(this->isInBounds()); + return script->pcToOffset(this->rawBytecode_); +} + +inline JSAtom* BytecodeLocation::getAtom(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + return script->getAtom(this->rawBytecode_); +} + +inline JSString* BytecodeLocation::getString(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + return script->getString(this->rawBytecode_); +} + +inline PropertyName* BytecodeLocation::getPropertyName( + const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + return script->getName(this->rawBytecode_); +} + +inline JS::BigInt* BytecodeLocation::getBigInt(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + MOZ_ASSERT(is(JSOp::BigInt)); + return script->getBigInt(this->rawBytecode_); +} + +inline JSObject* BytecodeLocation::getObject(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + MOZ_ASSERT(is(JSOp::CallSiteObj) || is(JSOp::Object)); + return script->getObject(this->rawBytecode_); +} + +inline JSFunction* BytecodeLocation::getFunction(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + MOZ_ASSERT(is(JSOp::Lambda) || is(JSOp::FunWithProto)); + return script->getFunction(this->rawBytecode_); +} + +inline js::RegExpObject* BytecodeLocation::getRegExp( + const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + MOZ_ASSERT(is(JSOp::RegExp)); + return script->getRegExp(this->rawBytecode_); +} + +inline js::Scope* BytecodeLocation::getScope(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + return script->getScope(this->rawBytecode_); +} + +inline Scope* BytecodeLocation::innermostScope(const JSScript* script) const { + MOZ_ASSERT(this->isValid()); + return script->innermostScope(this->rawBytecode_); +} + +inline uint32_t BytecodeLocation::tableSwitchCaseOffset( + const JSScript* script, uint32_t caseIndex) const { + return script->tableSwitchCaseOffset(this->rawBytecode_, caseIndex); +} + +inline uint32_t BytecodeLocation::getJumpTargetOffset( + const JSScript* script) const { + MOZ_ASSERT(this->isJump()); + return this->bytecodeToOffset(script) + GET_JUMP_OFFSET(this->rawBytecode_); +} + +inline uint32_t BytecodeLocation::getTableSwitchDefaultOffset( + const JSScript* script) const { + MOZ_ASSERT(this->is(JSOp::TableSwitch)); + return this->bytecodeToOffset(script) + GET_JUMP_OFFSET(this->rawBytecode_); +} + +BytecodeLocation BytecodeLocation::getTableSwitchDefaultTarget() const { + MOZ_ASSERT(is(JSOp::TableSwitch)); + return BytecodeLocation(*this, rawBytecode_ + GET_JUMP_OFFSET(rawBytecode_)); +} + +BytecodeLocation BytecodeLocation::getTableSwitchCaseTarget( + const JSScript* script, uint32_t caseIndex) const { + MOZ_ASSERT(is(JSOp::TableSwitch)); + jsbytecode* casePC = script->tableSwitchCasePC(rawBytecode_, caseIndex); + return BytecodeLocation(*this, casePC); +} + +inline uint32_t BytecodeLocation::useCount() const { + return GetUseCount(this->rawBytecode_); +} + +inline uint32_t BytecodeLocation::defCount() const { + return GetDefCount(this->rawBytecode_); +} + +} // namespace js + +#endif |