Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index f04c60b938c52f6a8cc055fa50ed12eab4cd0888..aace80f43eb54638f374fb1332290a2b5ee2df43 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -1644,6 +1644,12 @@ class JSReceiver: public HeapObject { |
CERTAINLY_NOT_STORE_FROM_KEYED |
}; |
+ // Indicates whether a value can be loaded as a constant. |
+ enum StoreMode { |
+ ALLOW_AS_CONSTANT, |
+ FORCE_FIELD |
+ }; |
+ |
// Internal properties (e.g. the hidden properties dictionary) might |
// be added even though the receiver is non-extensible. |
enum ExtensibilityCheck { |
@@ -1871,14 +1877,16 @@ class JSObject: public JSReceiver { |
Object* value, |
PropertyAttributes attributes, |
StrictModeFlag strict_mode, |
- ExtensibilityCheck extensibility_check); |
+ ExtensibilityCheck extensibility_check, |
+ StoreMode mode = ALLOW_AS_CONSTANT); |
static Handle<Object> SetLocalPropertyIgnoreAttributes( |
Handle<JSObject> object, |
Handle<Name> key, |
Handle<Object> value, |
PropertyAttributes attributes, |
- ValueType value_type = OPTIMAL_REPRESENTATION); |
+ ValueType value_type = OPTIMAL_REPRESENTATION, |
+ StoreMode mode = ALLOW_AS_CONSTANT); |
static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); |
static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); |
@@ -1906,7 +1914,8 @@ class JSObject: public JSReceiver { |
Name* key, |
Object* value, |
PropertyAttributes attributes, |
- ValueType value_type = OPTIMAL_REPRESENTATION); |
+ ValueType value_type = OPTIMAL_REPRESENTATION, |
+ StoreMode mode = ALLOW_AS_CONSTANT); |
// Retrieve a value in a normalized object given a lookup result. |
// Handles the special representation of JS global objects. |
@@ -2205,9 +2214,9 @@ class JSObject: public JSReceiver { |
// normal property is added instead, with a map transition. |
// This avoids the creation of many maps with the same constant |
// function, all orphaned. |
- MUST_USE_RESULT MaybeObject* AddConstantFunctionProperty( |
+ MUST_USE_RESULT MaybeObject* AddConstantProperty( |
Name* name, |
- JSFunction* function, |
+ Object* constant, |
PropertyAttributes attributes); |
MUST_USE_RESULT MaybeObject* ReplaceSlowProperty( |
@@ -2272,7 +2281,8 @@ class JSObject: public JSReceiver { |
StrictModeFlag strict_mode, |
StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED, |
ExtensibilityCheck extensibility_check = PERFORM_EXTENSIBILITY_CHECK, |
- ValueType value_type = OPTIMAL_REPRESENTATION); |
+ ValueType value_type = OPTIMAL_REPRESENTATION, |
+ StoreMode mode = ALLOW_AS_CONSTANT); |
// Convert the object to use the canonical dictionary |
// representation. If the object is expected to have additional properties |
@@ -2863,7 +2873,7 @@ class DescriptorArray: public FixedArray { |
inline PropertyDetails GetDetails(int descriptor_number); |
inline PropertyType GetType(int descriptor_number); |
inline int GetFieldIndex(int descriptor_number); |
- inline JSFunction* GetConstantFunction(int descriptor_number); |
+ inline Object* GetConstant(int descriptor_number); |
inline Object* GetCallbacksObject(int descriptor_number); |
inline AccessorDescriptor* GetCallbacks(int descriptor_number); |
@@ -4518,7 +4528,7 @@ class Code: public HeapObject { |
enum StubType { |
NORMAL, |
FIELD, |
- CONSTANT_FUNCTION, |
+ CONSTANT, |
CALLBACKS, |
INTERCEPTOR, |
MAP_TRANSITION, |