void
CompileExpr::visit (HIR::InlineAsm &expr)
{
- tree test_string = build_string(expr.template_strs[0].symbol.size() + 1, expr.template_strs[0].symbol.c_str());
- debug(test_string);
+ // translated = build_asm_expr()(expr.get_locus(),
+ // expr.construct_string_tree(), expr.construct_outputs(),
+ // expr.construct_inputs(), expr.construct_clobber_tree(),
+ // expr.construct_label_tree(), expr.is_simple(), expr.is_inline_asm());
}
void
#include "rust-hir-path.h"
#include "rust-operators.h"
#include "rust-expr.h"
+#include "tree.h"
namespace Rust {
namespace HIR {
{}
+ 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