Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions gcc/rust/ast/rust-ast-collector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -840,13 +840,13 @@ TokenCollector::visit (MetaItemLitExpr &item)
}

void
TokenCollector::visit (MetaItemPathLit &item)
TokenCollector::visit (MetaItemPathExpr &item)
{
auto path = item.get_path ();
auto lit = item.get_literal ();
auto &path = item.get_path ();
auto &expr = item.get_expr ();
visit (path);
push (Rust::Token::make (COLON, item.get_locus ()));
visit (lit);
push (Rust::Token::make (EQUAL, item.get_locus ()));
visit (expr);
}

void
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/ast/rust-ast-collector.h
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ class TokenCollector : public ASTVisitor
void visit (AttrInputLiteral &attr_input);
void visit (AttrInputMacro &attr_input);
void visit (MetaItemLitExpr &meta_item);
void visit (MetaItemPathLit &meta_item);
void visit (MetaItemPathExpr &meta_item);
void visit (BorrowExpr &expr);
void visit (DereferenceExpr &expr);
void visit (ErrorPropagationExpr &expr);
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/ast/rust-ast-full-decls.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class LiteralExpr;
class AttrInputLiteral;
class AttrInputMacro;
class MetaItemLitExpr;
class MetaItemPathLit;
class MetaItemPathExpr;
class OperatorExpr;
class BorrowExpr;
class DereferenceExpr;
Expand Down
4 changes: 2 additions & 2 deletions gcc/rust/ast/rust-ast-visitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,10 @@ DefaultASTVisitor::visit (AST::SimplePath &path)
}

void
DefaultASTVisitor::visit (AST::MetaItemPathLit &meta_item)
DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
{
visit (meta_item.get_path ());
visit (meta_item.get_literal ());
visit (meta_item.get_expr ());
}

void
Expand Down
4 changes: 2 additions & 2 deletions gcc/rust/ast/rust-ast-visitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class ASTVisitor
virtual void visit (AttrInputLiteral &attr_input) = 0;
virtual void visit (AttrInputMacro &attr_input) = 0;
virtual void visit (MetaItemLitExpr &meta_item) = 0;
virtual void visit (MetaItemPathLit &meta_item) = 0;
virtual void visit (MetaItemPathExpr &meta_item) = 0;
virtual void visit (BorrowExpr &expr) = 0;
virtual void visit (DereferenceExpr &expr) = 0;
virtual void visit (ErrorPropagationExpr &expr) = 0;
Expand Down Expand Up @@ -270,7 +270,7 @@ class DefaultASTVisitor : public ASTVisitor
virtual void visit (AST::AttrInputLiteral &attr_input) override;
virtual void visit (AST::AttrInputMacro &attr_input) override;
virtual void visit (AST::MetaItemLitExpr &meta_item) override;
virtual void visit (AST::MetaItemPathLit &meta_item) override;
virtual void visit (AST::MetaItemPathExpr &meta_item) override;
virtual void visit (AST::BorrowExpr &expr) override;
virtual void visit (AST::DereferenceExpr &expr) override;
virtual void visit (AST::ErrorPropagationExpr &expr) override;
Expand Down
28 changes: 12 additions & 16 deletions gcc/rust/ast/rust-ast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ Attribute::get_traits_to_derive ()
break;
case AST::MetaItem::ItemKind::ListPaths:
case AST::MetaItem::ItemKind::NameValueStr:
case AST::MetaItem::ItemKind::PathLit:
case AST::MetaItem::ItemKind::PathExpr:
case AST::MetaItem::ItemKind::Seq:
case AST::MetaItem::ItemKind::ListNameValueStr:
default:
Expand Down Expand Up @@ -3712,20 +3712,12 @@ AttributeParser::parse_path_meta_item ()
{
skip_token ();

location_t locus = peek_token ()->get_locus ();
Literal lit = parse_literal ();
if (lit.is_error ())
{
rust_error_at (peek_token ()->get_locus (),
"failed to parse literal in attribute");
return nullptr;
}
LiteralExpr expr (std::move (lit), {}, locus);
std::unique_ptr<Expr> expr = parser->parse_expr ();
// stream_pos++;
/* shouldn't be required anymore due to parsing literal actually
* skipping the token */
return std::unique_ptr<MetaItemPathLit> (
new MetaItemPathLit (std::move (path), std::move (expr)));
return std::unique_ptr<MetaItemPathExpr> (
new MetaItemPathExpr (std::move (path), std::move (expr)));
}
case COMMA:
// just simple path
Expand Down Expand Up @@ -4144,10 +4136,12 @@ MetaNameValueStr::check_cfg_predicate (const Session &session) const
}

