From: Arthur Cohen Date: Fri, 3 Jan 2025 14:27:38 +0000 (+0000) Subject: gccrs: ast-builder: Add new methods for building structs X-Git-Tag: basepoints/gcc-16~916 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8dedd0d11ddb3c999530edf6c810b1aa7ca7378b;p=thirdparty%2Fgcc.git gccrs: ast-builder: Add new methods for building structs gcc/rust/ChangeLog: * ast/rust-ast-builder.cc: Add new methods for constructing struct exprs. * ast/rust-ast-builder.h: Mention how to build tuple expressions. --- diff --git a/gcc/rust/ast/rust-ast-builder.cc b/gcc/rust/ast/rust-ast-builder.cc index fe80924fece..47044df9171 100644 --- a/gcc/rust/ast/rust-ast-builder.cc +++ b/gcc/rust/ast/rust-ast-builder.cc @@ -24,6 +24,7 @@ #include "rust-path.h" #include "rust-item.h" #include "rust-path.h" +#include "rust-system.h" #include "rust-token.h" namespace Rust { @@ -261,10 +262,17 @@ std::unique_ptr Builder::struct_expr ( std::string struct_name, std::vector> &&fields) const +{ + return struct_expr (path_in_expression ({struct_name}), std::move (fields)); +} + +std::unique_ptr +Builder::struct_expr ( + PathInExpression struct_name, + std::vector> &&fields) const { return std::unique_ptr ( - new StructExprStructFields (path_in_expression ({struct_name}), - std::move (fields), loc)); + new StructExprStructFields (struct_name, std::move (fields), loc)); } std::unique_ptr diff --git a/gcc/rust/ast/rust-ast-builder.h b/gcc/rust/ast/rust-ast-builder.h index 624cd715181..e5bae6ed6e9 100644 --- a/gcc/rust/ast/rust-ast-builder.h +++ b/gcc/rust/ast/rust-ast-builder.h @@ -160,10 +160,15 @@ public: /** * Create an expression for struct instantiation with fields (`S { a, b: c }`) + * Tuple expressions are call expressions and can thus be constructed with + * `call` */ std::unique_ptr struct_expr (std::string struct_name, std::vector> &&fields) const; + std::unique_ptr + struct_expr (PathInExpression struct_name, + std::vector> &&fields) const; /* Create a field expression for struct instantiation (`field_name: value`) */ std::unique_ptr