Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions rust/ruby-rbs/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
writeln!(file, "#[allow(dead_code)]")?; // TODO: Remove this once all nodes that need parser are implemented
writeln!(file, "#[derive(Debug)]")?;
writeln!(file, "pub struct {}<'a> {{", node.rust_name)?;
writeln!(file, " parser: *mut rbs_parser_t,")?;
writeln!(file, " parser: NonNull<rbs_parser_t>,")?;
writeln!(
file,
" pointer: *mut {},",
Expand Down Expand Up @@ -525,7 +525,7 @@ fn generate(config: &Config) -> Result<(), Box<dyn Error>> {
writeln!(file, " #[allow(clippy::missing_safety_doc)]")?;
writeln!(
file,
" fn new(parser: *mut rbs_parser_t, node: *mut rbs_node_t) -> Self {{"
" fn new(parser: NonNull<rbs_parser_t>, node: *mut rbs_node_t) -> Self {{"
)?;
writeln!(file, " match unsafe {{ (*node).type_ }} {{")?;
for node in &config.nodes {
Expand Down
21 changes: 11 additions & 10 deletions rust/ruby-rbs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
use rbs_encoding_type_t::RBS_ENCODING_UTF_8;
use ruby_rbs_sys::bindings::*;
use std::marker::PhantomData;
use std::ptr::NonNull;
use std::sync::Once;

static INIT: Once = Once::new();
Expand Down Expand Up @@ -32,7 +33,7 @@ pub fn parse(rbs_code: &[u8]) -> Result<SignatureNode<'_>, String> {
let result = rbs_parse_signature(parser, &mut signature);

let signature_node = SignatureNode {
parser,
parser: NonNull::new_unchecked(parser),
pointer: signature,
marker: PhantomData,
};
Expand All @@ -48,7 +49,7 @@ pub fn parse(rbs_code: &[u8]) -> Result<SignatureNode<'_>, String> {
impl Drop for SignatureNode<'_> {
fn drop(&mut self) {
unsafe {
rbs_parser_free(self.parser);
rbs_parser_free(self.parser.as_ptr());
}
}
}
Expand All @@ -57,7 +58,7 @@ impl KeywordNode<'_> {
pub fn name(&self) -> &[u8] {
unsafe {
let constant_ptr = rbs_constant_pool_id_to_constant(
&(*self.parser).constant_pool,
&(*self.parser.as_ptr()).constant_pool,
(*self.pointer).constant_id,
);
if constant_ptr.is_null() {
Expand All @@ -71,13 +72,13 @@ impl KeywordNode<'_> {
}

pub struct NodeList<'a> {
parser: *mut rbs_parser_t,
parser: NonNull<rbs_parser_t>,
pointer: *mut rbs_node_list_t,
marker: PhantomData<&'a mut rbs_node_list_t>,
}

impl<'a> NodeList<'a> {
pub fn new(parser: *mut rbs_parser_t, pointer: *mut rbs_node_list_t) -> Self {
pub fn new(parser: NonNull<rbs_parser_t>, pointer: *mut rbs_node_list_t) -> Self {
Self {
parser,
pointer,
Expand All @@ -97,7 +98,7 @@ impl<'a> NodeList<'a> {
}

pub struct NodeListIter<'a> {
parser: *mut rbs_parser_t,
parser: NonNull<rbs_parser_t>,
current: *mut rbs_node_list_node_t,
marker: PhantomData<&'a mut rbs_node_list_node_t>,
}
Expand All @@ -118,13 +119,13 @@ impl<'a> Iterator for NodeListIter<'a> {
}

pub struct RBSHash<'a> {
parser: *mut rbs_parser_t,
parser: NonNull<rbs_parser_t>,
pointer: *mut rbs_hash,
marker: PhantomData<&'a mut rbs_hash>,
}

impl<'a> RBSHash<'a> {
pub fn new(parser: *mut rbs_parser_t, pointer: *mut rbs_hash) -> Self {
pub fn new(parser: NonNull<rbs_parser_t>, pointer: *mut rbs_hash) -> Self {
Self {
parser,
pointer,
Expand All @@ -144,7 +145,7 @@ impl<'a> RBSHash<'a> {
}

pub struct RBSHashIter<'a> {
parser: *mut rbs_parser_t,
parser: NonNull<rbs_parser_t>,
current: *mut rbs_hash_node_t,
marker: PhantomData<&'a mut rbs_hash_node_t>,
}
Expand Down Expand Up @@ -242,7 +243,7 @@ impl SymbolNode<'_> {
pub fn name(&self) -> &[u8] {
unsafe {
let constant_ptr = rbs_constant_pool_id_to_constant(
&(*self.parser).constant_pool,
&(*self.parser.as_ptr()).constant_pool,
(*self.pointer).constant_id,
);
if constant_ptr.is_null() {
Expand Down
Loading