mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
/* -*- 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 jsanalyzeinlines_h
|
|
#define jsanalyzeinlines_h
|
|
|
|
#include "jsanalyze.h"
|
|
|
|
#include "jsopcodeinlines.h"
|
|
|
|
namespace js {
|
|
namespace analyze {
|
|
|
|
inline const SSAValue &
|
|
ScriptAnalysis::poppedValue(uint32_t offset, uint32_t which)
|
|
{
|
|
JS_ASSERT(offset < script_->length);
|
|
JS_ASSERT(which < GetUseCount(script_, offset) +
|
|
(ExtendedUse(script_->code + offset) ? 1 : 0));
|
|
return getCode(offset).poppedValues[which];
|
|
}
|
|
|
|
inline const SSAValue &
|
|
ScriptAnalysis::poppedValue(const jsbytecode *pc, uint32_t which)
|
|
{
|
|
return poppedValue(pc - script_->code, which);
|
|
}
|
|
|
|
inline SSAUseChain *&
|
|
ScriptAnalysis::useChain(const SSAValue &v)
|
|
{
|
|
JS_ASSERT(trackUseChain(v));
|
|
if (v.kind() == SSAValue::PUSHED)
|
|
return getCode(v.pushedOffset()).pushedUses[v.pushedIndex()];
|
|
if (v.kind() == SSAValue::VAR)
|
|
return getCode(v.varOffset()).pushedUses[GetDefCount(script_, v.varOffset())];
|
|
return v.phiNode()->uses;
|
|
}
|
|
|
|
inline jsbytecode *
|
|
ScriptAnalysis::getCallPC(jsbytecode *pc)
|
|
{
|
|
SSAUseChain *uses = useChain(SSAValue::PushedValue(pc - script_->code, 0));
|
|
JS_ASSERT(uses && uses->popped);
|
|
JS_ASSERT(js_CodeSpec[script_->code[uses->offset]].format & JOF_INVOKE);
|
|
return script_->code + uses->offset;
|
|
}
|
|
|
|
} /* namespace analyze */
|
|
} /* namespace js */
|
|
|
|
#endif /* jsanalyzeinlines_h */
|