From 34969c14bed456b8a4cd76d71319b75342825878 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 31 Aug 2021 20:48:22 +0200 Subject: StructExprTuple doesn't really exist A StructExprTuple is parsed as a CallExpr. Both (can) start with a PathInExpression followed by zero or more Expressions between brackets. Only, after type checking, when actually generating gcc generic trees is a distinction made between a function call or tuple constructor. Remove the AST and HIR StructExprTuple classes which are never used. --- gcc/rust/ast/rust-ast-full-decls.h | 1 - gcc/rust/ast/rust-ast-full-test.cc | 44 ---------------- gcc/rust/ast/rust-ast-visitor.h | 1 - gcc/rust/ast/rust-expr.h | 69 ------------------------- gcc/rust/backend/rust-compile-base.h | 1 - gcc/rust/expand/rust-macro-expand.cc | 30 ----------- gcc/rust/hir/rust-ast-lower-base.h | 1 - gcc/rust/hir/tree/rust-hir-expr.h | 74 --------------------------- gcc/rust/hir/tree/rust-hir-full-decls.h | 1 - gcc/rust/hir/tree/rust-hir-full-test.cc | 59 --------------------- gcc/rust/hir/tree/rust-hir-visitor.h | 1 - gcc/rust/lint/rust-lint-marklive-base.h | 1 - gcc/rust/resolve/rust-ast-resolve-base.h | 1 - gcc/rust/typecheck/rust-hir-const-fold-base.h | 1 - gcc/rust/typecheck/rust-hir-type-check-base.h | 1 - gcc/rust/typecheck/rust-hir-type-check-util.h | 1 - 16 files changed, 287 deletions(-) (limited to 'gcc') diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 7644dfe..205da88 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -109,7 +109,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class StructExprTuple; class StructExprUnit; class EnumVariantExpr; class EnumExprField; diff --git a/gcc/rust/ast/rust-ast-full-test.cc b/gcc/rust/ast/rust-ast-full-test.cc index c18d4c4..1a447ae 100644 --- a/gcc/rust/ast/rust-ast-full-test.cc +++ b/gcc/rust/ast/rust-ast-full-test.cc @@ -3240,44 +3240,6 @@ StructExpr::as_string () const } std::string -StructExprTuple::as_string () const -{ - std::string str = StructExpr::as_string (); - - if (exprs.empty ()) - { - str += "()"; - } - else - { - auto i = exprs.begin (); - auto e = exprs.end (); - - // debug - null pointer check - if (*i == nullptr) - return "ERROR_MARK_STRING - nullptr struct expr tuple field"; - - str += '('; - for (; i != e; i++) - { - str += (*i)->as_string (); - if (e != i + 1) - str += ", "; - } - str += ')'; - } - - indent_spaces (enter); - indent_spaces (enter); - // inner attributes - str += append_attributes (inner_attrs, INNER); - indent_spaces (out); - indent_spaces (out); - - return str; -} - -std::string StructExprStruct::as_string () const { // TODO: doesn't this require data from StructExpr? @@ -5223,12 +5185,6 @@ StructExprStructBase::accept_vis (ASTVisitor &vis) } void -StructExprTuple::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void StructExprUnit::accept_vis (ASTVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index e0de54d..30e156f 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -93,7 +93,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - virtual void visit (StructExprTuple &expr) = 0; virtual void visit (StructExprUnit &expr) = 0; // virtual void visit(EnumExprField& field) = 0; virtual void visit (EnumExprFieldIdentifier &field) = 0; diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index 88e45fe..effdb23 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -1852,75 +1852,6 @@ protected: } }; -// AST node of a tuple struct creator -class StructExprTuple : public StructExpr -{ - std::vector inner_attrs; - std::vector > exprs; - - Location locus; - -public: - std::string as_string () const override; - - const std::vector &get_inner_attrs () const { return inner_attrs; } - std::vector &get_inner_attrs () { return inner_attrs; } - - StructExprTuple (PathInExpression struct_path, - std::vector > tuple_exprs, - std::vector inner_attribs, - std::vector outer_attribs, Location locus) - : StructExpr (std::move (struct_path), std::move (outer_attribs)), - inner_attrs (std::move (inner_attribs)), exprs (std::move (tuple_exprs)), - locus (locus) - {} - - // copy constructor with vector clone - StructExprTuple (StructExprTuple const &other) - : StructExpr (other), inner_attrs (other.inner_attrs), locus (other.locus) - { - exprs.reserve (other.exprs.size ()); - for (const auto &e : other.exprs) - exprs.push_back (e->clone_expr ()); - } - - // overloaded assignment operator with vector clone - StructExprTuple &operator= (StructExprTuple const &other) - { - StructExpr::operator= (other); - inner_attrs = other.inner_attrs; - locus = other.locus; - - exprs.reserve (other.exprs.size ()); - for (const auto &e : other.exprs) - exprs.push_back (e->clone_expr ()); - - return *this; - } - - // move constructors - StructExprTuple (StructExprTuple &&other) = default; - StructExprTuple &operator= (StructExprTuple &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (ASTVisitor &vis) override; - - const std::vector > &get_elems () const - { - return exprs; - } - std::vector > &get_elems () { return exprs; } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprTuple *clone_expr_without_block_impl () const override - { - return new StructExprTuple (*this); - } -}; - // AST node of a "unit" struct creator (no fields and no braces) class StructExprUnit : public StructExpr { diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h index 3daad5f..d7cc009 100644 --- a/gcc/rust/backend/rust-compile-base.h +++ b/gcc/rust/backend/rust-compile-base.h @@ -72,7 +72,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &field) {} virtual void visit (HIR::StructExprStructFields &expr) {} virtual void visit (HIR::StructExprStructBase &expr) {} - virtual void visit (HIR::StructExprTuple &expr) {} virtual void visit (HIR::StructExprUnit &expr) {} // virtual void visit(EnumExprField& field) {} virtual void visit (HIR::EnumExprFieldIdentifier &field) {} diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index e4855e0..060d41a 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -939,36 +939,6 @@ public: "cannot strip expression in this position - outer " "attributes not allowed"); } - void visit (AST::StructExprTuple &expr) override - { - // initial strip test based on outer attrs - expander.expand_cfg_attrs (expr.get_outer_attrs ()); - if (expander.fails_cfg_with_expand (expr.get_outer_attrs ())) - { - expr.mark_for_strip (); - return; - } - - /* strip test based on inner attrs - spec says these are inner - * attributes, not outer attributes of inner expr */ - expander.expand_cfg_attrs (expr.get_inner_attrs ()); - if (expander.fails_cfg_with_expand (expr.get_inner_attrs ())) - { - expr.mark_for_strip (); - return; - } - - // strip sub-exprs of path - auto &struct_name = expr.get_struct_name (); - visit (struct_name); - if (struct_name.is_marked_for_strip ()) - rust_error_at (struct_name.get_locus (), - "cannot strip path in this position"); - - /* spec says outer attributes are specifically allowed for elements - * of tuple-style struct expressions, so full stripping possible */ - expand_pointer_allow_strip (expr.get_elems ()); - } void visit (AST::StructExprUnit &expr) override { // initial strip test based on outer attrs diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index 07489f8..e4303f2 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -96,7 +96,6 @@ public: virtual void visit (AST::StructExprFieldIndexValue &field) {} virtual void visit (AST::StructExprStructFields &expr) {} virtual void visit (AST::StructExprStructBase &expr) {} - virtual void visit (AST::StructExprTuple &expr) {} virtual void visit (AST::StructExprUnit &expr) {} // virtual void visit(EnumExprField& field) {} virtual void visit (AST::EnumExprFieldIdentifier &field) {} diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index bb15d4f..d099455 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -1578,80 +1578,6 @@ protected: } }; -// HIR node of a tuple struct creator -class StructExprTuple : public StructExpr -{ - AST::AttrVec inner_attrs; - std::vector > exprs; - - Location locus; - -public: - std::string as_string () const override; - - const AST::AttrVec &get_inner_attrs () const { return inner_attrs; } - - /*inline std::vector> get_exprs() const { - return exprs; - }*/ - - StructExprTuple (Analysis::NodeMapping mappings, PathInExpression struct_path, - std::vector > tuple_exprs, - AST::AttrVec inner_attribs, AST::AttrVec outer_attribs, - Location locus) - : StructExpr (std::move (mappings), std::move (struct_path), - std::move (outer_attribs)), - inner_attrs (std::move (inner_attribs)), exprs (std::move (tuple_exprs)), - locus (locus) - {} - - // copy constructor with vector clone - StructExprTuple (StructExprTuple const &other) - : StructExpr (other), inner_attrs (other.inner_attrs), locus (other.locus) - { - exprs.reserve (other.exprs.size ()); - for (const auto &e : other.exprs) - exprs.push_back (e->clone_expr ()); - } - - // overloaded assignment operator with vector clone - StructExprTuple &operator= (StructExprTuple const &other) - { - StructExpr::operator= (other); - inner_attrs = other.inner_attrs; - locus = other.locus; - - exprs.reserve (other.exprs.size ()); - for (const auto &e : other.exprs) - exprs.push_back (e->clone_expr ()); - - return *this; - } - - // move constructors - StructExprTuple (StructExprTuple &&other) = default; - StructExprTuple &operator= (StructExprTuple &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprTuple *clone_expr_impl () const override - { - return new StructExprTuple (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprTuple *clone_expr_without_block_impl () const override - { - return new StructExprTuple (*this); - } -}; - // HIR node of a "unit" struct creator (no fields and no braces) class StructExprUnit : public StructExpr { diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h index 41ae398..11b8226 100644 --- a/gcc/rust/hir/tree/rust-hir-full-decls.h +++ b/gcc/rust/hir/tree/rust-hir-full-decls.h @@ -90,7 +90,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class StructExprTuple; class StructExprUnit; class EnumVariantExpr; class EnumExprField; diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc index ecc282a..67a1935 100644 --- a/gcc/rust/hir/tree/rust-hir-full-test.cc +++ b/gcc/rust/hir/tree/rust-hir-full-test.cc @@ -2995,59 +2995,6 @@ StructExpr::as_string () const } std::string -StructExprTuple::as_string () const -{ - std::string str = StructExpr::as_string (); - - if (exprs.empty ()) - { - str += "()"; - } - else - { - auto i = exprs.begin (); - auto e = exprs.end (); - - // debug - null pointer check - if (*i == nullptr) - { - return "ERROR_MARK_STRING - nullptr struct expr tuple field"; - } - - str += '('; - for (; i != e; i++) - { - str += (*i)->as_string (); - if (e != i + 1) - str += ", "; - } - str += ')'; - } - - indent_spaces (enter); - indent_spaces (enter); - // inner attributes - str += "\n" + indent_spaces (stay) + "inner attributes:"; - if (inner_attrs.empty ()) - { - str += "none"; - } - else - { - /* note that this does not print them with "inner attribute" syntax - - * just the body */ - for (const auto &attr : inner_attrs) - { - str += "\n" + indent_spaces (stay) + attr.as_string (); - } - } - indent_spaces (out); - indent_spaces (out); - - return str; -} - -std::string StructExprStruct::as_string () const { std::string str ("StructExprStruct (or subclass): "); @@ -3984,12 +3931,6 @@ StructExprStructBase::accept_vis (HIRVisitor &vis) } void -StructExprTuple::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void StructExprUnit::accept_vis (HIRVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h index 6372543..dffd0d5 100644 --- a/gcc/rust/hir/tree/rust-hir-visitor.h +++ b/gcc/rust/hir/tree/rust-hir-visitor.h @@ -60,7 +60,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - virtual void visit (StructExprTuple &expr) = 0; virtual void visit (StructExprUnit &expr) = 0; virtual void visit (EnumExprFieldIdentifier &field) = 0; virtual void visit (EnumExprFieldIdentifierValue &field) = 0; diff --git a/gcc/rust/lint/rust-lint-marklive-base.h b/gcc/rust/lint/rust-lint-marklive-base.h index 229643f..0354ad2 100644 --- a/gcc/rust/lint/rust-lint-marklive-base.h +++ b/gcc/rust/lint/rust-lint-marklive-base.h @@ -70,7 +70,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprTuple &) override {} virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 10e2b1b..42c938d 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -73,7 +73,6 @@ public: void visit (AST::StructExprFieldIndexValue &) {} void visit (AST::StructExprStructFields &) {} void visit (AST::StructExprStructBase &) {} - void visit (AST::StructExprTuple &) {} void visit (AST::StructExprUnit &) {} void visit (AST::EnumExprFieldIdentifier &) {} void visit (AST::EnumExprFieldIdentifierValue &) {} diff --git a/gcc/rust/typecheck/rust-hir-const-fold-base.h b/gcc/rust/typecheck/rust-hir-const-fold-base.h index 1829b85..7a6d6c5 100644 --- a/gcc/rust/typecheck/rust-hir-const-fold-base.h +++ b/gcc/rust/typecheck/rust-hir-const-fold-base.h @@ -73,7 +73,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprTuple &) override {} virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.h b/gcc/rust/typecheck/rust-hir-type-check-base.h index 3050814..162df2d 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-base.h +++ b/gcc/rust/typecheck/rust-hir-type-check-base.h @@ -74,7 +74,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprTuple &) override {} virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-util.h b/gcc/rust/typecheck/rust-hir-type-check-util.h index 8146c6e..a2f1a43 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-util.h +++ b/gcc/rust/typecheck/rust-hir-type-check-util.h @@ -68,7 +68,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprTuple &) override {} virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} -- cgit v1.1 From c998198c669c5a8e63b662c03806b0bd5398bd28 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 31 Aug 2021 21:05:18 +0200 Subject: StructExprUnit doesn't really exist A StructExprUnit is parsed as an IdentifierExpr. An IdentifierExpr, which is what we call a single segment PathInExpression. After type checking, when generating gcc generic trees, if the IdentifierExpr is a type reference (which must be a unit struct), then a unit expression is generated. Remove the AST and HIR StructExprUnit classes which are never used. --- gcc/rust/ast/rust-ast-full-decls.h | 1 - gcc/rust/ast/rust-ast-full-test.cc | 6 ----- gcc/rust/ast/rust-ast-visitor.h | 1 - gcc/rust/ast/rust-expr.h | 30 ----------------------- gcc/rust/backend/rust-compile-base.h | 1 - gcc/rust/expand/rust-macro-expand.cc | 17 ------------- gcc/rust/hir/rust-ast-lower-base.h | 1 - gcc/rust/hir/tree/rust-hir-expr.h | 35 --------------------------- gcc/rust/hir/tree/rust-hir-full-decls.h | 1 - gcc/rust/hir/tree/rust-hir-full-test.cc | 6 ----- gcc/rust/hir/tree/rust-hir-visitor.h | 1 - gcc/rust/lint/rust-lint-marklive-base.h | 1 - gcc/rust/resolve/rust-ast-resolve-base.h | 1 - gcc/rust/typecheck/rust-hir-const-fold-base.h | 1 - gcc/rust/typecheck/rust-hir-type-check-base.h | 1 - gcc/rust/typecheck/rust-hir-type-check-util.h | 1 - 16 files changed, 105 deletions(-) (limited to 'gcc') diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 205da88..09f879c 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -109,7 +109,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class StructExprUnit; class EnumVariantExpr; class EnumExprField; class EnumExprFieldIdentifier; diff --git a/gcc/rust/ast/rust-ast-full-test.cc b/gcc/rust/ast/rust-ast-full-test.cc index 1a447ae..8ffc1b2 100644 --- a/gcc/rust/ast/rust-ast-full-test.cc +++ b/gcc/rust/ast/rust-ast-full-test.cc @@ -5185,12 +5185,6 @@ StructExprStructBase::accept_vis (ASTVisitor &vis) } void -StructExprUnit::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void EnumExprFieldIdentifier::accept_vis (ASTVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 30e156f..ffd1d2d 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -93,7 +93,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - virtual void visit (StructExprUnit &expr) = 0; // virtual void visit(EnumExprField& field) = 0; virtual void visit (EnumExprFieldIdentifier &field) = 0; virtual void visit (EnumExprFieldIdentifierValue &field) = 0; diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index effdb23..a6882c7 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -1852,36 +1852,6 @@ protected: } }; -// AST node of a "unit" struct creator (no fields and no braces) -class StructExprUnit : public StructExpr -{ - Location locus; - -public: - std::string as_string () const override - { - return get_struct_name ().as_string (); - } - - StructExprUnit (PathInExpression struct_path, - std::vector outer_attribs, Location locus) - : StructExpr (std::move (struct_path), std::move (outer_attribs)), - locus (locus) - {} - - Location get_locus () const override final { return locus; } - - void accept_vis (ASTVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprUnit *clone_expr_without_block_impl () const override - { - return new StructExprUnit (*this); - } -}; - // aka EnumerationVariantExpr // Base AST node representing creation of an enum variant instance - abstract class EnumVariantExpr : public ExprWithoutBlock diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h index d7cc009..2ce7369 100644 --- a/gcc/rust/backend/rust-compile-base.h +++ b/gcc/rust/backend/rust-compile-base.h @@ -72,7 +72,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &field) {} virtual void visit (HIR::StructExprStructFields &expr) {} virtual void visit (HIR::StructExprStructBase &expr) {} - virtual void visit (HIR::StructExprUnit &expr) {} // virtual void visit(EnumExprField& field) {} virtual void visit (HIR::EnumExprFieldIdentifier &field) {} virtual void visit (HIR::EnumExprFieldIdentifierValue &field) {} diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index 060d41a..65b2ea0 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -939,23 +939,6 @@ public: "cannot strip expression in this position - outer " "attributes not allowed"); } - void visit (AST::StructExprUnit &expr) override - { - // initial strip test based on outer attrs - expander.expand_cfg_attrs (expr.get_outer_attrs ()); - if (expander.fails_cfg_with_expand (expr.get_outer_attrs ())) - { - expr.mark_for_strip (); - return; - } - - // strip sub-exprs of path - auto &struct_name = expr.get_struct_name (); - visit (struct_name); - if (struct_name.is_marked_for_strip ()) - rust_error_at (struct_name.get_locus (), - "cannot strip path in this position"); - } void visit (AST::EnumExprFieldIdentifier &) override { // as no attrs (at moment, at least), no stripping possible diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index e4303f2..8debf39 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -96,7 +96,6 @@ public: virtual void visit (AST::StructExprFieldIndexValue &field) {} virtual void visit (AST::StructExprStructFields &expr) {} virtual void visit (AST::StructExprStructBase &expr) {} - virtual void visit (AST::StructExprUnit &expr) {} // virtual void visit(EnumExprField& field) {} virtual void visit (AST::EnumExprFieldIdentifier &field) {} virtual void visit (AST::EnumExprFieldIdentifierValue &field) {} diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index d099455..b8cb754 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -1578,41 +1578,6 @@ protected: } }; -// HIR node of a "unit" struct creator (no fields and no braces) -class StructExprUnit : public StructExpr -{ - Location locus; - -public: - std::string as_string () const override { return struct_name.as_string (); } - - StructExprUnit (Analysis::NodeMapping mappings, PathInExpression struct_path, - AST::AttrVec outer_attribs, Location locus) - : StructExpr (std::move (mappings), std::move (struct_path), - std::move (outer_attribs)), - locus (locus) - {} - - Location get_locus () const override final { return locus; } - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprUnit *clone_expr_impl () const override - { - return new StructExprUnit (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - StructExprUnit *clone_expr_without_block_impl () const override - { - return new StructExprUnit (*this); - } -}; - // aka EnumerationVariantExpr // Base HIR node representing creation of an enum variant instance - abstract class EnumVariantExpr : public ExprWithoutBlock diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h index 11b8226..b72678a 100644 --- a/gcc/rust/hir/tree/rust-hir-full-decls.h +++ b/gcc/rust/hir/tree/rust-hir-full-decls.h @@ -90,7 +90,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class StructExprUnit; class EnumVariantExpr; class EnumExprField; class EnumExprFieldIdentifier; diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc index 67a1935..eda5eaf 100644 --- a/gcc/rust/hir/tree/rust-hir-full-test.cc +++ b/gcc/rust/hir/tree/rust-hir-full-test.cc @@ -3931,12 +3931,6 @@ StructExprStructBase::accept_vis (HIRVisitor &vis) } void -StructExprUnit::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void EnumExprFieldIdentifier::accept_vis (HIRVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h index dffd0d5..be9bd37 100644 --- a/gcc/rust/hir/tree/rust-hir-visitor.h +++ b/gcc/rust/hir/tree/rust-hir-visitor.h @@ -60,7 +60,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - virtual void visit (StructExprUnit &expr) = 0; virtual void visit (EnumExprFieldIdentifier &field) = 0; virtual void visit (EnumExprFieldIdentifierValue &field) = 0; virtual void visit (EnumExprFieldIndexValue &field) = 0; diff --git a/gcc/rust/lint/rust-lint-marklive-base.h b/gcc/rust/lint/rust-lint-marklive-base.h index 0354ad2..86dab26 100644 --- a/gcc/rust/lint/rust-lint-marklive-base.h +++ b/gcc/rust/lint/rust-lint-marklive-base.h @@ -70,7 +70,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 42c938d..a3aeaba 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -73,7 +73,6 @@ public: void visit (AST::StructExprFieldIndexValue &) {} void visit (AST::StructExprStructFields &) {} void visit (AST::StructExprStructBase &) {} - void visit (AST::StructExprUnit &) {} void visit (AST::EnumExprFieldIdentifier &) {} void visit (AST::EnumExprFieldIdentifierValue &) {} void visit (AST::EnumExprFieldIndexValue &) {} diff --git a/gcc/rust/typecheck/rust-hir-const-fold-base.h b/gcc/rust/typecheck/rust-hir-const-fold-base.h index 7a6d6c5..a8f2423 100644 --- a/gcc/rust/typecheck/rust-hir-const-fold-base.h +++ b/gcc/rust/typecheck/rust-hir-const-fold-base.h @@ -73,7 +73,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.h b/gcc/rust/typecheck/rust-hir-type-check-base.h index 162df2d..178d78d 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-base.h +++ b/gcc/rust/typecheck/rust-hir-type-check-base.h @@ -74,7 +74,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-util.h b/gcc/rust/typecheck/rust-hir-type-check-util.h index a2f1a43..e9f2ff4 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-util.h +++ b/gcc/rust/typecheck/rust-hir-type-check-util.h @@ -68,7 +68,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &) override {} virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::StructExprUnit &) override {} virtual void visit (HIR::EnumExprFieldIdentifier &) override {} virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} -- cgit v1.1 From 3b5c0f65ef12bd4771f69195d232588cff86b270 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 1 Sep 2021 01:51:38 +0200 Subject: Remove Enumeration Expression, EnumExpr, classes An Enumeration Expression is just like a Struct Expression. Old versions of the Rust Reference described them separately. But since they are syntactically exactly like a Struct Expression they are never actually parsed. A Struct Expression can also be used to initialize enums (and unions). Remove the AST and HIR classes EnumExprField, EnumExprFieldIdentifier, EnumExprFieldWithVal, EnumExprFieldIdentifierValue, EnumExprFieldIndexValue, EnumExprStruct, EnumExprTuple, EnumExprFieldless and EnumVariantExpr. --- gcc/rust/ast/rust-ast-full-decls.h | 9 - gcc/rust/ast/rust-ast-full-test.cc | 78 ------ gcc/rust/ast/rust-ast-visitor.h | 7 - gcc/rust/ast/rust-expr.h | 346 -------------------------- gcc/rust/backend/rust-compile-base.h | 7 - gcc/rust/expand/rust-macro-expand.cc | 89 ------- gcc/rust/hir/rust-ast-lower-base.h | 7 - gcc/rust/hir/tree/rust-hir-expr.h | 326 ------------------------ gcc/rust/hir/tree/rust-hir-full-decls.h | 9 - gcc/rust/hir/tree/rust-hir-full-test.cc | 36 --- gcc/rust/hir/tree/rust-hir-visitor.h | 6 - gcc/rust/lint/rust-lint-marklive-base.h | 7 - gcc/rust/resolve/rust-ast-resolve-base.h | 6 - gcc/rust/typecheck/rust-hir-const-fold-base.h | 7 - gcc/rust/typecheck/rust-hir-type-check-base.h | 7 - gcc/rust/typecheck/rust-hir-type-check-util.h | 7 - 16 files changed, 954 deletions(-) (limited to 'gcc') diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 09f879c..2be7e77 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -109,15 +109,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class EnumVariantExpr; -class EnumExprField; -class EnumExprFieldIdentifier; -class EnumExprFieldWithVal; -class EnumExprFieldIdentifierValue; -class EnumExprFieldIndexValue; -class EnumExprStruct; -class EnumExprTuple; -class EnumExprFieldless; class CallExpr; class MethodCallExpr; class FieldAccessExpr; diff --git a/gcc/rust/ast/rust-ast-full-test.cc b/gcc/rust/ast/rust-ast-full-test.cc index 8ffc1b2..6241710 100644 --- a/gcc/rust/ast/rust-ast-full-test.cc +++ b/gcc/rust/ast/rust-ast-full-test.cc @@ -3309,48 +3309,6 @@ StructExprStructFields::as_string () const } std::string -EnumExprStruct::as_string () const -{ - std::string str ("EnumExprStruct (or subclass): "); - - str += "\n Path: " + get_enum_variant_path ().as_string (); - - str += "\n Fields: "; - if (fields.empty ()) - { - str += "none"; - } - else - { - for (const auto &field : fields) - str += "\n " + field->as_string (); - } - - return str; -} - -std::string -EnumExprFieldWithVal::as_string () const -{ - // used to get value string - return value->as_string (); -} - -std::string -EnumExprFieldIdentifierValue::as_string () const -{ - // TODO: rewrite to work with non-linearisable exprs - return field_name + " : " + EnumExprFieldWithVal::as_string (); -} - -std::string -EnumExprFieldIndexValue::as_string () const -{ - // TODO: rewrite to work with non-linearisable exprs - return std::to_string (index) + " : " + EnumExprFieldWithVal::as_string (); -} - -std::string EnumItem::as_string () const { // outer attributes @@ -5185,42 +5143,6 @@ StructExprStructBase::accept_vis (ASTVisitor &vis) } void -EnumExprFieldIdentifier::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldIdentifierValue::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldIndexValue::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprStruct::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprTuple::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldless::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void CallExpr::accept_vis (ASTVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index ffd1d2d..15bf086 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -93,13 +93,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - // virtual void visit(EnumExprField& field) = 0; - virtual void visit (EnumExprFieldIdentifier &field) = 0; - virtual void visit (EnumExprFieldIdentifierValue &field) = 0; - virtual void visit (EnumExprFieldIndexValue &field) = 0; - virtual void visit (EnumExprStruct &expr) = 0; - virtual void visit (EnumExprTuple &expr) = 0; - virtual void visit (EnumExprFieldless &expr) = 0; virtual void visit (CallExpr &expr) = 0; virtual void visit (MethodCallExpr &expr) = 0; virtual void visit (FieldAccessExpr &expr) = 0; diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index a6882c7..f26ed98 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -1852,352 +1852,6 @@ protected: } }; -// aka EnumerationVariantExpr -// Base AST node representing creation of an enum variant instance - abstract -class EnumVariantExpr : public ExprWithoutBlock -{ - std::vector outer_attrs; - PathInExpression enum_variant_path; - -protected: - // Protected constructor for initialising enum_variant_path - EnumVariantExpr (PathInExpression path_to_enum_variant, - std::vector outer_attribs) - : outer_attrs (std::move (outer_attribs)), - enum_variant_path (std::move (path_to_enum_variant)) - {} - -public: - const PathInExpression &get_enum_variant_path () const - { - return enum_variant_path; - } - PathInExpression &get_enum_variant_path () { return enum_variant_path; } - - // Invalid if path is in error state, so base stripping on that. - void mark_for_strip () override - { - enum_variant_path = PathInExpression::create_error (); - } - bool is_marked_for_strip () const override - { - return enum_variant_path.is_error (); - } - - const std::vector &get_outer_attrs () const { return outer_attrs; } - std::vector &get_outer_attrs () { return outer_attrs; } - - void set_outer_attrs (std::vector new_attrs) override - { - outer_attrs = std::move (new_attrs); - } -}; - -/* Base AST node for a single enum expression field (in enum instance creation) - * - abstract */ -class EnumExprField -{ -public: - virtual ~EnumExprField () {} - - // Unique pointer custom clone function - std::unique_ptr clone_enum_expr_field () const - { - return std::unique_ptr (clone_enum_expr_field_impl ()); - } - - virtual std::string as_string () const = 0; - - virtual void accept_vis (ASTVisitor &vis) = 0; - - virtual Location get_locus () const = 0; - -protected: - // Clone function implementation as pure virtual method - virtual EnumExprField *clone_enum_expr_field_impl () const = 0; -}; - -// Identifier-only variant of EnumExprField AST node -class EnumExprFieldIdentifier : public EnumExprField -{ - Identifier field_name; - Location locus; - -public: - EnumExprFieldIdentifier (Identifier field_identifier, Location locus) - : field_name (std::move (field_identifier)), locus (locus) - {} - - void accept_vis (ASTVisitor &vis) override; - - std::string as_string () const override { return field_name; } - - Location get_locus () const override final { return locus; } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIdentifier *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIdentifier (*this); - } -}; - -/* Base AST node for a single enum expression field with an assigned value - - * abstract */ -class EnumExprFieldWithVal : public EnumExprField -{ - std::unique_ptr value; - -protected: - EnumExprFieldWithVal (std::unique_ptr field_value) - : value (std::move (field_value)) - {} - - // Copy constructor must clone unique_ptr value - EnumExprFieldWithVal (EnumExprFieldWithVal const &other) - : value (other.value->clone_expr ()) - {} - - // Overload assignment operator to clone - EnumExprFieldWithVal &operator= (EnumExprFieldWithVal const &other) - { - value = other.value->clone_expr (); - - return *this; - } - - // move constructors - EnumExprFieldWithVal (EnumExprFieldWithVal &&other) = default; - EnumExprFieldWithVal &operator= (EnumExprFieldWithVal &&other) = default; - -public: - std::string as_string () const override; - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_value () - { - rust_assert (value != nullptr); - return value; - } -}; - -// Identifier and value variant of EnumExprField AST node -class EnumExprFieldIdentifierValue : public EnumExprFieldWithVal -{ - Identifier field_name; - Location locus; - -public: - EnumExprFieldIdentifierValue (Identifier field_name, - std::unique_ptr field_value, - Location locus) - : EnumExprFieldWithVal (std::move (field_value)), - field_name (std::move (field_name)), locus (locus) - {} - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - Location get_locus () const override final { return locus; } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIdentifierValue *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIdentifierValue (*this); - } -}; - -// Tuple index and value variant of EnumExprField AST node -class EnumExprFieldIndexValue : public EnumExprFieldWithVal -{ - TupleIndex index; - // TODO: implement "with val" as a template with EnumExprField as type param? - - Location locus; - -public: - EnumExprFieldIndexValue (TupleIndex field_index, - std::unique_ptr field_value, Location locus) - : EnumExprFieldWithVal (std::move (field_value)), index (field_index), - locus (locus) - {} - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - Location get_locus () const override final { return locus; } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIndexValue *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIndexValue (*this); - } -}; - -// Struct-like syntax enum variant instance creation AST node -class EnumExprStruct : public EnumVariantExpr -{ - std::vector > fields; - Location locus; - -public: - std::string as_string () const override; - - EnumExprStruct (PathInExpression enum_variant_path, - std::vector > variant_fields, - std::vector outer_attribs, Location locus) - : EnumVariantExpr (std::move (enum_variant_path), - std::move (outer_attribs)), - fields (std::move (variant_fields)), locus (locus) - {} - - // copy constructor with vector clone - EnumExprStruct (EnumExprStruct const &other) - : EnumVariantExpr (other), locus (other.locus) - { - fields.reserve (other.fields.size ()); - for (const auto &e : other.fields) - fields.push_back (e->clone_enum_expr_field ()); - } - - // overloaded assignment operator with vector clone - EnumExprStruct &operator= (EnumExprStruct const &other) - { - EnumVariantExpr::operator= (other); - locus = other.locus; - - fields.reserve (other.fields.size ()); - for (const auto &e : other.fields) - fields.push_back (e->clone_enum_expr_field ()); - - return *this; - } - - // move constructors - EnumExprStruct (EnumExprStruct &&other) = default; - EnumExprStruct &operator= (EnumExprStruct &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (ASTVisitor &vis) override; - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector > &get_fields () { return fields; } - const std::vector > &get_fields () const - { - return fields; - } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprStruct *clone_expr_without_block_impl () const override - { - return new EnumExprStruct (*this); - } -}; - -// Tuple-like syntax enum variant instance creation AST node -class EnumExprTuple : public EnumVariantExpr -{ - std::vector > values; - Location locus; - -public: - std::string as_string () const override; - - EnumExprTuple (PathInExpression enum_variant_path, - std::vector > variant_values, - std::vector outer_attribs, Location locus) - : EnumVariantExpr (std::move (enum_variant_path), - std::move (outer_attribs)), - values (std::move (variant_values)), locus (locus) - {} - - // copy constructor with vector clone - EnumExprTuple (EnumExprTuple const &other) - : EnumVariantExpr (other), locus (other.locus) - { - values.reserve (other.values.size ()); - for (const auto &e : other.values) - values.push_back (e->clone_expr ()); - } - - // overloaded assignment operator with vector clone - EnumExprTuple &operator= (EnumExprTuple const &other) - { - EnumVariantExpr::operator= (other); - locus = other.locus; - - values.reserve (other.values.size ()); - for (const auto &e : other.values) - values.push_back (e->clone_expr ()); - - return *this; - } - - // move constructors - EnumExprTuple (EnumExprTuple &&other) = default; - EnumExprTuple &operator= (EnumExprTuple &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (ASTVisitor &vis) override; - - const std::vector > &get_elems () const - { - return values; - } - std::vector > &get_elems () { return values; } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprTuple *clone_expr_without_block_impl () const override - { - return new EnumExprTuple (*this); - } -}; - -// No-field enum variant instance creation AST node -class EnumExprFieldless : public EnumVariantExpr -{ - Location locus; - -public: - std::string as_string () const override - { - // return enum_variant_path.as_string(); - return get_enum_variant_path ().as_string (); - } - - EnumExprFieldless (PathInExpression enum_variant_path, - std::vector outer_attribs, Location locus) - : EnumVariantExpr (std::move (enum_variant_path), - std::move (outer_attribs)), - locus (locus) - {} - - Location get_locus () const override final { return locus; } - - void accept_vis (ASTVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldless *clone_expr_without_block_impl () const override - { - return new EnumExprFieldless (*this); - } -}; - // Forward decl for Function - used in CallExpr class Function; diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h index 2ce7369..c0cfacf 100644 --- a/gcc/rust/backend/rust-compile-base.h +++ b/gcc/rust/backend/rust-compile-base.h @@ -72,13 +72,6 @@ public: virtual void visit (HIR::StructExprFieldIndexValue &field) {} virtual void visit (HIR::StructExprStructFields &expr) {} virtual void visit (HIR::StructExprStructBase &expr) {} - // virtual void visit(EnumExprField& field) {} - virtual void visit (HIR::EnumExprFieldIdentifier &field) {} - virtual void visit (HIR::EnumExprFieldIdentifierValue &field) {} - virtual void visit (HIR::EnumExprFieldIndexValue &field) {} - virtual void visit (HIR::EnumExprStruct &expr) {} - virtual void visit (HIR::EnumExprTuple &expr) {} - virtual void visit (HIR::EnumExprFieldless &expr) {} virtual void visit (HIR::CallExpr &expr) {} virtual void visit (HIR::MethodCallExpr &expr) {} virtual void visit (HIR::FieldAccessExpr &expr) {} diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index 65b2ea0..8134f7e 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -939,95 +939,6 @@ public: "cannot strip expression in this position - outer " "attributes not allowed"); } - void visit (AST::EnumExprFieldIdentifier &) override - { - // as no attrs (at moment, at least), no stripping possible - } - void visit (AST::EnumExprFieldIdentifierValue &field) override - { - /* as no attrs possible (at moment, at least), only sub-expression - * stripping is possible */ - auto &value = field.get_value (); - value->accept_vis (*this); - if (value->is_marked_for_strip ()) - rust_error_at (value->get_locus (), - "cannot strip expression in this position - outer " - "attributes not allowed"); - } - void visit (AST::EnumExprFieldIndexValue &field) override - { - /* as no attrs possible (at moment, at least), only sub-expression - * stripping is possible */ - auto &value = field.get_value (); - value->accept_vis (*this); - if (value->is_marked_for_strip ()) - rust_error_at (value->get_locus (), - "cannot strip expression in this position - outer " - "attributes not allowed"); - } - void visit (AST::EnumExprStruct &expr) override - { - // initial strip test based on outer attrs - expander.expand_cfg_attrs (expr.get_outer_attrs ()); - if (expander.fails_cfg_with_expand (expr.get_outer_attrs ())) - { - expr.mark_for_strip (); - return; - } - - // supposedly spec doesn't allow inner attributes in enum exprs - - // strip sub-exprs of path - auto &enum_path = expr.get_enum_variant_path (); - visit (enum_path); - if (enum_path.is_marked_for_strip ()) - rust_error_at (enum_path.get_locus (), - "cannot strip path in this position"); - - /* spec does not specify whether expressions are allowed to be - * stripped at top level of expression fields, but I wouldn't think - * that they would be, so operating under the assumption that only - * sub-expressions can be stripped. */ - for (auto &field : expr.get_fields ()) - { - field->accept_vis (*this); - // shouldn't strip in this - } - } - void visit (AST::EnumExprTuple &expr) override - { - // initial strip test based on outer attrs - expander.expand_cfg_attrs (expr.get_outer_attrs ()); - if (expander.fails_cfg_with_expand (expr.get_outer_attrs ())) - { - expr.mark_for_strip (); - return; - } - - // supposedly spec doesn't allow inner attributes in enum exprs - - // strip sub-exprs of path - auto &enum_path = expr.get_enum_variant_path (); - visit (enum_path); - if (enum_path.is_marked_for_strip ()) - rust_error_at (enum_path.get_locus (), - "cannot strip path in this position"); - - /* spec says outer attributes are specifically allowed for elements - * of tuple-style enum expressions, so full stripping possible */ - expand_pointer_allow_strip (expr.get_elems ()); - } - void visit (AST::EnumExprFieldless &expr) override - { - // can't be stripped as no attrs - - // strip sub-exprs of path - auto &enum_path = expr.get_enum_variant_path (); - visit (enum_path); - if (enum_path.is_marked_for_strip ()) - rust_error_at (enum_path.get_locus (), - "cannot strip path in this position"); - } void visit (AST::CallExpr &expr) override { // initial strip test based on outer attrs diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index 8debf39..d445599 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -96,13 +96,6 @@ public: virtual void visit (AST::StructExprFieldIndexValue &field) {} virtual void visit (AST::StructExprStructFields &expr) {} virtual void visit (AST::StructExprStructBase &expr) {} - // virtual void visit(EnumExprField& field) {} - virtual void visit (AST::EnumExprFieldIdentifier &field) {} - virtual void visit (AST::EnumExprFieldIdentifierValue &field) {} - virtual void visit (AST::EnumExprFieldIndexValue &field) {} - virtual void visit (AST::EnumExprStruct &expr) {} - virtual void visit (AST::EnumExprTuple &expr) {} - virtual void visit (AST::EnumExprFieldless &expr) {} virtual void visit (AST::CallExpr &expr) {} virtual void visit (AST::MethodCallExpr &expr) {} virtual void visit (AST::FieldAccessExpr &expr) {} diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index b8cb754..05bc1f9 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -1578,332 +1578,6 @@ protected: } }; -// aka EnumerationVariantExpr -// Base HIR node representing creation of an enum variant instance - abstract -class EnumVariantExpr : public ExprWithoutBlock -{ - PathInExpression enum_variant_path; - -protected: - // Protected constructor for initialising enum_variant_path - EnumVariantExpr (Analysis::NodeMapping mappings, - PathInExpression path_to_enum_variant, - AST::AttrVec outer_attribs) - : ExprWithoutBlock (std::move (mappings), std::move (outer_attribs)), - enum_variant_path (std::move (path_to_enum_variant)) - {} - -public: - // TODO: maybe remove and have string version gotten here directly - PathInExpression get_enum_variant_path () const { return enum_variant_path; } -}; - -/* Base HIR node for a single enum expression field (in enum instance creation) - * - abstract */ -class EnumExprField -{ -public: - virtual ~EnumExprField () {} - - // Unique pointer custom clone function - std::unique_ptr clone_enum_expr_field () const - { - return std::unique_ptr (clone_enum_expr_field_impl ()); - } - - virtual void accept_vis (HIRVisitor &vis) = 0; - -protected: - // Clone function implementation as pure virtual method - virtual EnumExprField *clone_enum_expr_field_impl () const = 0; -}; - -// Identifier-only variant of EnumExprField HIR node -class EnumExprFieldIdentifier : public EnumExprField -{ - Identifier field_name; - - // TODO: should this store location data? - -public: - EnumExprFieldIdentifier (Identifier field_identifier) - : field_name (std::move (field_identifier)) - {} - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIdentifier *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIdentifier (*this); - } -}; - -/* Base HIR node for a single enum expression field with an assigned value - - * abstract */ -class EnumExprFieldWithVal : public EnumExprField -{ - std::unique_ptr value; - - // TODO: should this store location data? - -protected: - EnumExprFieldWithVal (std::unique_ptr field_value) - : value (std::move (field_value)) - {} - - // Copy constructor must clone unique_ptr value - EnumExprFieldWithVal (EnumExprFieldWithVal const &other) - : value (other.value->clone_expr ()) - {} - - // Overload assignment operator to clone - EnumExprFieldWithVal &operator= (EnumExprFieldWithVal const &other) - { - value = other.value->clone_expr (); - - return *this; - } - - // move constructors - EnumExprFieldWithVal (EnumExprFieldWithVal &&other) = default; - EnumExprFieldWithVal &operator= (EnumExprFieldWithVal &&other) = default; -}; - -// Identifier and value variant of EnumExprField HIR node -class EnumExprFieldIdentifierValue : public EnumExprFieldWithVal -{ - Identifier field_name; - - // TODO: should this store location data? - -public: - EnumExprFieldIdentifierValue (Identifier field_name, - std::unique_ptr field_value) - : EnumExprFieldWithVal (std::move (field_value)), - field_name (std::move (field_name)) - {} - - // copy constructor, destructor, and assignment operator should not need - // defining - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIdentifierValue *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIdentifierValue (*this); - } -}; - -// Tuple index and value variant of EnumExprField HIR node -class EnumExprFieldIndexValue : public EnumExprFieldWithVal -{ - TupleIndex index; - // TODO: implement "with val" as a template with EnumExprField as type param? - - // TODO: should this store location data? - -public: - EnumExprFieldIndexValue (TupleIndex field_index, - std::unique_ptr field_value) - : EnumExprFieldWithVal (std::move (field_value)), index (field_index) - {} - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldIndexValue *clone_enum_expr_field_impl () const override - { - return new EnumExprFieldIndexValue (*this); - } -}; - -// Struct-like syntax enum variant instance creation HIR node -class EnumExprStruct : public EnumVariantExpr -{ - // std::vector fields; - std::vector > fields; - - Location locus; - -public: - std::string as_string () const override; - - /*inline std::vector> get_fields() const - { return fields; - }*/ - - EnumExprStruct (Analysis::NodeMapping mappings, - PathInExpression enum_variant_path, - std::vector > variant_fields, - AST::AttrVec outer_attribs, Location locus) - : EnumVariantExpr (std::move (mappings), std::move (enum_variant_path), - std::move (outer_attribs)), - fields (std::move (variant_fields)), locus (locus) - {} - - // copy constructor with vector clone - EnumExprStruct (EnumExprStruct const &other) - : EnumVariantExpr (other), locus (other.locus) - { - fields.reserve (other.fields.size ()); - for (const auto &e : other.fields) - fields.push_back (e->clone_enum_expr_field ()); - } - - // overloaded assignment operator with vector clone - EnumExprStruct &operator= (EnumExprStruct const &other) - { - EnumVariantExpr::operator= (other); - locus = other.locus; - - fields.reserve (other.fields.size ()); - for (const auto &e : other.fields) - fields.push_back (e->clone_enum_expr_field ()); - - return *this; - } - - // move constructors - EnumExprStruct (EnumExprStruct &&other) = default; - EnumExprStruct &operator= (EnumExprStruct &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprStruct *clone_expr_impl () const override - { - return new EnumExprStruct (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprStruct *clone_expr_without_block_impl () const override - { - return new EnumExprStruct (*this); - } -}; - -// Tuple-like syntax enum variant instance creation HIR node -class EnumExprTuple : public EnumVariantExpr -{ - std::vector > values; - - Location locus; - -public: - std::string as_string () const override; - - /*inline std::vector> get_values() const { - return values; - }*/ - - EnumExprTuple (Analysis::NodeMapping mappings, - PathInExpression enum_variant_path, - std::vector > variant_values, - AST::AttrVec outer_attribs, Location locus) - : EnumVariantExpr (std::move (mappings), std::move (enum_variant_path), - std::move (outer_attribs)), - values (std::move (variant_values)), locus (locus) - {} - - // copy constructor with vector clone - EnumExprTuple (EnumExprTuple const &other) - : EnumVariantExpr (other), locus (other.locus) - { - values.reserve (other.values.size ()); - for (const auto &e : other.values) - values.push_back (e->clone_expr ()); - } - - // overloaded assignment operator with vector clone - EnumExprTuple &operator= (EnumExprTuple const &other) - { - EnumVariantExpr::operator= (other); - locus = other.locus; - - values.reserve (other.values.size ()); - for (const auto &e : other.values) - values.push_back (e->clone_expr ()); - - return *this; - } - - // move constructors - EnumExprTuple (EnumExprTuple &&other) = default; - EnumExprTuple &operator= (EnumExprTuple &&other) = default; - - Location get_locus () const override final { return locus; } - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprTuple *clone_expr_impl () const override - { - return new EnumExprTuple (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprTuple *clone_expr_without_block_impl () const override - { - return new EnumExprTuple (*this); - } -}; - -// No-field enum variant instance creation HIR node -class EnumExprFieldless : public EnumVariantExpr -{ - Location locus; - -public: - std::string as_string () const override - { - // return enum_variant_path.as_string(); - return get_enum_variant_path ().as_string (); - } - - EnumExprFieldless (Analysis::NodeMapping mappings, - PathInExpression enum_variant_path, - AST::AttrVec outer_attribs, Location locus) - : EnumVariantExpr (std::move (mappings), std::move (enum_variant_path), - std::move (outer_attribs)), - locus (locus) - {} - - Location get_locus () const override final { return locus; } - - void accept_vis (HIRVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldless *clone_expr_impl () const override - { - return new EnumExprFieldless (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - EnumExprFieldless *clone_expr_without_block_impl () const override - { - return new EnumExprFieldless (*this); - } -}; - // Forward decl for Function - used in CallExpr class Function; diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h index b72678a..ffa0812 100644 --- a/gcc/rust/hir/tree/rust-hir-full-decls.h +++ b/gcc/rust/hir/tree/rust-hir-full-decls.h @@ -90,15 +90,6 @@ class StructExprFieldIdentifierValue; class StructExprFieldIndexValue; class StructExprStructFields; class StructExprStructBase; -class EnumVariantExpr; -class EnumExprField; -class EnumExprFieldIdentifier; -class EnumExprFieldWithVal; -class EnumExprFieldIdentifierValue; -class EnumExprFieldIndexValue; -class EnumExprStruct; -class EnumExprTuple; -class EnumExprFieldless; class CallExpr; class MethodCallExpr; class FieldAccessExpr; diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc index eda5eaf..f328ae6 100644 --- a/gcc/rust/hir/tree/rust-hir-full-test.cc +++ b/gcc/rust/hir/tree/rust-hir-full-test.cc @@ -3931,42 +3931,6 @@ StructExprStructBase::accept_vis (HIRVisitor &vis) } void -EnumExprFieldIdentifier::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldIdentifierValue::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldIndexValue::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprStruct::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprTuple::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void -EnumExprFieldless::accept_vis (HIRVisitor &vis) -{ - vis.visit (*this); -} - -void CallExpr::accept_vis (HIRVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h index be9bd37..d5fbff9 100644 --- a/gcc/rust/hir/tree/rust-hir-visitor.h +++ b/gcc/rust/hir/tree/rust-hir-visitor.h @@ -60,12 +60,6 @@ public: virtual void visit (StructExprFieldIndexValue &field) = 0; virtual void visit (StructExprStructFields &expr) = 0; virtual void visit (StructExprStructBase &expr) = 0; - virtual void visit (EnumExprFieldIdentifier &field) = 0; - virtual void visit (EnumExprFieldIdentifierValue &field) = 0; - virtual void visit (EnumExprFieldIndexValue &field) = 0; - virtual void visit (EnumExprStruct &expr) = 0; - virtual void visit (EnumExprTuple &expr) = 0; - virtual void visit (EnumExprFieldless &expr) = 0; virtual void visit (CallExpr &expr) = 0; virtual void visit (MethodCallExpr &expr) = 0; virtual void visit (FieldAccessExpr &expr) = 0; diff --git a/gcc/rust/lint/rust-lint-marklive-base.h b/gcc/rust/lint/rust-lint-marklive-base.h index 86dab26..e7b0194 100644 --- a/gcc/rust/lint/rust-lint-marklive-base.h +++ b/gcc/rust/lint/rust-lint-marklive-base.h @@ -71,13 +71,6 @@ public: virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::EnumExprFieldIdentifier &) override {} - virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} - - virtual void visit (HIR::EnumExprFieldIndexValue &) override {} - virtual void visit (HIR::EnumExprStruct &) override {} - virtual void visit (HIR::EnumExprTuple &) override {} - virtual void visit (HIR::EnumExprFieldless &) override {} virtual void visit (HIR::CallExpr &) override {} virtual void visit (HIR::MethodCallExpr &) override {} virtual void visit (HIR::FieldAccessExpr &) override {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index a3aeaba..025052d 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -73,12 +73,6 @@ public: void visit (AST::StructExprFieldIndexValue &) {} void visit (AST::StructExprStructFields &) {} void visit (AST::StructExprStructBase &) {} - void visit (AST::EnumExprFieldIdentifier &) {} - void visit (AST::EnumExprFieldIdentifierValue &) {} - void visit (AST::EnumExprFieldIndexValue &) {} - void visit (AST::EnumExprStruct &) {} - void visit (AST::EnumExprTuple &) {} - void visit (AST::EnumExprFieldless &) {} void visit (AST::CallExpr &) {} void visit (AST::MethodCallExpr &) {} void visit (AST::FieldAccessExpr &) {} diff --git a/gcc/rust/typecheck/rust-hir-const-fold-base.h b/gcc/rust/typecheck/rust-hir-const-fold-base.h index a8f2423..0c23ec8 100644 --- a/gcc/rust/typecheck/rust-hir-const-fold-base.h +++ b/gcc/rust/typecheck/rust-hir-const-fold-base.h @@ -74,13 +74,6 @@ public: virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::EnumExprFieldIdentifier &) override {} - virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} - - virtual void visit (HIR::EnumExprFieldIndexValue &) override {} - virtual void visit (HIR::EnumExprStruct &) override {} - virtual void visit (HIR::EnumExprTuple &) override {} - virtual void visit (HIR::EnumExprFieldless &) override {} virtual void visit (HIR::CallExpr &) override {} virtual void visit (HIR::MethodCallExpr &) override {} virtual void visit (HIR::FieldAccessExpr &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.h b/gcc/rust/typecheck/rust-hir-type-check-base.h index 178d78d..26fb506 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-base.h +++ b/gcc/rust/typecheck/rust-hir-type-check-base.h @@ -75,13 +75,6 @@ public: virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::EnumExprFieldIdentifier &) override {} - virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} - - virtual void visit (HIR::EnumExprFieldIndexValue &) override {} - virtual void visit (HIR::EnumExprStruct &) override {} - virtual void visit (HIR::EnumExprTuple &) override {} - virtual void visit (HIR::EnumExprFieldless &) override {} virtual void visit (HIR::CallExpr &) override {} virtual void visit (HIR::MethodCallExpr &) override {} virtual void visit (HIR::FieldAccessExpr &) override {} diff --git a/gcc/rust/typecheck/rust-hir-type-check-util.h b/gcc/rust/typecheck/rust-hir-type-check-util.h index e9f2ff4..78d35a6 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-util.h +++ b/gcc/rust/typecheck/rust-hir-type-check-util.h @@ -69,13 +69,6 @@ public: virtual void visit (HIR::StructExprStructFields &) override {} virtual void visit (HIR::StructExprStructBase &) override {} - virtual void visit (HIR::EnumExprFieldIdentifier &) override {} - virtual void visit (HIR::EnumExprFieldIdentifierValue &) override {} - - virtual void visit (HIR::EnumExprFieldIndexValue &) override {} - virtual void visit (HIR::EnumExprStruct &) override {} - virtual void visit (HIR::EnumExprTuple &) override {} - virtual void visit (HIR::EnumExprFieldless &) override {} virtual void visit (HIR::CallExpr &) override {} virtual void visit (HIR::MethodCallExpr &) override {} virtual void visit (HIR::FieldAccessExpr &) override {} -- cgit v1.1