aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-01-13 21:29:06 +0000
committerPhilip Herron <philip.herron@embecosm.com>2022-01-13 21:29:22 +0000
commit06c2a74f557ec98896c9f71ba666bd969c4735d2 (patch)
tree0d3cf0acf66467261c08165ec9339693374bb513 /gcc
parentf51d8fd538681cd66791ac6e93d094651cde174d (diff)
downloadgcc-06c2a74f557ec98896c9f71ba666bd969c4735d2.zip
gcc-06c2a74f557ec98896c9f71ba666bd969c4735d2.tar.gz
gcc-06c2a74f557ec98896c9f71ba666bd969c4735d2.tar.bz2
Add HIR lowering for FunctionQualifiers
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/ast/rust-item.h7
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.h3
-rw-r--r--gcc/rust/hir/rust-ast-lower-item.h5
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc28
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h6
5 files changed, 44 insertions, 5 deletions
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index a18a8e6..ad503cf 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -518,6 +518,11 @@ public:
}
std::string as_string () const;
+
+ AsyncConstStatus get_const_status () const { return const_status; }
+ bool is_unsafe () const { return has_unsafe; }
+ bool is_extern () const { return has_extern; }
+ std::string get_extern_abi () const { return extern_abi; }
};
// A function parameter
@@ -1587,7 +1592,7 @@ public:
return function_body;
}
- FunctionQualifiers get_qualifiers () const { return qualifiers; }
+ const FunctionQualifiers &get_qualifiers () const { return qualifiers; }
Identifier get_function_name () const { return function_name; }
diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h
index 457ca1d..047d531 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -278,6 +278,9 @@ protected:
HIR::QualifiedPathType
lower_qual_path_type (AST::QualifiedPathType &qual_path_type);
+
+ HIR::FunctionQualifiers
+ lower_qualifiers (const AST::FunctionQualifiers &qualifiers);
};
} // namespace HIR
diff --git a/gcc/rust/hir/rust-ast-lower-item.h b/gcc/rust/hir/rust-ast-lower-item.h
index 60315db..af9e129 100644
--- a/gcc/rust/hir/rust-ast-lower-item.h
+++ b/gcc/rust/hir/rust-ast-lower-item.h
@@ -429,8 +429,8 @@ public:
}
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (function.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
@@ -439,7 +439,6 @@ public:
{
generic_params = lower_generic_params (function.get_generic_params ());
}
-
Identifier function_name = function.get_function_name ();
Location locus = function.get_locus ();
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index d8d53eb..326412b 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -593,5 +593,33 @@ struct_field_name_exists (std::vector<HIR::StructField> &fields,
return false;
}
+HIR::FunctionQualifiers
+ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers)
+{
+ HIR::FunctionQualifiers::AsyncConstStatus const_status;
+ switch (qualifiers.get_const_status ())
+ {
+ case AST::FunctionQualifiers::AsyncConstStatus::NONE:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::NONE;
+ break;
+ case AST::FunctionQualifiers::AsyncConstStatus::CONST:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::CONST;
+ break;
+ case AST::FunctionQualifiers::AsyncConstStatus::ASYNC:
+ const_status = HIR::FunctionQualifiers::AsyncConstStatus::ASYNC;
+ break;
+ }
+
+ Unsafety unsafety
+ = qualifiers.is_unsafe () ? Unsafety::Unsafe : Unsafety::Normal;
+ bool has_extern = qualifiers.is_extern ();
+
+ // FIXME turn this into the Rust::ABI enum
+ std::string extern_abi = qualifiers.get_extern_abi ();
+
+ return HIR::FunctionQualifiers (const_status, unsafety, has_extern,
+ extern_abi);
+}
+
} // namespace HIR
} // namespace Rust
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index fb45bfa..09f9d38 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -511,6 +511,10 @@ public:
}
std::string as_string () const;
+
+ AsyncConstStatus get_status () const { return const_status; }
+
+ bool is_const () const { return const_status == AsyncConstStatus::CONST; }
};
// A function parameter
@@ -1216,7 +1220,7 @@ public:
return function_body;
}
- FunctionQualifiers get_qualifiers () const { return qualifiers; }
+ const FunctionQualifiers &get_qualifiers () const { return qualifiers; }
Identifier get_function_name () const { return function_name; }