aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbadumbatish <tanghocle456@gmail.com>2024-07-23 13:21:31 -0700
committerCohenArthur <arthur.cohen@embecosm.com>2024-07-24 08:19:01 +0000
commit0d0530b65fc1468e5d5ac64c60c502a84f28780b (patch)
tree017fe52757bc0a0dfb48bbc0d197d8c82ffeb9a5
parenta79d297dccf7c36759551ce224a9d80f0505ecaf (diff)
downloadgcc-0d0530b65fc1468e5d5ac64c60c502a84f28780b.zip
gcc-0d0530b65fc1468e5d5ac64c60c502a84f28780b.tar.gz
gcc-0d0530b65fc1468e5d5ac64c60c502a84f28780b.tar.bz2
Fix ffi and enum conventions
gcc/rust/ChangeLog: * ast/rust-fmt.h (enum ParseMode): Drop typedef in Cpp libgrust/ChangeLog: * libformat_parser/generic_format_parser/src/lib.rs: Remove repr(C) * libformat_parser/src/bin.rs: Use ffi * libformat_parser/src/lib.rs: pub ffi, create ParseMode and match rustc's parse mode
-rw-r--r--gcc/rust/ast/rust-fmt.h6
-rw-r--r--libgrust/libformat_parser/generic_format_parser/src/lib.rs1
-rw-r--r--libgrust/libformat_parser/src/bin.rs2
-rw-r--r--libgrust/libformat_parser/src/lib.rs43
4 files changed, 27 insertions, 25 deletions
diff --git a/gcc/rust/ast/rust-fmt.h b/gcc/rust/ast/rust-fmt.h
index ea9a7c1..fa0f5ec 100644
--- a/gcc/rust/ast/rust-fmt.h
+++ b/gcc/rust/ast/rust-fmt.h
@@ -258,11 +258,11 @@ struct FormatArgsHandle
RustString rust_string;
};
-typedef enum
+enum ParseMode
{
- Format,
+ Format = 0,
InlineAsm,
-} ParseMode;
+};
extern "C" {
diff --git a/libgrust/libformat_parser/generic_format_parser/src/lib.rs b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
index ad4d3d9..25f6b0e 100644
--- a/libgrust/libformat_parser/generic_format_parser/src/lib.rs
+++ b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
@@ -78,7 +78,6 @@ enum InputStringKind {
}
/// The type of format string that we are parsing.
-#[repr(C)]
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum ParseMode {
/// A normal format string as per `format_args!`.
diff --git a/libgrust/libformat_parser/src/bin.rs b/libgrust/libformat_parser/src/bin.rs
index a7947af..a48d006 100644
--- a/libgrust/libformat_parser/src/bin.rs
+++ b/libgrust/libformat_parser/src/bin.rs
@@ -6,6 +6,6 @@ fn main() {
None,
None,
false,
- generic_format_parser::ParseMode::Format
+ libformat_parser::ffi::ParseMode::Format,
));
}
diff --git a/libgrust/libformat_parser/src/lib.rs b/libgrust/libformat_parser/src/lib.rs
index 42ad628..d920cfa 100644
--- a/libgrust/libformat_parser/src/lib.rs
+++ b/libgrust/libformat_parser/src/lib.rs
@@ -24,7 +24,7 @@ where
// FIXME: Make an ffi module in a separate file
// FIXME: Remember to leak the boxed type somehow
// FIXME: How to encode the Option type? As a pointer? Option<T> -> Option<&T> -> *const T could work maybe?
-mod ffi {
+pub mod ffi {
use super::IntoFFI;
// FIXME: We need to ensure we deal with memory properly - whether it's owned by the C++ side or the Rust side
@@ -79,14 +79,14 @@ mod ffi {
// TODO: Not needed for now?
// /// The type of format string that we are parsing.
- // #[derive(Copy, Clone, Debug, Eq, PartialEq)]
- // #[repr(C)]
- // pub enum ParseMode {
- // /// A normal format string as per `format_args!`.
- // Format,
- // /// An inline assembly template string for `asm!`.
- // InlineAsm,
- // }
+ #[derive(Copy, Clone, Debug, Eq, PartialEq)]
+ #[repr(C)]
+ pub enum ParseMode {
+ /// A normal format string as per `format_args!`.
+ Format = 0,
+ /// An inline assembly template string for `asm!`.
+ InlineAsm,
+ }
/// A piece is a portion of the format string which represents the next part
/// to emit. These are emitted as a stream by the `Parser` class.
@@ -327,17 +327,20 @@ mod ffi {
// FIXME: Rename?
pub mod rust {
- use generic_format_parser::{ParseMode, Parser, Piece};
-
+ use crate::ffi::ParseMode;
+ use generic_format_parser::{Parser, Piece};
pub fn collect_pieces(
input: &str,
style: Option<usize>,
snippet: Option<String>,
append_newline: bool,
- parse_mode: ParseMode
+ parse_mode: ParseMode,
) -> Vec<Piece<'_>> {
- let parser = Parser::new(input, style, snippet, append_newline, parse_mode);
-
+ let converted_parse_mode = match parse_mode {
+ ParseMode::Format => generic_format_parser::ParseMode::Format,
+ ParseMode::InlineAsm => generic_format_parser::ParseMode::InlineAsm,
+ };
+ let parser = Parser::new(input, style, snippet, append_newline, converted_parse_mode);
parser.into_iter().collect()
}
}
@@ -361,12 +364,11 @@ pub struct RustString {
#[repr(C)]
pub struct FormatArgsHandle(PieceSlice, RustString);
-
#[no_mangle]
pub extern "C" fn collect_pieces(
input: *const libc::c_char,
append_newline: bool,
- parse_mode : generic_format_parser::ParseMode
+ parse_mode: crate::ffi::ParseMode,
) -> FormatArgsHandle {
// FIXME: Add comment
let str = unsafe { CStr::from_ptr(input) };
@@ -379,10 +381,11 @@ pub extern "C" fn collect_pieces(
let s = unsafe { std::mem::transmute::<&'_ str, &'static str>(s) };
// FIXME: No unwrap
- let pieces: Vec<ffi::Piece<'_>> = rust::collect_pieces(s, None, None, append_newline, parse_mode)
- .into_iter()
- .map(Into::into)
- .collect();
+ let pieces: Vec<ffi::Piece<'_>> =
+ rust::collect_pieces(s, None, None, append_newline, parse_mode)
+ .into_iter()
+ .map(Into::into)
+ .collect();
let piece_slice = PieceSlice {
len: pieces.len(),