class JSPropertyNameIterator;
class ScopeChainNode;
+ struct InlineCallFrame;
struct Instruction;
typedef ExecState CallFrame;
Register& operator=(CodeBlock*);
Register& operator=(ScopeChainNode*);
Register& operator=(Instruction*);
+ Register& operator=(InlineCallFrame*);
int32_t i() const;
JSActivation* activation() const;
JSPropertyNameIterator* propertyNameIterator() const;
ScopeChainNode* scopeChain() const;
Instruction* vPC() const;
+ InlineCallFrame* asInlineCallFrame() const;
+ int32_t unboxedInt32() const;
+ bool unboxedBoolean() const;
+ JSCell* unboxedCell() const;
+ int32_t payload() const;
+ int32_t tag() const;
+ int32_t& payload();
+ int32_t& tag();
static Register withInt(int32_t i)
{
return r;
}
- static inline Register withCallee(JSObject* callee);
+ static Register withCallee(JSObject* callee);
private:
union {
CallFrame* callFrame;
CodeBlock* codeBlock;
Instruction* vPC;
+ InlineCallFrame* inlineCallFrame;
+ EncodedValueDescriptor encodedValue;
} u;
};
ALWAYS_INLINE Register::Register(const JSValue& v)
{
-#if ENABLE(JSC_ZOMBIES)
- ASSERT(!v.isZombie());
-#endif
u.value = JSValue::encode(v);
}
ALWAYS_INLINE Register& Register::operator=(const JSValue& v)
{
-#if ENABLE(JSC_ZOMBIES)
- ASSERT(!v.isZombie());
-#endif
u.value = JSValue::encode(v);
return *this;
}
return *this;
}
+ ALWAYS_INLINE Register& Register::operator=(InlineCallFrame* inlineCallFrame)
+ {
+ u.inlineCallFrame = inlineCallFrame;
+ return *this;
+ }
+
ALWAYS_INLINE int32_t Register::i() const
{
return jsValue().asInt32();
return u.vPC;
}
+ ALWAYS_INLINE InlineCallFrame* Register::asInlineCallFrame() const
+ {
+ return u.inlineCallFrame;
+ }
+
+ ALWAYS_INLINE int32_t Register::unboxedInt32() const
+ {
+ return payload();
+ }
+
+ ALWAYS_INLINE bool Register::unboxedBoolean() const
+ {
+ return !!payload();
+ }
+
+ ALWAYS_INLINE JSCell* Register::unboxedCell() const
+ {
+#if USE(JSVALUE64)
+ return u.encodedValue.ptr;
+#else
+ return bitwise_cast<JSCell*>(payload());
+#endif
+ }
+
+ ALWAYS_INLINE int32_t Register::payload() const
+ {
+ return u.encodedValue.asBits.payload;
+ }
+
+ ALWAYS_INLINE int32_t Register::tag() const
+ {
+ return u.encodedValue.asBits.tag;
+ }
+
+ ALWAYS_INLINE int32_t& Register::payload()
+ {
+ return u.encodedValue.asBits.payload;
+ }
+
+ ALWAYS_INLINE int32_t& Register::tag()
+ {
+ return u.encodedValue.asBits.tag;
+ }
+
} // namespace JSC
namespace WTF {