Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 0eaeb36d7f9b75a343988627cbbbd7eb9e4ec25d..43747cc8fa1b6ffef0b698aaaf2c329f54399be3 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -1394,14 +1394,8 @@ class JSReceiver: public HeapObject { |
PropertyAttributes GetLocalPropertyAttribute(String* name); |
// Can cause a GC. |
- bool HasProperty(String* name) { |
- return GetPropertyAttribute(name) != ABSENT; |
- } |
- |
- // Can cause a GC. |
- bool HasLocalProperty(String* name) { |
- return GetLocalPropertyAttribute(name) != ABSENT; |
- } |
+ inline bool HasProperty(String* name); |
+ inline bool HasLocalProperty(String* name); |
// Return the object's prototype (might be Heap::null_value()). |
inline Object* GetPrototype(); |
@@ -6475,9 +6469,14 @@ class JSProxy: public JSReceiver { |
// [handler]: The handler property. |
DECL_ACCESSORS(handler, Object) |
+ // [padding]: The padding slot (unused, see below). |
+ DECL_ACCESSORS(padding, Object) |
+ |
// Casting. |
static inline JSProxy* cast(Object* obj); |
+ bool HasPropertyWithHandler(String* name); |
+ |
MUST_USE_RESULT MaybeObject* SetPropertyWithHandler( |
String* name, |
Object* value, |
@@ -6493,6 +6492,9 @@ class JSProxy: public JSReceiver { |
String* name, |
bool* has_exception); |
+ // Turn this into an (empty) JSObject. |
+ void Fix(); |
+ |
// Dispatched behavior. |
#ifdef OBJECT_PRINT |
inline void JSProxyPrint() { |
@@ -6504,9 +6506,14 @@ class JSProxy: public JSReceiver { |
void JSProxyVerify(); |
#endif |
- // Layout description. |
+ // Layout description. We add padding so that a proxy has the same |
+ // size as a virgin JSObject. This is essential for becoming a JSObject |
+ // upon freeze. |
static const int kHandlerOffset = HeapObject::kHeaderSize; |
- static const int kSize = kHandlerOffset + kPointerSize; |
+ static const int kPaddingOffset = kHandlerOffset + kPointerSize; |
+ static const int kSize = kPaddingOffset + kPointerSize; |
+ |
+ STATIC_CHECK(kSize == JSObject::kHeaderSize); |
typedef FixedBodyDescriptor<kHandlerOffset, |
kHandlerOffset + kPointerSize, |