Index: src/ast/ast.h |
diff --git a/src/ast/ast.h b/src/ast/ast.h |
index ad02c960f840d66ff44ecaa1d5d89fdb40bdc284..ed345cacec2754e434f178970b41f5645e5f5539 100644 |
--- a/src/ast/ast.h |
+++ b/src/ast/ast.h |
@@ -318,7 +318,9 @@ class Expression : public AstNode { |
// Symbols that cannot be parsed as array indices are considered property |
// names. We do not treat symbols that can be array indexes as property |
// names because [] for string objects is handled only by keyed ICs. |
- bool IsPropertyName() const; |
+ bool IsPropertyName( |
marja
2016/08/08 08:20:13
For all calls, the guarantee you want to give is t
rmcilroy
2016/08/08 13:05:56
For GetCallType yes this is the case. For IsProper
|
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) const; |
// True iff the expression is a class or function expression without |
// a syntactic name. |
@@ -1241,10 +1243,14 @@ class Literal final : public Expression { |
public: |
DECLARE_NODE_TYPE(Literal) |
- bool IsPropertyName() const { return value_->IsPropertyName(); } |
+ bool IsPropertyName( |
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) const { |
+ return value_->IsPropertyName(deref_mode); |
+ } |
Handle<String> AsPropertyName() { |
- DCHECK(IsPropertyName()); |
+ DCHECK(IsPropertyName(HandleDereferenceMode::kHandleDereferenceDisallowed)); |
return Handle<String>::cast(value()); |
} |
@@ -1253,8 +1259,8 @@ class Literal final : public Expression { |
return value_->AsString(); |
} |
- bool ToBooleanIsTrue() const { return value()->BooleanValue(); } |
- bool ToBooleanIsFalse() const { return !value()->BooleanValue(); } |
+ bool ToBooleanIsTrue() const { return raw_value()->BooleanValue(); } |
+ bool ToBooleanIsFalse() const { return !raw_value()->BooleanValue(); } |
Handle<Object> value() const { return value_->value(); } |
const AstValue* raw_value() const { return value_; } |
@@ -1411,7 +1417,7 @@ class ObjectLiteral final : public MaterializedLiteral { |
Handle<FixedArray> constant_properties() const { |
return constant_properties_; |
} |
- int properties_count() const { return constant_properties_->length() / 2; } |
+ int properties_count() const { return boilerplate_properties_; } |
ZoneList<Property*>* properties() const { return properties_; } |
bool fast_elements() const { return fast_elements_; } |
bool may_store_doubles() const { return may_store_doubles_; } |
@@ -1786,10 +1792,13 @@ class Property final : public Expression { |
return property_feedback_slot_; |
} |
- static LhsKind GetAssignType(Property* property) { |
+ static LhsKind GetAssignType( |
+ Property* property, |
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) { |
if (property == NULL) return VARIABLE; |
bool super_access = property->IsSuperAccess(); |
- return (property->key()->IsPropertyName()) |
+ return (property->key()->IsPropertyName(deref_mode)) |
? (super_access ? NAMED_SUPER_PROPERTY : NAMED_PROPERTY) |
: (super_access ? KEYED_SUPER_PROPERTY : KEYED_PROPERTY); |
} |
@@ -1904,9 +1913,18 @@ class Call final : public Expression { |
}; |
// Helpers to determine how to handle the call. |
- CallType GetCallType(Isolate* isolate) const; |
- bool IsUsingCallFeedbackSlot(Isolate* isolate) const; |
- bool IsUsingCallFeedbackICSlot(Isolate* isolate) const; |
+ CallType GetCallType( |
+ Isolate* isolate, |
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) const; |
+ bool IsUsingCallFeedbackSlot( |
+ Isolate* isolate, |
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) const; |
+ bool IsUsingCallFeedbackICSlot( |
+ Isolate* isolate, |
+ HandleDereferenceMode deref_mode = |
+ HandleDereferenceMode::kHandleDereferenceAllowed) const; |
#ifdef DEBUG |
// Used to assert that the FullCodeGenerator records the return site. |