mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 11:51:04 +01:00
Explorer: Support class extension (#1946)
Support class extension with `extends` Relates to #1881 Add support for: * Class extension with `extends` * Using base class methods and members
This commit is contained in:
@@ -253,14 +253,14 @@ class ClassDeclaration : public Declaration {
|
||||
Nonnull<SelfDeclaration*> self_decl,
|
||||
ClassExtensibility extensibility,
|
||||
std::optional<Nonnull<TuplePattern*>> type_params,
|
||||
std::optional<Nonnull<Expression*>> extends,
|
||||
std::optional<Nonnull<Expression*>> base,
|
||||
std::vector<Nonnull<Declaration*>> members)
|
||||
: Declaration(AstNodeKind::ClassDeclaration, source_loc),
|
||||
name_(std::move(name)),
|
||||
extensibility_(extensibility),
|
||||
self_decl_(self_decl),
|
||||
type_params_(type_params),
|
||||
extends_(extends),
|
||||
base_expr_(base),
|
||||
members_(std::move(members)) {}
|
||||
|
||||
static auto classof(const AstNode* node) -> bool {
|
||||
@@ -275,8 +275,8 @@ class ClassDeclaration : public Declaration {
|
||||
auto type_params() -> std::optional<Nonnull<TuplePattern*>> {
|
||||
return type_params_;
|
||||
}
|
||||
auto extends() const -> std::optional<Nonnull<Expression*>> {
|
||||
return extends_;
|
||||
auto base_expr() const -> std::optional<Nonnull<Expression*>> {
|
||||
return base_expr_;
|
||||
}
|
||||
auto self() const -> Nonnull<const SelfDeclaration*> { return self_decl_; }
|
||||
auto self() -> Nonnull<SelfDeclaration*> { return self_decl_; }
|
||||
@@ -295,14 +295,22 @@ class ClassDeclaration : public Declaration {
|
||||
|
||||
auto value_category() const -> ValueCategory { return ValueCategory::Let; }
|
||||
|
||||
auto base() const -> std::optional<Nonnull<const ClassDeclaration*>> {
|
||||
return base_;
|
||||
}
|
||||
void set_base(Nonnull<const ClassDeclaration*> base_decl) {
|
||||
base_ = base_decl;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string name_;
|
||||
ClassExtensibility extensibility_;
|
||||
Nonnull<SelfDeclaration*> self_decl_;
|
||||
std::optional<Nonnull<TuplePattern*>> type_params_;
|
||||
std::optional<Nonnull<Expression*>> extends_;
|
||||
std::optional<Nonnull<Expression*>> base_expr_;
|
||||
std::vector<Nonnull<Declaration*>> members_;
|
||||
std::optional<Nonnull<FunctionDeclaration*>> destructor_;
|
||||
std::optional<Nonnull<const ClassDeclaration*>> base_;
|
||||
};
|
||||
|
||||
// EXPERIMENTAL MIXIN FEATURE
|
||||
|
||||
Reference in New Issue
Block a user