bool
MetaItemPathLit::check_cfg_predicate (const Session &session) const
MetaItemPathExpr::check_cfg_predicate (const Session &session) const
{
// FIXME: Accept path expressions
rust_assert (expr->is_literal ());
return session.options.target_data.has_key_value_pair (path.as_string (),
lit.as_string ());
expr->as_string ());
}

std::vector<std::unique_ptr<Token>>
Expand Down Expand Up @@ -4235,8 +4229,10 @@ MetaListNameValueStr::to_attribute () const
}

Attribute
MetaItemPathLit::to_attribute () const
MetaItemPathExpr::to_attribute () const
{
rust_assert (expr->is_literal ());
auto &lit = static_cast<LiteralExpr &> (*expr);
return Attribute (path, std::unique_ptr<AttrInputLiteral> (
new AttrInputLiteral (lit)));
}
Expand Down Expand Up @@ -4406,7 +4402,7 @@ MetaItemLitExpr::accept_vis (ASTVisitor &vis)
}

void
MetaItemPathLit::accept_vis (ASTVisitor &vis)
MetaItemPathExpr::accept_vis (ASTVisitor &vis)
{
vis.visit (*this);
}
Expand Down
4 changes: 2 additions & 2 deletions gcc/rust/ast/rust-ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -1073,7 +1073,7 @@ class MetaItem : public MetaItemInner
Path,
Word,
NameValueStr,
PathLit,
PathExpr,
Seq,
ListPaths,
ListNameValueStr,
Expand All @@ -1091,7 +1091,7 @@ class MetaItem : public MetaItemInner
class MetaItemLitExpr;

// Forward decl - defined in rust-expr.h
class MetaItemPathLit;
class MetaItemPathExpr;

// Forward decl - defined in rust-macro.h
class MetaItemPath;
Expand Down
40 changes: 27 additions & 13 deletions gcc/rust/ast/rust-expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,36 +249,50 @@ class MetaItemLitExpr : public MetaItemInner
}
};

// more generic meta item "path = lit" form
class MetaItemPathLit : public MetaItem
// more generic meta item "path = expr" form
class MetaItemPathExpr : public MetaItem
{
SimplePath path;
LiteralExpr lit;
std::unique_ptr<Expr> expr;

public:
MetaItemPathLit (SimplePath path, LiteralExpr lit_expr)
: path (std::move (path)), lit (std::move (lit_expr))
MetaItemPathExpr (SimplePath path, std::unique_ptr<Expr> expr)
: path (std::move (path)), expr (std::move (expr))
{}

MetaItemPathExpr (const MetaItemPathExpr &other)
: MetaItem (other), path (other.path), expr (other.expr->clone_expr ())
{}

MetaItemPathExpr (MetaItemPathExpr &&) = default;

MetaItemPathExpr &operator= (MetaItemPathExpr &&) = default;

MetaItemPathExpr operator= (const MetaItemPathExpr &other)
{
MetaItem::operator= (other);
path = other.path;
expr = other.expr->clone_expr ();
return *this;
}

SimplePath get_path () const { return path; }

SimplePath &get_path () { return path; }

LiteralExpr get_literal () const { return lit; }

LiteralExpr &get_literal () { return lit; }
Expr &get_expr () { return *expr; }

std::string as_string () const override
{
return path.as_string () + " = " + lit.as_string ();
return path.as_string () + " = " + expr->as_string ();
}

MetaItem::ItemKind get_item_kind () const override
{
return MetaItem::ItemKind::PathLit;
return MetaItem::ItemKind::PathExpr;
}

// There are two Locations in MetaItemPathLit (path and lit_expr),
// There are two Locations in MetaItemPathExpr (path and expr),
// we have no idea use which of them, just simply return UNKNOWN_LOCATION
// now.
// Maybe we will figure out when we really need the location in the future.
Expand All @@ -294,9 +308,9 @@ class MetaItemPathLit : public MetaItem

protected:
// Use covariance to implement clone function as returning this type
MetaItemPathLit *clone_meta_item_inner_impl () const override
MetaItemPathExpr *clone_meta_item_inner_impl () const override
{
return new MetaItemPathLit (*this);
return new MetaItemPathExpr (*this);
}
};

Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/expand/rust-derive.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class DeriveVisitor : public AST::ASTVisitor
virtual void visit (LiteralExpr &expr) override final{};
virtual void visit (AttrInputLiteral &attr_input) override final{};
virtual void visit (MetaItemLitExpr &meta_item) override final{};
virtual void visit (MetaItemPathLit &meta_item) override final{};
virtual void visit (MetaItemPathExpr &meta_item) override final{};
virtual void visit (BorrowExpr &expr) override final{};
virtual void visit (DereferenceExpr &expr) override final{};
virtual void visit (ErrorPropagationExpr &expr) override final{};
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/expand/rust-expand-visitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ ExpandVisitor::visit (AST::MetaItemLitExpr &)
{}

