From e18f0f099586c5e25441ef8e0f8f44c51ad2b811 Mon Sep 17 00:00:00 2001 From: "Guillem L. Jara" <4lon3ly0@tutanota.com> Date: Thu, 14 May 2026 09:17:02 +0200 Subject: [PATCH] lexer: move arena to be behind NonNull --- lexer/src/lib.rs | 9 +++++---- lexer/src/tests.rs | 16 ++++------------ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/lexer/src/lib.rs b/lexer/src/lib.rs index d10c3d3..cfb928b 100644 --- a/lexer/src/lib.rs +++ b/lexer/src/lib.rs @@ -10,6 +10,7 @@ use core::str; use std::{ cmp::Ordering, fmt::{Debug, Display}, + ptr::NonNull, slice::SliceIndex, }; @@ -228,10 +229,10 @@ pub enum Token<'a> { Semicolon, } -#[derive(Debug, Default, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq)] pub struct Extra { ctx: Context, - arena: *const Bump, + arena: NonNull, posix_strict: bool, gnu_strict: bool, } @@ -279,7 +280,7 @@ impl<'a> Token<'a> { source, Extra { ctx: Context::AcceptExpression, - arena, + arena: NonNull::from_ref(arena), posix_strict, gnu_strict, }, @@ -582,6 +583,6 @@ impl Extra { fn arena<'a>(&self) -> &'a Bump { // SAFETY: lives for as long as self because it's the same lifetime as // the source being lexed; Logos just can't take lifetimes on extras. - unsafe { &*self.arena } + unsafe { self.arena.as_ref() } } } diff --git a/lexer/src/tests.rs b/lexer/src/tests.rs index a5d21d1..35883c4 100644 --- a/lexer/src/tests.rs +++ b/lexer/src/tests.rs @@ -5,7 +5,7 @@ use std::io::Write; -use crate::{Context, Extra, Identifier, Lexer, Token}; +use crate::{Identifier, Token}; use bumpalo::{ Bump, collections::{CollectIn, Vec}, @@ -17,17 +17,9 @@ fn lex<'a>( posix_strict: bool, gnu_strict: bool, ) -> Vec<'a, Token<'a>> { - Lexer::with_extras( - src, - Extra { - ctx: Context::AcceptExpression, - arena, - posix_strict, - gnu_strict, - }, - ) - .collect_in::, _>>(arena) - .unwrap() + Token::lex(src, arena, posix_strict, gnu_strict) + .collect_in::, _>>(arena) + .unwrap() } #[test]