| Index: src/ast/ast.h
 | 
| diff --git a/src/ast/ast.h b/src/ast/ast.h
 | 
| index b2103b04e32d747afbc44070fe9e3b5bdba276af..2090a8197ae37ebcb85552c73aef898529081976 100644
 | 
| --- a/src/ast/ast.h
 | 
| +++ b/src/ast/ast.h
 | 
| @@ -324,6 +324,10 @@ class Expression : public AstNode {
 | 
|    // names because [] for string objects is handled only by keyed ICs.
 | 
|    virtual bool IsPropertyName() const { return false; }
 | 
|  
 | 
| +  // True iff the expression is a class or function expression without
 | 
| +  // a syntactic name.
 | 
| +  virtual bool IsAnonymousFunctionDefinition() const { return false; }
 | 
| +
 | 
|    // True iff the expression is a literal represented as a smi.
 | 
|    bool IsSmiLiteral() const;
 | 
|  
 | 
| @@ -2758,6 +2762,13 @@ class FunctionLiteral final : public Expression {
 | 
|      dont_optimize_reason_ = reason;
 | 
|    }
 | 
|  
 | 
| +  bool IsAnonymousFunctionDefinition() const final {
 | 
| +    // TODO(adamk): This isn't quite accurate, as many non-expressions
 | 
| +    // (such as concise methods) are marked as anonymous, but it's
 | 
| +    // sufficient for the current callers.
 | 
| +    return is_anonymous();
 | 
| +  }
 | 
| +
 | 
|   protected:
 | 
|    FunctionLiteral(Zone* zone, const AstString* name,
 | 
|                    AstValueFactory* ast_value_factory, Scope* scope,
 | 
| @@ -2825,13 +2836,6 @@ class ClassLiteral final : public Expression {
 | 
|  
 | 
|    DECLARE_NODE_TYPE(ClassLiteral)
 | 
|  
 | 
| -  Handle<String> name() const { return raw_name_->string(); }
 | 
| -  const AstRawString* raw_name() const { return raw_name_; }
 | 
| -  void set_raw_name(const AstRawString* name) {
 | 
| -    DCHECK_NULL(raw_name_);
 | 
| -    raw_name_ = name;
 | 
| -  }
 | 
| -
 | 
|    Scope* scope() const { return scope_; }
 | 
|    VariableProxy* class_variable_proxy() const { return class_variable_proxy_; }
 | 
|    Expression* extends() const { return extends_; }
 | 
| @@ -2866,13 +2870,16 @@ class ClassLiteral final : public Expression {
 | 
|  
 | 
|    FeedbackVectorSlot ProxySlot() const { return slot_; }
 | 
|  
 | 
| +  bool IsAnonymousFunctionDefinition() const final {
 | 
| +    return constructor()->raw_name()->length() == 0;
 | 
| +  }
 | 
| +
 | 
|   protected:
 | 
| -  ClassLiteral(Zone* zone, const AstRawString* name, Scope* scope,
 | 
| -               VariableProxy* class_variable_proxy, Expression* extends,
 | 
| -               FunctionLiteral* constructor, ZoneList<Property*>* properties,
 | 
| -               int start_position, int end_position)
 | 
| +  ClassLiteral(Zone* zone, Scope* scope, VariableProxy* class_variable_proxy,
 | 
| +               Expression* extends, FunctionLiteral* constructor,
 | 
| +               ZoneList<Property*>* properties, int start_position,
 | 
| +               int end_position)
 | 
|        : Expression(zone, start_position),
 | 
| -        raw_name_(name),
 | 
|          scope_(scope),
 | 
|          class_variable_proxy_(class_variable_proxy),
 | 
|          extends_(extends),
 | 
| @@ -2885,7 +2892,6 @@ class ClassLiteral final : public Expression {
 | 
|   private:
 | 
|    int local_id(int n) const { return base_id() + parent_num_ids() + n; }
 | 
|  
 | 
| -  const AstRawString* raw_name_;
 | 
|    Scope* scope_;
 | 
|    VariableProxy* class_variable_proxy_;
 | 
|    Expression* extends_;
 | 
| @@ -3481,13 +3487,13 @@ class AstNodeFactory final BASE_EMBEDDED {
 | 
|          position);
 | 
|    }
 | 
|  
 | 
| -  ClassLiteral* NewClassLiteral(const AstRawString* name, Scope* scope,
 | 
| -                                VariableProxy* proxy, Expression* extends,
 | 
| +  ClassLiteral* NewClassLiteral(Scope* scope, VariableProxy* proxy,
 | 
| +                                Expression* extends,
 | 
|                                  FunctionLiteral* constructor,
 | 
|                                  ZoneList<ObjectLiteral::Property*>* properties,
 | 
|                                  int start_position, int end_position) {
 | 
|      return new (parser_zone_)
 | 
| -        ClassLiteral(parser_zone_, name, scope, proxy, extends, constructor,
 | 
| +        ClassLiteral(parser_zone_, scope, proxy, extends, constructor,
 | 
|                       properties, start_position, end_position);
 | 
|    }
 | 
|  
 | 
| 
 |