aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/tree
diff options
context:
space:
mode:
authorjjasmine <tanghocle456@gmail.com>2024-06-23 19:47:17 -0700
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-19 15:32:05 +0100
commit0a03b4862107763bbce731d4f94373f4fd30a38c (patch)
tree14f5b2998afaab595add33a2efe9eb650382a222 /gcc/rust/hir/tree
parent12703f67ffd72b3842e99cf2b5558aafa2444727 (diff)
downloadgcc-0a03b4862107763bbce731d4f94373f4fd30a38c.zip
gcc-0a03b4862107763bbce731d4f94373f4fd30a38c.tar.gz
gcc-0a03b4862107763bbce731d4f94373f4fd30a38c.tar.bz2
gccrs: Setting up interfaces for codegen
gcc/rust/ChangeLog: * backend/rust-compile-expr.cc (CompileExpr::visit): Setting up interfaces for codegen * hir/tree/rust-hir-expr.h: Likewise.
Diffstat (limited to 'gcc/rust/hir/tree')
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index 7b2e32e..ee46980 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -25,6 +25,7 @@
#include "rust-hir-path.h"
#include "rust-operators.h"
#include "rust-expr.h"
+#include "tree.h"
namespace Rust {
namespace HIR {
@@ -4163,8 +4164,33 @@ public:
{}
+ tree construct_string_tree ()
+ {
+ if (template_strs.empty ())
+ return build_string (1, "");
+ // Initialize to NULL_TREE
+ tree string_chain = NULL_TREE;
+
+ for (const auto &template_str : template_strs)
+ {
+ auto str = template_str.symbol;
+ auto string_tree = build_string (str.size () + 1, str.c_str ());
+
+ string_chain = tree_cons (NULL_TREE, string_tree, string_chain);
+ }
+ // Reverse the chain before returning
+ return nreverse (string_chain);
+ }
+
+ tree construct_clobber_tree () { return NULL_TREE; }
+ tree construct_label_tree () { return NULL_TREE; }
+ tree construct_inputs () { return NULL_TREE; }
+ tree construct_outputs () { return NULL_TREE; }
// This function checks if the assembly macro is "simple" or not, according to
// the tree defition (tree.h) of the
+
+ // SIMPLE indicates whether there was anything at all after the
+ // string in the asm expression
bool is_simple ()
{
return operands.size () == 0 && clobber_abi.size () == 0