void
ExpandVisitor::visit (AST::MetaItemPathLit &)
ExpandVisitor::visit (AST::MetaItemPathExpr &)
{}

void
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/expand/rust-expand-visitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class ExpandVisitor : public AST::DefaultASTVisitor
void visit (AST::AttrInputLiteral &) override;
void visit (AST::AttrInputMacro &) override;
void visit (AST::MetaItemLitExpr &) override;
void visit (AST::MetaItemPathLit &) override;
void visit (AST::MetaItemPathExpr &) override;
void visit (AST::ErrorPropagationExpr &expr) override;
void visit (AST::ArithmeticOrLogicalExpr &expr) override;
void visit (AST::ComparisonExpr &expr) override;
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/hir/rust-ast-lower-base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ void
ASTLoweringBase::visit (AST::MetaItemLitExpr &)
{}
void
ASTLoweringBase::visit (AST::MetaItemPathLit &)
ASTLoweringBase::visit (AST::MetaItemPathExpr &)
{}
void
ASTLoweringBase::visit (AST::BorrowExpr &)
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/hir/rust-ast-lower-base.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class ASTLoweringBase : public AST::ASTVisitor
virtual void visit (AST::AttrInputLiteral &attr_input) override;
virtual void visit (AST::AttrInputMacro &attr_input) override;
virtual void visit (AST::MetaItemLitExpr &meta_item) override;
virtual void visit (AST::MetaItemPathLit &meta_item) override;
virtual void visit (AST::MetaItemPathExpr &meta_item) override;
virtual void visit (AST::BorrowExpr &expr) override;
virtual void visit (AST::DereferenceExpr &expr) override;
virtual void visit (AST::NegationExpr &expr) override;
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/resolve/rust-ast-resolve-base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ ResolverBase::visit (AST::MetaItemLitExpr &)
{}

void
ResolverBase::visit (AST::MetaItemPathLit &)
ResolverBase::visit (AST::MetaItemPathExpr &)
{}

void
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/resolve/rust-ast-resolve-base.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class ResolverBase : public AST::ASTVisitor
void visit (AST::AttrInputLiteral &);
void visit (AST::AttrInputMacro &);
void visit (AST::MetaItemLitExpr &);
void visit (AST::MetaItemPathLit &);
void visit (AST::MetaItemPathExpr &);
void visit (AST::BorrowExpr &);
void visit (AST::DereferenceExpr &);
void visit (AST::ErrorPropagationExpr &);
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/resolve/rust-early-name-resolver.cc
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ EarlyNameResolver::visit (AST::MetaItemLitExpr &)
{}

void
EarlyNameResolver::visit (AST::MetaItemPathLit &)
EarlyNameResolver::visit (AST::MetaItemPathExpr &)
{}

void
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/resolve/rust-early-name-resolver.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class EarlyNameResolver : public AST::DefaultASTVisitor
virtual void visit (AST::AttrInputLiteral &attr_input);
virtual void visit (AST::AttrInputMacro &attr_input);
virtual void visit (AST::MetaItemLitExpr &meta_item);
virtual void visit (AST::MetaItemPathLit &meta_item);
virtual void visit (AST::MetaItemPathExpr &meta_item);
virtual void visit (AST::StructExprStruct &expr);
virtual void visit (AST::StructExprFieldIdentifier &field);
virtual void visit (AST::StructExprStructBase &expr);
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/util/rust-attributes.cc
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ AttributeChecker::visit (AST::MetaItemLitExpr &)
{}

void
AttributeChecker::visit (AST::MetaItemPathLit &)
AttributeChecker::visit (AST::MetaItemPathExpr &)
{}

void
Expand Down
2 changes: 1 addition & 1 deletion gcc/rust/util/rust-attributes.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class AttributeChecker : public AST::DefaultASTVisitor
void visit (AST::AttrInputLiteral &attr_input) override;
void visit (AST::AttrInputMacro &attr_input) override;
void visit (AST::MetaItemLitExpr &meta_item) override;
void visit (AST::MetaItemPathLit &meta_item) override;
void visit (AST::MetaItemPathExpr &meta_item) override;
void visit (AST::BorrowExpr &expr) override;
void visit (AST::DereferenceExpr &expr) override;
void visit (AST::ErrorPropagationExpr &expr) override;
Expand Down
Loading