* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
namespace JSC {
+ class BytecodeGenerator;
+
class Label {
public:
- explicit Label(CodeBlock* codeBlock)
+ explicit Label(BytecodeGenerator& generator)
: m_refCount(0)
, m_location(invalidLocation)
- , m_codeBlock(codeBlock)
+ , m_generator(generator)
{
}
- void setLocation(unsigned location)
- {
- m_location = location;
-
- unsigned size = m_unresolvedJumps.size();
- for (unsigned i = 0; i < size; ++i)
- m_codeBlock->instructions()[m_unresolvedJumps[i].second].u.operand = m_location - m_unresolvedJumps[i].first;
- }
+ void setLocation(unsigned);
int bind(int opcode, int offset) const
{
int refCount() const { return m_refCount; }
bool isForward() const { return m_location == invalidLocation; }
+
+ int bind()
+ {
+ ASSERT(!isForward());
+ return bind(0, 0);
+ }
private:
typedef Vector<std::pair<int, int>, 8> JumpVector;
int m_refCount;
unsigned m_location;
- CodeBlock* m_codeBlock;
+ BytecodeGenerator& m_generator;
mutable JumpVector m_unresolvedJumps;
};